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 0000000..e98cbf0 Binary files /dev/null and b/MaskFromRGB/sample.png differ 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 0000000..e98cbf0 Binary files /dev/null and b/MaskFromRGB_Multi/sample.png differ 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 0000000..83fbb99 Binary files /dev/null and b/Max_Kasumi/02_00001.png differ diff --git a/Max_Kasumi/02_00001.psd b/Max_Kasumi/02_00001.psd new file mode 100644 index 0000000..fb691b0 Binary files /dev/null and b/Max_Kasumi/02_00001.psd differ diff --git a/Max_Kasumi/02_00002.png b/Max_Kasumi/02_00002.png new file mode 100644 index 0000000..72d1e25 Binary files /dev/null and b/Max_Kasumi/02_00002.png differ diff --git a/Max_Kasumi/02_00003.png b/Max_Kasumi/02_00003.png new file mode 100644 index 0000000..ae82965 Binary files /dev/null and b/Max_Kasumi/02_00003.png differ diff --git a/Max_Kasumi/Fs_Entry.h b/Max_Kasumi/Fs_Entry.h new file mode 100644 index 0000000..0f097f6 --- /dev/null +++ b/Max_Kasumi/Fs_Entry.h @@ -0,0 +1,227 @@ +//----------------------------------------------------------------------------------- +/* + Max_Kasumi 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_Kasumi/Fs_Target.h b/Max_Kasumi/Fs_Target.h new file mode 100644 index 0000000..2e4624b --- /dev/null +++ b/Max_Kasumi/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 Max_Kasumi" + +//----------------------------------------------------------------------------------- +//プラグインの説明に使われる文字 +#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/Max_Kasumi/Max_Kasumi.cpp b/Max_Kasumi/Max_Kasumi.cpp new file mode 100644 index 0000000..c6470ed --- /dev/null +++ b/Max_Kasumi/Max_Kasumi.cpp @@ -0,0 +1,217 @@ +//----------------------------------------------------------------------------------- +/* + F's Plugins for VS2010/VS2012 +*/ +//----------------------------------------------------------------------------------- + + +#include "Max_Kasumi.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, //パラメータの名前 + -30, //数値入力する場合の最小値 + 30, //数値入力する場合の最大値 + -15, //スライダーの最小値 + 15, //スライダーの最大値 + 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 + ); + + //---------------------------------------------------------------- + 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->GetADD(ID_MAX, &infoP->max)); + if (!err) infoP->max = ae->downScaleNoClip(infoP->max); + if (infoP->max < 0) { + infoP->minus = TRUE; + infoP->max *= -1; + } + else { + infoP->minus = FALSE; + } + ERR(ae->GetPOPUP(ID_DIR, &infoP->dir)); + ERR(ae->GetPOPUP(ID_CHANNEL, &infoP->ch)); + + return err; +} + +//------------------------------------------------------------------------------------------------- +static PF_Err + Exec (CFsAE *ae , ParamInfo *infoP) +{ + PF_Err err = PF_Err_NONE; + + //画面をコピー + ERR(ae->CopyInToOut()); + + if ( infoP->max==0) + { + return err; + } + if (ae->downSaleValue() != 1) { + return err; + } + switch(ae->pixelFormat()) + { + case PF_PixelFormat_ARGB128: + ERR(Exec32(ae, infoP)); + break; + case PF_PixelFormat_ARGB64: + ERR(Exec16(ae, infoP)); + break; + case PF_PixelFormat_ARGB32: + 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/Max_Kasumi/Max_Kasumi.h b/Max_Kasumi/Max_Kasumi.h new file mode 100644 index 0000000..d38448f --- /dev/null +++ b/Max_Kasumi/Max_Kasumi.h @@ -0,0 +1,133 @@ +//----------------------------------------------------------------------------------- +/* + Max_Kasumi for VS2010 +*/ +//----------------------------------------------------------------------------------- + +#pragma once +#ifndef Max_Kasumi_H +#define Max_Kasumi_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_NUM_PARAMS +}; + +//UIの表示文字列 +#define STR_MAX "Value" +#define STR_DIR1 "ScanLine" +#define STR_DIR2 "Horizon+Vertical|Horizon|Vertical" +#define STR_CH1 "Channel" +#define STR_CH2 "RGB+Alpha|RGB|alpha" + + + + +//UIのパラメータ +typedef struct ParamInfo { + A_long max; + PF_Boolean minus; + A_long dir; + A_long ch; +} ParamInfo; + +typedef struct ParamInfo8 { + ParamInfo info; + + PF_InData *in_data; + A_long width; + A_long widthTrue; + A_long widthOffset; + A_long height; + PF_Pixel *data; + + A_long bufSize; + PF_Handle bufH; + PF_Pixel *scanline; +} ParamInfo8; + +typedef struct ParamInfo16 { + ParamInfo info; + + PF_InData *in_data; + A_long width; + A_long widthTrue; + A_long widthOffset; + A_long height; + PF_Pixel16 *data; + + A_long bufSize; + PF_Handle bufH; + PF_Pixel16 *scanline; +} ParamInfo16; + +typedef struct ParamInfo32 { + ParamInfo info; + + PF_InData *in_data; + A_long width; + A_long widthTrue; + A_long widthOffset; + A_long height; + PF_PixelFloat *data; + + A_long bufSize; + PF_Handle bufH; + PF_PixelFloat *scanline; +} ParamInfo32; + +//------------------------------------------------------- +PF_Err Exec8(CFsAE *ae, ParamInfo *infoP); +PF_Err Exec16(CFsAE *ae, ParamInfo *infoP); +PF_Err Exec32(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 // Max_Kasumi_H diff --git a/Max_Kasumi/Max_KasumiPiPL.r b/Max_Kasumi/Max_KasumiPiPL.r new file mode 100644 index 0000000..98b2313 --- /dev/null +++ b/Max_Kasumi/Max_KasumiPiPL.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/Max_Kasumi/Max_KasumiSub16.cpp b/Max_Kasumi/Max_KasumiSub16.cpp new file mode 100644 index 0000000..aa8721e --- /dev/null +++ b/Max_Kasumi/Max_KasumiSub16.cpp @@ -0,0 +1,385 @@ +#include "Max_Kasumi.h" + +//------------------------------------------------------------------------------------------------- +static PF_Err +Rev(CFsAE *ae, ParamInfo16 *pi) +{ + PF_Err err = PF_Err_NONE; + + PF_Pixel16 *data = pi->data; + + A_long pos = 0; + for (A_long y = 0; y < pi->height; y++) + { + for (A_long x = 0; x < pi->width; x++) + { + A_u_short r = data[pos].red; + A_u_short g = data[pos].green; + A_u_short b = data[pos].blue; + A_u_short a = data[pos].alpha; + data[pos].red = PF_MAX_CHAN16 - r; + data[pos].green = PF_MAX_CHAN16 - g; + data[pos].blue = PF_MAX_CHAN16 - b; + data[pos].alpha = PF_MAX_CHAN16 - a; + pos++; + } + pos += pi->widthOffset; + } + return err; +} +//------------------------------------------------------------------------------------------------- +static PF_Err +MaxHorRGB16(CFsAE *ae, ParamInfo16 *pi) +{ + PF_Err err = PF_Err_NONE; + + PF_Pixel16 *data = pi->data; + + A_u_short a; + A_long r, g, b, v,p; + A_long r1, g1, b1, v1; + A_long r2, g2, b2, v2; + 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]; + } + for (A_long x = 0; x < pi->width; x++) { + r = (A_long)pi->scanline[x].red; + g = (A_long)pi->scanline[x].green; + b = (A_long)pi->scanline[x].blue; + a = pi->scanline[x].alpha; + + //v = (76 * r) + (150 * g) + (29 * b); + v = r + g + b; + + r1 = r2 = r; + g1 = g2 = g; + b1 = b2 = b; + + if (x > 0) { + r1 = pi->scanline[x - 1].red; + g1 = pi->scanline[x - 1].green; + b1 = pi->scanline[x - 1].blue; + //v1 = (76 * r1) + (150 * g1) + (29 * b1); + v1 = r1 + g1 + b1; + } + if (x < pi->width - 1) { + r2 = pi->scanline[x + 1].red; + g2 = pi->scanline[x + 1].green; + b2 = pi->scanline[x + 1].blue; + //v2 = (76 * r2) + (150 * g2) + (29 * b2); + v2 = r2 + g2 + b2; + } + if (v1 < v2) { + r1 = r2; + g1 = g2; + b1 = b2; + v1 = v2; + } + if (v r1) r = r1; + p = g1 / 4; + g = g + p - g * p / PF_MAX_CHAN16; + if (g > g1) g = g1; + p = b1 / 4; + b = b + p - b * p / PF_MAX_CHAN16; + if (b > b1) b = b1; + + PF_Pixel16 c; + c.red = (A_u_short)r; + c.green = (A_u_short)g; + c.blue = (A_u_short)b; + c.alpha = a; + data[x + hor] = c; + } + + } + + } + + return err; +} +//------------------------------------------------------------------------------------------------- +static PF_Err +MaxVerRGB16(CFsAE *ae, ParamInfo16 *pi) +{ + PF_Err err = PF_Err_NONE; + + PF_Pixel16 *data = pi->data; + + A_u_short a; + A_long r, g, b, v, p; + A_long r1, g1, b1, v1; + A_long r2, g2, b2, v2; + 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]; + hor += pi->widthTrue; + } + + hor = 0; + for (A_long y = 0; y < pi->height; y++) { + r = (A_long)pi->scanline[y].red; + g = (A_long)pi->scanline[y].green; + b = (A_long)pi->scanline[y].blue; + a = pi->scanline[y].alpha; + + //v = (76 * r) + (150 * g) + (29 * b); + v = r + g + b; + + + r1 = r2 = r; + g1 = g2 = g; + b1 = b2 = b; + + if (y > 0) { + r1 = pi->scanline[y - 1].red; + g1 = pi->scanline[y - 1].green; + b1 = pi->scanline[y - 1].blue; + //v1 = (76 * r1) + (150 * g1) + (29 * b1); + v1 = r1 + g1 + b1; + } + if (y < pi->height - 1) { + r2 = pi->scanline[y + 1].red; + g2 = pi->scanline[y + 1].green; + b2 = pi->scanline[y + 1].blue; + //v2 = (76 * r2) + (150 * g2) + (29 * b2); + v2 = r2 + g2 + b2; + } + if (v1 < v2) { + r1 = r2; + g1 = g2; + b1 = b2; + v1 = v2; + } + if (v < v1) { + p = r1 / 4; + r = r + p - r * p / PF_MAX_CHAN16; + if (r > r1) r = r1; + p = g1 / 4; + g = g + p - g * p / PF_MAX_CHAN16; + if (g > g1) g = g1; + p = b1 / 4; + b = b + p - b * p / PF_MAX_CHAN16; + if (b > b1) b = b1; + PF_Pixel16 c; + c.red = (A_u_short)r; + c.green = (A_u_short)g; + c.blue = (A_u_short)b; + c.alpha = a; + data[x + hor] = c; + } + hor += pi->widthTrue; + + } + + } + + return err; +} +//------------------------------------------------------------------------------------------------- +static PF_Err +MaxHorA16(CFsAE *ae, ParamInfo16 *pi) +{ + PF_Err err = PF_Err_NONE; + + PF_Pixel16 *data = pi->data; + + A_long a, p; + A_u_short r, g, b; + A_long a1, a2; + 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]; + } + for (A_long x = 0; x < pi->width; x++) { + r = pi->scanline[x].red; + g = pi->scanline[x].green; + b = pi->scanline[x].blue; + a = (A_long)pi->scanline[x].alpha; + + a1 = a2 = a; + + if (x > 0) { + a1 = pi->scanline[x - 1].alpha; + } + if (x < pi->width - 1) { + a2 = pi->scanline[x + 1].alpha; + } + if (a1 < a2) { + a1 = a2; + } + if (a < a1) { + p = a1 / 4; + a = a + p - a * p / PF_MAX_CHAN16; + if (a > a1) a = a1; + + PF_Pixel16 c; + c.red = r; + c.green = g; + c.blue = b; + c.alpha = (A_u_short)a; + data[x + hor] = c; + } + + } + + } + + return err; +} +//------------------------------------------------------------------------------------------------- +static PF_Err +MaxVerA16(CFsAE *ae, ParamInfo16 *pi) +{ + PF_Err err = PF_Err_NONE; + + PF_Pixel16 *data = pi->data; + + A_long a, p; + A_u_short r, g, b; + A_long a1, a2; + 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]; + hor += pi->widthTrue; + } + hor = 0; + for (A_long y = 0; y < pi->height; y++) { + r = pi->scanline[y].red; + g = pi->scanline[y].green; + b = pi->scanline[y].blue; + a = (A_long)pi->scanline[y].alpha; + + a1 = a2 = a; + + if (x > 0) { + a1 = pi->scanline[y - 1].alpha; + } + if (x < pi->width - 1) { + a2 = pi->scanline[y + 1].alpha; + } + if (a1 < a2) { + a1 = a2; + } + if (a < a1) { + p = a1 / 4; + a = a + p - a * p / PF_MAX_CHAN16; + if (a > a1) a = a1; + + PF_Pixel16 c; + c.red = r; + c.green = g; + c.blue = b; + c.alpha = (A_u_short)a; + data[x + hor] = c; + } + hor += pi->widthTrue; + + } + + } + + return err; +} +//------------------------------------------------------------------------------------------------- +static PF_Err ToParam16(CFsAE *ae, ParamInfo *infoP, ParamInfo16 *pi) +{ + PF_Err err = PF_Err_NONE; + + + pi->width = ae->out->width(); + pi->widthTrue = ae->out->widthTrue(); + pi->widthOffset = ae->out->offsetWidth(); + pi->height = ae->out->height(); + pi->data = (PF_Pixel16 *)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; + + + + return err; +} +//------------------------------------------------------------------------------------------------- +PF_Err Exec16(CFsAE *ae, ParamInfo *infoP) +{ + PF_Err err = PF_Err_NONE; + + if (ae->out->Enabled() == FALSE) + { + return PF_Err_INVALID_CALLBACK; + } + ParamInfo16 pi; + + ToParam16(ae, infoP, &pi); + if (pi.info.max <= 0) { + return err; + } + + pi.bufH = ae->NewHandle(pi.bufSize * sizeof(PF_Pixel16) * 2); + if (pi.bufH == NULL) { + err = PF_Err_OUT_OF_MEMORY; + return err; + } + pi.scanline = *(PF_Pixel16**)pi.bufH; + + + ae->out->toBlackMat16(); + if (pi.info.minus)Rev(ae, &pi); + + if ((pi.info.ch == 1) || (pi.info.ch == 2)) { + for (A_long i = 0; i < pi.info.max; i++) + { + if ((pi.info.dir == 1) || (pi.info.dir == 2)) { + MaxHorRGB16(ae, &pi); + } + if ((pi.info.dir == 1) || (pi.info.dir == 3)) { + MaxVerRGB16(ae, &pi); + } + } + } + if ((pi.info.ch == 1) || (pi.info.ch == 3)) { + for (A_long i = 0; i < pi.info.max; i++) + { + if ((pi.info.dir == 1) || (pi.info.dir == 2)) { + MaxHorA16(ae, &pi); + } + if ((pi.info.dir == 1) || (pi.info.dir == 3)) { + MaxVerA16(ae, &pi); + } + } + } + + + if (pi.info.minus)Rev(ae, &pi); + ae->out->SetMatMode(MAT::blackMat); + ae->out->fromBlackMat16(); + + if (pi.bufH != NULL) { + ae->DisposeHandle(pi.bufH); + pi.bufH = NULL; + } + + + return err; + +} \ No newline at end of file diff --git a/Max_Kasumi/Max_KasumiSub32.cpp b/Max_Kasumi/Max_KasumiSub32.cpp new file mode 100644 index 0000000..c4f3b17 --- /dev/null +++ b/Max_Kasumi/Max_KasumiSub32.cpp @@ -0,0 +1,386 @@ +#include "Max_Kasumi.h" + +//------------------------------------------------------------------------------------------------- +static PF_Err +Rev(CFsAE *ae, ParamInfo32 *pi) +{ + PF_Err err = PF_Err_NONE; + + PF_PixelFloat *data = pi->data; + + A_long pos = 0; + for (A_long y = 0; y < pi->height; y++) + { + for (A_long x = 0; x < pi->width; x++) + { + PF_FpShort r = data[pos].red; + PF_FpShort g = data[pos].green; + PF_FpShort b = data[pos].blue; + PF_FpShort a = data[pos].alpha; + if (r > 1.0) r = 1.0; + if (g > 1.0) g = 1.0; + if (b > 1.0) b = 1.0; + if (a > 1.0) a = 1.0; + data[pos].red = (PF_FpShort)(1.0 - r); + data[pos].green = (PF_FpShort)(11.0 - g); + data[pos].blue = (PF_FpShort)(11.0 - b); + data[pos].alpha = (PF_FpShort)(11.0 - a); + pos++; + } + pos += pi->widthOffset; + } + return err; +} +//------------------------------------------------------------------------------------------------- +static PF_Err +MaxHorRGB32(CFsAE *ae, ParamInfo32 *pi) +{ + PF_Err err = PF_Err_NONE; + + PF_PixelFloat *data = pi->data; + + PF_FpShort a; + PF_FpShort r, g, b, v,p; + PF_FpShort r1, g1, b1, v1; + PF_FpShort r2, g2, b2, v2; + 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]; + } + for (A_long x = 0; x < pi->width; x++) { + r = pi->scanline[x].red; + g = pi->scanline[x].green; + b = pi->scanline[x].blue; + a = pi->scanline[x].alpha; + + v = r + g + b; + + r1 = r2 = r; + g1 = g2 = g; + b1 = b2 = b; + + if (x > 0) { + r1 = pi->scanline[x - 1].red; + g1 = pi->scanline[x - 1].green; + b1 = pi->scanline[x - 1].blue; + v1 = r1 + g1 + b1; + } + if (x < pi->width - 1) { + r2 = pi->scanline[x + 1].red; + g2 = pi->scanline[x + 1].green; + b2 = pi->scanline[x + 1].blue; + v2 = r2 + g2 + b2; + } + if (v1 < v2) { + r1 = r2; + g1 = g2; + b1 = b2; + v1 = v2; + } + if (v r1) r = r1; + p = g1 / 4; + g = g + p - g * p; + if (g > g1) g = g1; + p = b1 / 4; + b = b + p - b * p; + if (b > b1) b = b1; + + PF_PixelFloat c; + c.red = (PF_FpShort)r; + c.green = (PF_FpShort)g; + c.blue = (PF_FpShort)b; + c.alpha = a; + data[x + hor] = c; + } + + } + + } + + return err; +} +//------------------------------------------------------------------------------------------------- +static PF_Err +MaxVerRGB32(CFsAE *ae, ParamInfo32 *pi) +{ + PF_Err err = PF_Err_NONE; + + PF_PixelFloat *data = pi->data; + + PF_FpShort a; + PF_FpShort r, g, b, v, p; + PF_FpShort r1, g1, b1, v1; + PF_FpShort r2, g2, b2, v2; + + 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]; + hor += pi->widthTrue; + } + + hor = 0; + for (A_long y = 0; y < pi->height; y++) { + r = pi->scanline[y].red; + g = pi->scanline[y].green; + b = pi->scanline[y].blue; + a = pi->scanline[y].alpha; + + v = r + g + b; + + + r1 = r2 = r; + g1 = g2 = g; + b1 = b2 = b; + + if (y > 0) { + r1 = pi->scanline[y - 1].red; + g1 = pi->scanline[y - 1].green; + b1 = pi->scanline[y - 1].blue; + v1 = r1 + g1 + b1; + } + if (y < pi->height - 1) { + r2 = pi->scanline[y + 1].red; + g2 = pi->scanline[y + 1].green; + b2 = pi->scanline[y + 1].blue; + v2 = r2 + g2 + b2; + } + if (v1 < v2) { + r1 = r2; + g1 = g2; + b1 = b2; + v1 = v2; + } + if (v < v1) { + p = r1 / 4; + r = r + p - r * p; + if (r > r1) r = r1; + p = g1 / 4; + g = g + p - g * p; + if (g > g1) g = g1; + p = b1 / 4; + b = b + p - b * p; + if (b > b1) b = b1; + PF_PixelFloat c; + c.red = (PF_FpShort)r; + c.green = (PF_FpShort)g; + c.blue = (PF_FpShort)b; + c.alpha = a; + data[x + hor] = c; + } + hor += pi->widthTrue; + + } + + } + + return err; +} +//------------------------------------------------------------------------------------------------- +static PF_Err +MaxHorA32(CFsAE *ae, ParamInfo32 *pi) +{ + PF_Err err = PF_Err_NONE; + + PF_PixelFloat *data = pi->data; + + PF_FpShort a, p; + PF_FpShort r, g, b; + PF_FpShort a1, a2; + 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]; + } + for (A_long x = 0; x < pi->width; x++) { + r = pi->scanline[x].red; + g = pi->scanline[x].green; + b = pi->scanline[x].blue; + a = pi->scanline[x].alpha; + + a1 = a2 = a; + + if (x > 0) { + a1 = pi->scanline[x - 1].alpha; + } + if (x < pi->width - 1) { + a2 = pi->scanline[x + 1].alpha; + } + if (a1 < a2) { + a1 = a2; + } + if (a < a1) { + p = a1 / 4; + a = a + p - a * p; + if (a > a1) a = a1; + + PF_PixelFloat c; + c.red = r; + c.green = g; + c.blue = b; + c.alpha = (PF_FpShort)a; + data[x + hor] = c; + } + + } + + } + + return err; +} +//------------------------------------------------------------------------------------------------- +static PF_Err +MaxVerA32(CFsAE *ae, ParamInfo32 *pi) +{ + PF_Err err = PF_Err_NONE; + + PF_PixelFloat *data = pi->data; + + PF_FpShort a, p; + PF_FpShort r, g, b; + PF_FpShort a1, a2; + 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]; + hor += pi->widthTrue; + } + hor = 0; + for (A_long y = 0; y < pi->height; y++) { + r = pi->scanline[y].red; + g = pi->scanline[y].green; + b = pi->scanline[y].blue; + a = pi->scanline[y].alpha; + + a1 = a2 = a; + + if (x > 0) { + a1 = pi->scanline[y - 1].alpha; + } + if (x < pi->width - 1) { + a2 = pi->scanline[y + 1].alpha; + } + if (a1 < a2) { + a1 = a2; + } + if (a < a1) { + p = a1 / 4; + a = a + p - a * p; + if (a > a1) a = a1; + + PF_PixelFloat c; + c.red = r; + c.green = g; + c.blue = b; + c.alpha = (PF_FpShort)a; + data[x + hor] = c; + } + hor += pi->widthTrue; + + } + + } + + return err; +} +//------------------------------------------------------------------------------------------------- +static PF_Err ToParam32(CFsAE *ae, ParamInfo *infoP, ParamInfo32 *pi) +{ + PF_Err err = PF_Err_NONE; + + + pi->width = ae->out->width(); + pi->widthTrue = ae->out->widthTrue(); + pi->widthOffset = ae->out->offsetWidth(); + pi->height = ae->out->height(); + pi->data = (PF_PixelFloat *)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; + + + + return err; +} +//------------------------------------------------------------------------------------------------- +PF_Err Exec32(CFsAE *ae, ParamInfo *infoP) +{ + PF_Err err = PF_Err_NONE; + + if (ae->out->Enabled() == FALSE) + { + return PF_Err_INVALID_CALLBACK; + } + ParamInfo32 pi; + + ToParam32(ae, infoP, &pi); + if (pi.info.max <= 0) { + return err; + } + + pi.bufH = ae->NewHandle(pi.bufSize * sizeof(PF_PixelFloat) * 2); + if (pi.bufH == NULL) { + err = PF_Err_OUT_OF_MEMORY; + return err; + } + pi.scanline = *(PF_PixelFloat**)pi.bufH; + + + ae->out->toBlackMat32(); + if (pi.info.minus)Rev(ae, &pi); + + if ((pi.info.ch == 1) || (pi.info.ch == 2)) { + for (A_long i = 0; i < pi.info.max; i++) + { + if ((pi.info.dir == 1) || (pi.info.dir == 2)) { + MaxHorRGB32(ae, &pi); + } + if ((pi.info.dir == 1) || (pi.info.dir == 3)) { + MaxVerRGB32(ae, &pi); + } + } + } + if ((pi.info.ch == 1) || (pi.info.ch == 3)) { + for (A_long i = 0; i < pi.info.max; i++) + { + if ((pi.info.dir == 1) || (pi.info.dir == 2)) { + MaxHorA32(ae, &pi); + } + if ((pi.info.dir == 1) || (pi.info.dir == 3)) { + MaxVerA32(ae, &pi); + } + } + } + + + if (pi.info.minus)Rev(ae, &pi); + ae->out->SetMatMode(MAT::blackMat); + ae->out->fromBlackMat32(); + + if (pi.bufH != NULL) { + ae->DisposeHandle(pi.bufH); + pi.bufH = NULL; + } + + + return err; + +} \ No newline at end of file diff --git a/Max_Kasumi/Max_KasumiSub8.cpp b/Max_Kasumi/Max_KasumiSub8.cpp new file mode 100644 index 0000000..760dc74 --- /dev/null +++ b/Max_Kasumi/Max_KasumiSub8.cpp @@ -0,0 +1,386 @@ +#include "Max_Kasumi.h" + +//------------------------------------------------------------------------------------------------- +static PF_Err +Rev(CFsAE *ae, ParamInfo8 *pi) +{ + PF_Err err = PF_Err_NONE; + + PF_Pixel *data = pi->data; + + A_long pos = 0; + for (A_long y = 0; y < pi->height; y++) + { + for (A_long x = 0; x < pi->width; x++) + { + A_u_char r = data[pos].red; + A_u_char g = data[pos].green; + A_u_char b = data[pos].blue; + A_u_char a = data[pos].alpha; + data[pos].red = PF_MAX_CHAN8 - r; + data[pos].green = PF_MAX_CHAN8 - g; + data[pos].blue = PF_MAX_CHAN8 - b; + data[pos].alpha = PF_MAX_CHAN8 - a; + pos++; + } + pos += pi->widthOffset; + } + return err; +} +//------------------------------------------------------------------------------------------------- +static PF_Err +MaxHorRGB8(CFsAE *ae, ParamInfo8 *pi) +{ + PF_Err err = PF_Err_NONE; + + PF_Pixel *data = pi->data; + + A_u_char a; + A_long r, g, b, v,p; + A_long r1, g1, b1, v1; + A_long r2, g2, b2, v2; + 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]; + } + for (A_long x = 0; x < pi->width; x++) { + r = (A_long)pi->scanline[x].red; + g = (A_long)pi->scanline[x].green; + b = (A_long)pi->scanline[x].blue; + a = pi->scanline[x].alpha; + + //v = (76 * r) + (150 * g) + (29 * b); + v = r + g + b; + + r1 = r2 = r; + g1 = g2 = g; + b1 = b2 = b; + + if (x > 0) { + r1 = pi->scanline[x - 1].red; + g1 = pi->scanline[x - 1].green; + b1 = pi->scanline[x - 1].blue; + //v1 = (76 * r1) + (150 * g1) + (29 * b1); + v1 = r1 + g1 + b1; + } + if (x < pi->width - 1) { + r2 = pi->scanline[x + 1].red; + g2 = pi->scanline[x + 1].green; + b2 = pi->scanline[x + 1].blue; + //v2 = (76 * r2) + (150 * g2) + (29 * b2); + v2 = r2 + g2 + b2; + } + if (v1 < v2) { + r1 = r2; + g1 = g2; + b1 = b2; + v1 = v2; + } + if (v r1) r = r1; + p = g1 / 4; + g = g + p - g * p / PF_MAX_CHAN8; + if (g > g1) g = g1; + p = b1 / 4; + b = b + p - b * p / PF_MAX_CHAN8; + if (b > b1) b = b1; + + PF_Pixel c; + c.red = (A_u_char)r; + c.green = (A_u_char)g; + c.blue = (A_u_char)b; + c.alpha = a; + data[x + hor] = c; + } + + } + + } + + return err; +} +//------------------------------------------------------------------------------------------------- +static PF_Err +MaxVerRGB8(CFsAE *ae, ParamInfo8 *pi) +{ + PF_Err err = PF_Err_NONE; + + PF_Pixel *data = pi->data; + + A_u_char a; + A_long r, g, b, v, p; + A_long r1, g1, b1, v1; + A_long r2, g2, b2, v2; + 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]; + hor += pi->widthTrue; + } + + hor = 0; + for (A_long y = 0; y < pi->height; y++) { + r = (A_long)pi->scanline[y].red; + g = (A_long)pi->scanline[y].green; + b = (A_long)pi->scanline[y].blue; + a = pi->scanline[y].alpha; + + //v = (76 * r) + (150 * g) + (29 * b); + v = r + g + b; + + + r1 = r2 = r; + g1 = g2 = g; + b1 = b2 = b; + + if (y > 0) { + r1 = pi->scanline[y - 1].red; + g1 = pi->scanline[y - 1].green; + b1 = pi->scanline[y - 1].blue; + //v1 = (76 * r1) + (150 * g1) + (29 * b1); + v1 = r1 + g1 + b1; + } + if (y < pi->height - 1) { + r2 = pi->scanline[y + 1].red; + g2 = pi->scanline[y + 1].green; + b2 = pi->scanline[y + 1].blue; + //v2 = (76 * r2) + (150 * g2) + (29 * b2); + v2 = r2 + g2 + b2; + } + if (v1 < v2) { + r1 = r2; + g1 = g2; + b1 = b2; + v1 = v2; + } + if (v < v1) { + p = r1 / 4; + r = r + p - r * p / PF_MAX_CHAN8; + if (r > r1) r = r1; + p = g1 / 4; + g = g + p - g * p / PF_MAX_CHAN8; + if (g > g1) g = g1; + p = b1 / 4; + b = b + p - b * p / PF_MAX_CHAN8; + if (b > b1) b = b1; + PF_Pixel c; + c.red = (A_u_char)r; + c.green = (A_u_char)g; + c.blue = (A_u_char)b; + c.alpha = a; + data[x + hor] = c; + } + hor += pi->widthTrue; + + } + + } + + return err; +} +//------------------------------------------------------------------------------------------------- +static PF_Err +MaxHorA8(CFsAE *ae, ParamInfo8 *pi) +{ + PF_Err err = PF_Err_NONE; + + PF_Pixel *data = pi->data; + + A_long a, p; + A_u_char r, g, b; + A_long a1, a2; + 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]; + } + for (A_long x = 0; x < pi->width; x++) { + r = pi->scanline[x].red; + g = pi->scanline[x].green; + b = pi->scanline[x].blue; + a = (A_long)pi->scanline[x].alpha; + + a1 = a2 = a; + + if (x > 0) { + a1 = pi->scanline[x - 1].alpha; + } + if (x < pi->width - 1) { + a2 = pi->scanline[x + 1].alpha; + } + if (a1 < a2) { + a1 = a2; + } + if (a < a1) { + p = a1 / 4; + a = a + p - a * p / PF_MAX_CHAN8; + if (a > a1) a = a1; + + PF_Pixel c; + c.red = r; + c.green = g; + c.blue = b; + c.alpha = (A_u_char)a; + data[x + hor] = c; + } + + } + + } + + return err; +} +//------------------------------------------------------------------------------------------------- +static PF_Err +MaxVerA8(CFsAE *ae, ParamInfo8 *pi) +{ + PF_Err err = PF_Err_NONE; + + PF_Pixel *data = pi->data; + + A_long a, p; + A_u_char r, g, b; + A_long a1, a2; + 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]; + hor += pi->widthTrue; + } + hor = 0; + for (A_long y = 0; y < pi->height; y++) { + r = pi->scanline[y].red; + g = pi->scanline[y].green; + b = pi->scanline[y].blue; + a = (A_long)pi->scanline[y].alpha; + + a1 = a2 = a; + + if (x > 0) { + a1 = pi->scanline[y - 1].alpha; + } + if (x < pi->width - 1) { + a2 = pi->scanline[y + 1].alpha; + } + if (a1 < a2) { + a1 = a2; + } + if (a < a1) { + p = a1 / 4; + a = a + p - a * p / PF_MAX_CHAN8; + if (a > a1) a = a1; + + PF_Pixel c; + c.red = r; + c.green = g; + c.blue = b; + c.alpha = (A_u_char)a; + data[x + hor] = c; + } + hor += pi->widthTrue; + + } + + } + + 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->widthOffset = ae->out->offsetWidth(); + 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; + + + + return err; +} +//------------------------------------------------------------------------------------------------- +PF_Err Exec8(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); + if (pi.info.max <= 0) { + return err; + } + + pi.bufH = ae->NewHandle(pi.bufSize * sizeof(PF_Pixel) * 2); + if (pi.bufH == NULL) { + err = PF_Err_OUT_OF_MEMORY; + return err; + } + pi.scanline = *(PF_Pixel**)pi.bufH; + + + ae->out->toBlackMat8(); + if (pi.info.minus)Rev(ae, &pi); + + if ((pi.info.ch == 1) || (pi.info.ch == 2)) { + for (A_long i = 0; i < pi.info.max; i++) + { + if ((pi.info.dir == 1) || (pi.info.dir == 2)) { + MaxHorRGB8(ae, &pi); + } + if ((pi.info.dir == 1) || (pi.info.dir == 3)) { + MaxVerRGB8(ae, &pi); + } + } + } + if ((pi.info.ch == 1) || (pi.info.ch == 3)) { + for (A_long i = 0; i < pi.info.max; i++) + { + if ((pi.info.dir == 1) || (pi.info.dir == 2)) { + MaxHorA8(ae, &pi); + } + if ((pi.info.dir == 1) || (pi.info.dir == 3)) { + MaxVerA8(ae, &pi); + } + } + } + + + if (pi.info.minus)Rev(ae, &pi); + + ae->out->SetMatMode(MAT::blackMat); + ae->out->fromBlackMat8(); + + if (pi.bufH != NULL) { + ae->DisposeHandle(pi.bufH); + pi.bufH = NULL; + } + + + return err; + +} \ No newline at end of file diff --git a/Max_Kasumi/Win/Max_Kasumi.sln b/Max_Kasumi/Win/Max_Kasumi.sln new file mode 100644 index 0000000..ebc7682 --- /dev/null +++ b/Max_Kasumi/Win/Max_Kasumi.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}") = "Max_Kasumi", "Max_Kasumi.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/Max_Kasumi/Win/Max_Kasumi.vcxproj b/Max_Kasumi/Win/Max_Kasumi.vcxproj new file mode 100644 index 0000000..7123a7e --- /dev/null +++ b/Max_Kasumi/Win/Max_Kasumi.vcxproj @@ -0,0 +1,595 @@ + + + + + Debug + Win32 + + + Debug + x64 + + + Release-MD + Win32 + + + Release-MD + x64 + + + Release + Win32 + + + Release + x64 + + + + {81DD7657-558F-48CC-8F7C-A1C10D68E7F8} + Max_Kasumi + Max_Kasumi + 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/Max_Kasumi.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/Max_Kasumi.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/Max_Kasumi.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/Max_Kasumi.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/Max_Kasumi.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_Kasumi.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/Max_Kasumi/Win/Max_Kasumi.vcxproj.filters b/Max_Kasumi/Win/Max_Kasumi.vcxproj.filters new file mode 100644 index 0000000..138c1ce --- /dev/null +++ b/Max_Kasumi/Win/Max_Kasumi.vcxproj.filters @@ -0,0 +1,190 @@ + + + + + {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/Max_Kasumi/Win/Max_KasumiPiPL.rc b/Max_Kasumi/Win/Max_KasumiPiPL.rc new file mode 100644 index 0000000..a88444a --- /dev/null +++ b/Max_Kasumi/Win/Max_KasumiPiPL.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 Max_Kasumi\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 Max_Kasumi\0", + + "MIB8", + 0x6165464CL, + 0L, + 4L + 0L, + + +END + diff --git a/Max_Kasumi/Win/PluginSkeletonPiPL.rc b/Max_Kasumi/Win/PluginSkeletonPiPL.rc new file mode 100644 index 0000000..96a4b1d --- /dev/null +++ b/Max_Kasumi/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/Max_Kasumi/a b/Max_Kasumi/a new file mode 100644 index 0000000..0a8fa74 --- /dev/null +++ b/Max_Kasumi/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/Mosaic/Fs_Target.h b/Mosaic/Fs_Target.h new file mode 100644 index 0000000..b8b92d6 --- /dev/null +++ b/Mosaic/Fs_Target.h @@ -0,0 +1,79 @@ +//----------------------------------------------------------------------------------- +/* + F's Plugins for VS2010/VS2012 +*/ +//----------------------------------------------------------------------------------- + +#pragma once +#ifndef FS_TAGET_H +#define FS_TAGET_H + +//----------------------------------------------------------------------------------- +//プラグインの識別に使われる名前 +#define FS_NAME "F's Mosaic" +//----------------------------------------------------------------------------------- +//プラグインの説明に使われる文字 +#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 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 //こっちを有効にすると毎フレームごとに描画する +//#define FS_OUT_FLAGS 1600 //8bitのみ +//----------------------------------------------------------------------------------- +//out_flags2 +/* +out_data->out_flags2 + PF_OutFlag2_FLOAT_COLOR_AWARE 4096 + PF_OutFlag2_PARAM_GROUP_START_COLLAPSED_FLAG 8 + PF_OutFlag2_SUPPORTS_SMART_RENDER 1024 + PF_OutFlag2_SUPPORTS_QUERY_DYNAMIC_FLAGS 1 + PF_OutFlag2_DOESNT_NEED_EMPTY_PIXELS; 64 +*/ +#if defined(SUPPORT_SMARTFX) +#define FS_OUT_FLAGS2 5193 +#else +#define FS_OUT_FLAGS2 73 +#endif + + +//----------------------------------------------------------------------------------- +#endif diff --git a/Mosaic/Mosaic.cpp b/Mosaic/Mosaic.cpp new file mode 100644 index 0000000..85c119d --- /dev/null +++ b/Mosaic/Mosaic.cpp @@ -0,0 +1,394 @@ +//----------------------------------------------------------------------------------- +/* + F's Plugins for VS2010/VS2012 +*/ +//----------------------------------------------------------------------------------- + +#include "Mosaic.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; + + //---------------------------------------------------- + //1個目のパラメータ + AEFX_CLR_STRUCT(def); + PF_ADD_SLIDER( STR_SIZE,//パラメータの名前 + 1, //数値入力する場合の最小値 + 1920, //数値入力する場合の最大値 + 1, //スライダーの最小値 + 256, //スライダーの最大値 + 1, //デフォルトの値 + ID_SIZE + ); + + //---------------------------------------------------- + AEFX_CLR_STRUCT(def); + PF_ADD_POINT(STR_POS /*"New Center"*/, + 50, // X + 50, // Y + 0, // Flag + ID_POS + ); + //---------------------------------------------------- + AEFX_CLR_STRUCT(def); + PF_ADD_FIXED( STR_RAND, //パラメータの名前 + 0, //数値入力する場合の最小値 + 100, //数値入力する場合の最大値 + 0, //スライダーの最小値 + 20, //スライダーの最大値 + 0, //デフォルトの値 + 1, //数値表示に関するフラグ + 0, + 0, + ID_RAND + ); + //---------------------------------------------------------------- + AEFX_CLR_STRUCT(def); + PF_ADD_CHECKBOX(STR_RAND_GRAY, + STR_ON, + FALSE, + 0, + ID_RAND_GRAY + ); + //---------------------------------------------------------------- + AEFX_CLR_STRUCT(def); + PF_ADD_CHECKBOX(STR_FRAME_RAND_ON, + STR_ON, + FALSE, + 0, + ID_FRAME_RAND_ON + ); + //---------------------------------------------------- + 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 GetParams(CFsAE *ae, ParamInfo *infoP) +{ + PF_Err err = PF_Err_NONE; + + ERR(ae->GetADD(ID_SIZE,&infoP->size)); + if (!err)infoP->size = ae->downScale(infoP->size); + ERR(ae->GetFIXEDPOINT(ID_POS,&infoP->pos)); + ERR(ae->GetFIXED2FpShort(ID_RAND,&infoP->rand)); + if (!err) infoP->rand/=100; + ERR(ae->GetCHECKBOX(ID_RAND_GRAY,&infoP->rand_gray)); + ERR(ae->GetCHECKBOX(ID_FRAME_RAND_ON,&infoP->frameRandOn)); + return err; +} +//------------------------------------------------------------------------------------------------- +static PF_Err + Exec (CFsAE *ae , ParamInfo *infoP) +{ + PF_Err err = PF_Err_NONE; + + ae->CopyInToOut(); + if (infoP->size>1) + { + FsMosaicParam mp; + mp.sizeX = infoP->size; + mp.sizeY = infoP->size; + mp.pos = infoP->pos; + mp.rand = infoP->rand; + mp.isRandGray = infoP->rand_gray; + mp.isFrameRand = infoP->frameRandOn; + ERR(ae->out->mosaic(&mp)); + } + 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/Mosaic/Mosaic.h b/Mosaic/Mosaic.h new file mode 100644 index 0000000..0db6024 --- /dev/null +++ b/Mosaic/Mosaic.h @@ -0,0 +1,83 @@ +//----------------------------------------------------------------------------------- +/* + F's Plugins-cs4 for VS2008 +*/ +//----------------------------------------------------------------------------------- +#pragma once + +#ifndef Mosaic_H +#define Mosaic_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" + +enum { + ID_INPUT = 0, // default input layer + ID_SIZE, // モザイクの大きさ + ID_POS, //位置 + ID_RAND, //強さのチラツキ + ID_RAND_GRAY, //強さのチラツキ + ID_FRAME_RAND_ON, + ID_NUM_PARAMS +}; + +#define STR_SIZE "サイズ" +#define STR_POS "位置" +#define STR_RAND "ちらつき" +#define STR_RAND_GRAY "ちらつきをグレーに" +#define STR_FRAME_RAND_ON "フレーム毎にちらつかせる" +#define STR_ON "ON" + +//UIのパラメータ +typedef struct ParamInfo { + A_long size; //モザイクの大きさ + PF_FixedPoint pos; //モザイクの + PF_FpShort rand; + PF_Boolean rand_gray; + PF_Boolean frameRandOn; +} 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 // RandomMosaic \ No newline at end of file diff --git a/Mosaic/MosaicPiPL.r b/Mosaic/MosaicPiPL.r new file mode 100644 index 0000000..340e0d5 --- /dev/null +++ b/Mosaic/MosaicPiPL.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 { + 8 + } + } +}; + diff --git a/Mosaic/Win/Mosaic.vcxproj b/Mosaic/Win/Mosaic.vcxproj new file mode 100644 index 0000000..5ea2572 --- /dev/null +++ b/Mosaic/Win/Mosaic.vcxproj @@ -0,0 +1,585 @@ +サソ + + + + Debug + Win32 + + + Debug + x64 + + + Release-MD + Win32 + + + Release-MD + x64 + + + Release + Win32 + + + Release + x64 + + + + {F69A4DE5-0611-445F-AC50-32CE40DD5545} + Mosaic + 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/Mosaic.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/Mosaic.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/Mosaic.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/Mosaic.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/Mosaic.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/Mosaic.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/Mosaic/Win/Mosaic.vcxproj.filters b/Mosaic/Win/Mosaic.vcxproj.filters new file mode 100644 index 0000000..1c6e00b --- /dev/null +++ b/Mosaic/Win/Mosaic.vcxproj.filters @@ -0,0 +1,157 @@ + + + + + {2a97068f-020f-495f-a25d-fc449cfb4c98} + h;hpp;hxx;hm;inl;fi;fd + + + {c08e16fa-68e2-431e-b01b-e8a454a6e4cb} + + + {a2aeb4f6-c4ad-4b5e-a7ee-8aa2f9474cab} + ico;cur;bmp;dlg;rc2;rct;bin;cnt;rtf;gif;jpg;jpeg;jpe + + + {8e89b6f8-0c4c-4bcb-a434-77e170a2eb77} + + + {0a5ba89c-f3e1-4f3b-bbc7-3fb8f1637840} + + + {70dd9d8b-04ef-4cfa-b411-c415600f7b85} + + + {b96037f7-19ad-4413-914a-e00ccd3c0a2e} + + + {bfdd63a2-d270-4f6f-8a0a-c87bc02b42f8} + + + + + 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 + + + Supporting code\Fs + + + + + Resource Files + + + \ No newline at end of file diff --git a/Mosaic/Win/MosaicPiPL.rc b/Mosaic/Win/MosaicPiPL.rc new file mode 100644 index 0000000..93bb76a --- /dev/null +++ b/Mosaic/Win/MosaicPiPL.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 Mosaic\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, + 12, 0x0, + "\x0AF's Mosaic\0", + + "MIB8", + 0x6165464CL, + 0L, + 4L + 8L, + + +END + diff --git a/NamiGarasu/DrawSq.cpp b/NamiGarasu/DrawSq.cpp new file mode 100644 index 0000000..970235e --- /dev/null +++ b/NamiGarasu/DrawSq.cpp @@ -0,0 +1,204 @@ +#include "NamiGarasu.h" +#include "DrawSqData.h" +/* + 0:5 + 1:20 10000 + 2:40 2500 + 3:60 1111 + 4:80 625 + 5:100 400 + 6:120 278 + 7:140 200 + 8:160 156 + 9:180 120 + 10:200 100 + + 0: { 0,0,0,0,0,0,0 + 1: + 2: + 3: + 4: + 5: + 6: + 7: + 8: + 9: + + +*/ +//--------------------------------------------------------------- +void drawSq8(DrawInfo *infoP) +{ + int si = infoP->sizeIdx / infoP->scale; + int len = dataSize[si]; + int lenH= len/2; + int cnt = 0; + PF_Pixel *data; + data = (PF_Pixel *)infoP->scr.data; + for (int ay=0; ayy + ay - lenH) % infoP->scr.height; + if (y<0) { + y += infoP->scr.height; + }else if (y>=infoP->scr.height) { + y -= infoP->scr.height; + } + int yP = y * infoP->scr.widthTrue; + for (int ax=0; axx + ax - lenH) % infoP->scr.width; + if (x<0) { + x += infoP->scr.width; + }else if (x>=infoP->scr.width) { + x -= infoP->scr.width; + } + double par; + switch(si){ + case 0:par = (double)data10[cnt]/ PF_MAX_CHAN8;break; + case 1:par = (double)data20[cnt]/ PF_MAX_CHAN8;break; + case 2:par = (double)data40[cnt]/ PF_MAX_CHAN8;break; + case 3:par = (double)data60[cnt]/ PF_MAX_CHAN8;break; + case 4:par = (double)data80[cnt]/ PF_MAX_CHAN8;break; + case 5:par = (double)data100[cnt]/ PF_MAX_CHAN8;break; + case 6:par = (double)data120[cnt]/ PF_MAX_CHAN8;break; + case 7:par = (double)data140[cnt]/ PF_MAX_CHAN8;break; + case 8:par = (double)data160[cnt]/ PF_MAX_CHAN8;break; + case 9:par = (double)data180[cnt]/ PF_MAX_CHAN8;break; + case 10:par = (double)data200[cnt]/ PF_MAX_CHAN8;break; + } + par *= infoP->strong; + A_long s,d; + if (par>0) { + A_long pos = x +yP; + s = (A_long)data[pos].red; + if (infoP->isW==0){ + d = PF_MAX_CHAN8; + }else{ + d = 0; + } + d = (A_long)( (double)s + ((double)d -(double)s)*par +0.5); + if (d<0) d = 0; + else if (d>PF_MAX_CHAN8) d = PF_MAX_CHAN8; + + data[pos].red = (A_u_char)d; + } + cnt++; + + } + } +} +//--------------------------------------------------------------- +void drawSq16(DrawInfo *infoP) +{ + int si = infoP->sizeIdx / infoP->scale; + int len = dataSize[si]; + int lenH= len/2; + int cnt = 0; + PF_Pixel16 *data; + data = (PF_Pixel16 *)infoP->scr.data; + for (int ay=0; ayy + ay - lenH) % infoP->scr.height; + if (y<0) { + y += infoP->scr.height; + }else if (y>=infoP->scr.height) { + y -= infoP->scr.height; + } + int yP = y * infoP->scr.widthTrue; + for (int ax=0; axx + ax - lenH) % infoP->scr.width; + if (x<0) { + x += infoP->scr.width; + }else if (x>=infoP->scr.width) { + x -= infoP->scr.width; + } + double par; + switch(si){ + case 0:par = (double)data10[cnt]/ PF_MAX_CHAN8;break; + case 1:par = (double)data20[cnt]/ PF_MAX_CHAN8;break; + case 2:par = (double)data40[cnt]/ PF_MAX_CHAN8;break; + case 3:par = (double)data60[cnt]/ PF_MAX_CHAN8;break; + case 4:par = (double)data80[cnt]/ PF_MAX_CHAN8;break; + case 5:par = (double)data100[cnt]/ PF_MAX_CHAN8;break; + case 6:par = (double)data120[cnt]/ PF_MAX_CHAN8;break; + case 7:par = (double)data140[cnt]/ PF_MAX_CHAN8;break; + case 8:par = (double)data160[cnt]/ PF_MAX_CHAN8;break; + case 9:par = (double)data180[cnt]/ PF_MAX_CHAN8;break; + case 10:par = (double)data200[cnt]/ PF_MAX_CHAN8;break; + } + par *= infoP->strong; + A_long s,d; + if (par>0) { + A_long pos = x +yP; + s = (A_long)data[pos].red; + if (infoP->isW==0){ + d = PF_MAX_CHAN16; + }else{ + d = 0; + } + d = (A_long)( (double)s + ((double)d -(double)s)*par +0.5); + if (d<0) d = 0; + else if (d>PF_MAX_CHAN16) d = PF_MAX_CHAN16; + data[pos].red = (A_u_short)d; + } + cnt++; + + } + } +} +//--------------------------------------------------------------- +void drawSq32(DrawInfo *infoP) +{ + int si = infoP->sizeIdx / infoP->scale; + int len = dataSize[si]; + int lenH= len/2; + int cnt = 0; + PF_PixelFloat *data; + data = (PF_PixelFloat *)infoP->scr.data; + for (int ay=0; ayy + ay - lenH) % infoP->scr.height; + if (y<0) { + y += infoP->scr.height; + }else if (y>=infoP->scr.height) { + y -= infoP->scr.height; + } + int yP = y * infoP->scr.widthTrue; + for (int ax=0; axx + ax - lenH) % infoP->scr.width; + if (x<0) { + x += infoP->scr.width; + }else if (x>=infoP->scr.width) { + x -= infoP->scr.width; + } + double par; + switch(si){ + case 0:par = (double)data10[cnt]/ PF_MAX_CHAN8;break; + case 1:par = (double)data20[cnt]/ PF_MAX_CHAN8;break; + case 2:par = (double)data40[cnt]/ PF_MAX_CHAN8;break; + case 3:par = (double)data60[cnt]/ PF_MAX_CHAN8;break; + case 4:par = (double)data80[cnt]/ PF_MAX_CHAN8;break; + case 5:par = (double)data100[cnt]/ PF_MAX_CHAN8;break; + case 6:par = (double)data120[cnt]/ PF_MAX_CHAN8;break; + case 7:par = (double)data140[cnt]/ PF_MAX_CHAN8;break; + case 8:par = (double)data160[cnt]/ PF_MAX_CHAN8;break; + case 9:par = (double)data180[cnt]/ PF_MAX_CHAN8;break; + case 10:par = (double)data200[cnt]/ PF_MAX_CHAN8;break; + } + par *= infoP->strong; + double s,d; + if (par>0) { + A_long pos = x +yP; + s = (double)data[pos].red; + if (infoP->isW==0){ + d = 1.0; + }else{ + d = 0; + } + //d = (A_long)( (double)s + ((double)d -(double)s)*par +0.5); + d = ( s + (d - s)*par); + if (d<0) d = 0; + else if (d>1.0) d = 1.0; + data[pos].red = (PF_FpShort)d; + } + cnt++; + + } + } +} diff --git a/NamiGarasu/DrawSqData.h b/NamiGarasu/DrawSqData.h new file mode 100644 index 0000000..59f3e55 --- /dev/null +++ b/NamiGarasu/DrawSqData.h @@ -0,0 +1,1145 @@ +#pragma once +#ifndef DRAW_SQ_10_H +#define DRAW_SQ_10_H + +long dataSize[11] = {10,20,40,60,80,100,120,140,160,180,200}; + + +unsigned char data10[100] = { +0x00,0x00,0x00,0x01,0x03,0x03,0x01,0x00,0x00,0x00, +0x00,0x00,0x08,0x17,0x21,0x21,0x18,0x09,0x00,0x00, +0x00,0x08,0x23,0x40,0x52,0x53,0x41,0x24,0x09,0x00, +0x01,0x17,0x3f,0x72,0x9c,0x9d,0x75,0x42,0x19,0x01, +0x03,0x20,0x52,0x9c,0xee,0xf2,0xa0,0x55,0x23,0x05, +0x03,0x21,0x53,0x9d,0xf0,0xf4,0xa1,0x56,0x23,0x04, +0x01,0x18,0x41,0x75,0xa1,0xa2,0x78,0x43,0x1a,0x01, +0x00,0x09,0x24,0x42,0x56,0x56,0x43,0x25,0x0a,0x00, +0x00,0x00,0x09,0x19,0x23,0x23,0x19,0x0a,0x00,0x00, +0x00,0x00,0x00,0x01,0x05,0x05,0x01,0x00,0x00,0x00 +}; +unsigned char data20[400] = { +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x07,0x0a,0x0c,0x0c,0x0a,0x08,0x04,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x02,0x08,0x0f,0x15,0x19,0x1b,0x1b,0x19,0x15,0x10,0x09,0x02,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x03,0x0c,0x15,0x1d,0x25,0x2b,0x2e,0x2f,0x2b,0x26,0x1f,0x16,0x0d,0x03,0x00,0x00,0x00, +0x00,0x00,0x02,0x0c,0x17,0x22,0x2f,0x39,0x41,0x47,0x47,0x43,0x3a,0x2f,0x24,0x18,0x0d,0x03,0x00,0x00, +0x00,0x00,0x08,0x15,0x22,0x32,0x41,0x51,0x5e,0x64,0x64,0x5f,0x52,0x43,0x34,0x24,0x17,0x0a,0x01,0x00, +0x00,0x03,0x0f,0x1d,0x2e,0x42,0x57,0x6c,0x7d,0x87,0x87,0x7e,0x6e,0x59,0x44,0x31,0x1f,0x10,0x05,0x00, +0x00,0x07,0x16,0x25,0x39,0x51,0x6c,0x87,0x9f,0xad,0xae,0xa1,0x8a,0x6e,0x54,0x3c,0x27,0x16,0x08,0x00, +0x00,0x0a,0x19,0x2b,0x42,0x5e,0x7c,0x9f,0xc1,0xd9,0xda,0xc3,0xa2,0x80,0x61,0x44,0x2d,0x1b,0x0b,0x01, +0x00,0x0c,0x1b,0x2f,0x46,0x64,0x86,0xad,0xd9,0xff,0xff,0xdd,0xb2,0x8b,0x68,0x4a,0x30,0x1d,0x0d,0x01, +0x00,0x0c,0x1b,0x2f,0x47,0x65,0x87,0xae,0xd9,0xff,0xff,0xdf,0xb2,0x8b,0x67,0x4a,0x30,0x1d,0x0d,0x01, +0x00,0x0b,0x19,0x2b,0x43,0x5e,0x7e,0xa1,0xc3,0xdd,0xdf,0xc7,0xa4,0x81,0x62,0x45,0x2e,0x1b,0x0c,0x01, +0x00,0x08,0x15,0x26,0x3a,0x52,0x6e,0x89,0xa2,0xb2,0xb3,0xa4,0x8b,0x70,0x55,0x3d,0x28,0x17,0x09,0x00, +0x00,0x03,0x10,0x1e,0x2f,0x43,0x58,0x6e,0x80,0x8b,0x8b,0x81,0x70,0x5b,0x45,0x31,0x20,0x11,0x05,0x00, +0x00,0x00,0x0a,0x16,0x23,0x33,0x44,0x53,0x60,0x68,0x68,0x61,0x55,0x46,0x35,0x25,0x18,0x0b,0x01,0x00, +0x00,0x00,0x02,0x0d,0x18,0x23,0x31,0x3c,0x44,0x4a,0x4a,0x45,0x3c,0x31,0x25,0x19,0x0e,0x03,0x00,0x00, +0x00,0x00,0x00,0x03,0x0d,0x16,0x1f,0x27,0x2d,0x31,0x30,0x2d,0x28,0x20,0x18,0x0e,0x04,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x03,0x0a,0x10,0x16,0x1b,0x1d,0x1d,0x1b,0x16,0x11,0x0a,0x03,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x01,0x04,0x08,0x0c,0x0d,0x0d,0x0c,0x09,0x04,0x01,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 +}; +unsigned char data40[1600] = { +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x02,0x03,0x05,0x03,0x03,0x03,0x03,0x04,0x03,0x02,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x03,0x04,0x06,0x07,0x08,0x09,0x09,0x09,0x09,0x09,0x07,0x06,0x04,0x03,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x03,0x07,0x09,0x0a,0x0d,0x0d,0x0f,0x10,0x11,0x11,0x10,0x10,0x0d,0x0d,0x0b,0x09,0x07,0x04,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x05,0x08,0x09,0x0e,0x11,0x14,0x14,0x17,0x17,0x17,0x18,0x17,0x17,0x15,0x13,0x11,0x0f,0x0b,0x08,0x05,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x03,0x08,0x0b,0x0e,0x11,0x14,0x18,0x1b,0x1c,0x1e,0x1f,0x20,0x1f,0x1f,0x1f,0x1d,0x1b,0x19,0x16,0x12,0x0f,0x0a,0x08,0x04,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x07,0x0c,0x10,0x14,0x17,0x1b,0x1f,0x23,0x25,0x27,0x29,0x2a,0x2a,0x28,0x28,0x25,0x22,0x1f,0x1e,0x18,0x15,0x12,0x0d,0x07,0x05,0x01,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x01,0x04,0x09,0x0c,0x13,0x17,0x1c,0x1f,0x24,0x28,0x2c,0x2f,0x33,0x34,0x35,0x36,0x34,0x34,0x30,0x2d,0x28,0x25,0x20,0x1c,0x17,0x14,0x0e,0x0a,0x05,0x01,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x04,0x08,0x0d,0x12,0x18,0x1a,0x22,0x27,0x2e,0x32,0x37,0x39,0x3d,0x3e,0x40,0x40,0x3f,0x3d,0x3b,0x38,0x33,0x2d,0x27,0x24,0x1c,0x17,0x12,0x0d,0x08,0x04,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x01,0x02,0x09,0x0c,0x13,0x17,0x1c,0x23,0x29,0x30,0x38,0x3c,0x42,0x45,0x4a,0x4d,0x4f,0x4f,0x4d,0x4c,0x47,0x44,0x3d,0x36,0x32,0x2c,0x24,0x1f,0x18,0x13,0x0d,0x09,0x04,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x01,0x05,0x0b,0x0f,0x17,0x1b,0x22,0x29,0x31,0x39,0x41,0x45,0x4c,0x53,0x58,0x5b,0x5d,0x5c,0x5b,0x5a,0x53,0x4e,0x47,0x41,0x3a,0x34,0x2b,0x26,0x1d,0x19,0x11,0x0d,0x06,0x02,0x00,0x00,0x00, +0x00,0x00,0x00,0x04,0x08,0x0f,0x14,0x1c,0x21,0x2b,0x32,0x3b,0x42,0x4a,0x53,0x5c,0x63,0x69,0x6b,0x6d,0x6e,0x6b,0x69,0x63,0x5d,0x56,0x4d,0x44,0x3c,0x35,0x2c,0x23,0x1c,0x15,0x0f,0x08,0x06,0x01,0x00,0x00, +0x00,0x00,0x00,0x06,0x09,0x11,0x17,0x1f,0x27,0x30,0x3a,0x42,0x4c,0x56,0x60,0x68,0x6f,0x77,0x7a,0x7d,0x7d,0x7a,0x77,0x71,0x6b,0x62,0x58,0x4c,0x44,0x3b,0x32,0x29,0x20,0x19,0x14,0x0a,0x08,0x01,0x00,0x00, +0x00,0x01,0x03,0x09,0x0d,0x14,0x1c,0x24,0x2d,0x37,0x41,0x4b,0x56,0x63,0x6e,0x76,0x7f,0x88,0x8e,0x91,0x91,0x8e,0x8a,0x81,0x78,0x70,0x66,0x59,0x4d,0x43,0x3a,0x2f,0x26,0x1e,0x16,0x0e,0x0b,0x04,0x01,0x00, +0x00,0x01,0x04,0x0b,0x10,0x19,0x20,0x27,0x32,0x3c,0x45,0x54,0x5f,0x6d,0x76,0x83,0x8f,0x98,0x9e,0xa3,0xa2,0xa0,0x9a,0x92,0x87,0x79,0x6f,0x62,0x56,0x49,0x3e,0x33,0x2b,0x21,0x18,0x12,0x0c,0x05,0x01,0x00, +0x00,0x02,0x06,0x0d,0x14,0x1c,0x22,0x2c,0x37,0x43,0x4d,0x5c,0x68,0x77,0x84,0x96,0xa0,0xaa,0xb4,0xb7,0xb7,0xb4,0xad,0xa2,0x98,0x87,0x79,0x6b,0x5e,0x50,0x45,0x39,0x2f,0x24,0x1d,0x15,0x0e,0x07,0x03,0x00, +0x00,0x02,0x07,0x0e,0x14,0x1c,0x25,0x2f,0x39,0x47,0x53,0x63,0x6e,0x7f,0x90,0xa0,0xac,0xba,0xc5,0xca,0xca,0xc7,0xbd,0xaf,0xa2,0x93,0x83,0x73,0x66,0x56,0x49,0x3c,0x31,0x27,0x1e,0x16,0x0f,0x07,0x04,0x00, +0x00,0x03,0x07,0x10,0x16,0x1e,0x27,0x33,0x3d,0x4b,0x59,0x68,0x76,0x87,0x98,0xac,0xba,0xce,0xda,0xe1,0xe2,0xdb,0xce,0xbe,0xaf,0x9c,0x8b,0x7a,0x6d,0x5b,0x4d,0x40,0x34,0x29,0x21,0x19,0x11,0x09,0x05,0x00, +0x00,0x03,0x09,0x10,0x18,0x20,0x28,0x34,0x3e,0x4c,0x5b,0x6b,0x7a,0x8e,0x9e,0xb3,0xc4,0xda,0xe9,0xf2,0xf3,0xea,0xdd,0xc7,0xb7,0xa3,0x93,0x7e,0x6e,0x5e,0x50,0x41,0x36,0x29,0x21,0x19,0x11,0x09,0x04,0x00, +0x00,0x03,0x09,0x11,0x18,0x21,0x29,0x35,0x40,0x4f,0x5c,0x6d,0x7d,0x91,0xa3,0xb8,0xc9,0xe2,0xf3,0xff,0xff,0xf5,0xe6,0xcf,0xbc,0xa7,0x95,0x81,0x71,0x60,0x52,0x43,0x38,0x2b,0x21,0x18,0x12,0x0a,0x04,0x00, +0x00,0x03,0x09,0x11,0x18,0x20,0x2a,0x36,0x41,0x4f,0x5c,0x6d,0x7d,0x92,0xa4,0xb8,0xca,0xe3,0xf4,0xff,0xff,0xf7,0xe6,0xcf,0xbc,0xa8,0x94,0x80,0x71,0x60,0x52,0x43,0x38,0x2b,0x21,0x19,0x12,0x0a,0x04,0x00, +0x00,0x03,0x09,0x10,0x17,0x20,0x29,0x34,0x3f,0x4d,0x5c,0x6c,0x7a,0x8f,0xa0,0xb4,0xc5,0xda,0xea,0xf6,0xf8,0xee,0xe0,0xc9,0xb8,0xa5,0x92,0x7d,0x6f,0x5f,0x50,0x41,0x37,0x2b,0x22,0x19,0x12,0x09,0x04,0x00, +0x00,0x04,0x09,0x10,0x17,0x1e,0x27,0x32,0x3d,0x4c,0x59,0x69,0x77,0x8a,0x9a,0xad,0xbc,0xd0,0xdd,0xe4,0xe5,0xe0,0xd3,0xc1,0xb1,0x9d,0x8d,0x7b,0x6d,0x5b,0x4f,0x40,0x35,0x29,0x21,0x19,0x12,0x09,0x04,0x00, +0x00,0x03,0x07,0x0e,0x15,0x1c,0x24,0x30,0x3b,0x47,0x53,0x64,0x71,0x81,0x92,0xa2,0xaf,0xbf,0xc8,0xcf,0xd0,0xc9,0xbf,0xb2,0xa5,0x95,0x84,0x74,0x67,0x55,0x4a,0x3c,0x33,0x28,0x1e,0x16,0x0e,0x08,0x04,0x00, +0x00,0x02,0x07,0x0d,0x13,0x1b,0x23,0x2d,0x37,0x44,0x4f,0x5c,0x6a,0x79,0x87,0x96,0xa3,0xaf,0xb6,0xbb,0xbd,0xb8,0xb1,0xa5,0x9a,0x89,0x7b,0x6c,0x60,0x52,0x47,0x3a,0x2f,0x25,0x1d,0x15,0x0d,0x07,0x04,0x00, +0x00,0x01,0x05,0x0c,0x10,0x19,0x20,0x28,0x33,0x3e,0x47,0x56,0x61,0x6f,0x79,0x87,0x92,0x9c,0xa2,0xa7,0xa9,0xa4,0x9d,0x95,0x89,0x7b,0x73,0x64,0x58,0x4a,0x40,0x35,0x2a,0x21,0x19,0x12,0x0d,0x06,0x01,0x00, +0x00,0x01,0x03,0x09,0x0e,0x16,0x1e,0x25,0x2d,0x37,0x42,0x4d,0x57,0x65,0x6f,0x7a,0x83,0x8b,0x92,0x96,0x96,0x93,0x8d,0x84,0x7b,0x73,0x67,0x58,0x50,0x43,0x38,0x2f,0x28,0x1e,0x16,0x0f,0x0b,0x04,0x01,0x00, +0x00,0x00,0x01,0x07,0x0a,0x12,0x18,0x1f,0x27,0x31,0x3b,0x43,0x4d,0x58,0x62,0x6a,0x73,0x7a,0x7d,0x80,0x80,0x7d,0x79,0x74,0x6d,0x64,0x5a,0x4f,0x46,0x3d,0x33,0x28,0x22,0x1a,0x13,0x0c,0x08,0x02,0x00,0x00, +0x00,0x00,0x00,0x05,0x08,0x0f,0x15,0x1b,0x23,0x2b,0x34,0x3d,0x44,0x4d,0x56,0x5e,0x66,0x6c,0x6e,0x70,0x72,0x6f,0x6c,0x67,0x60,0x57,0x50,0x46,0x3e,0x35,0x2d,0x26,0x1d,0x16,0x11,0x0a,0x05,0x01,0x00,0x00, +0x00,0x00,0x00,0x01,0x05,0x0c,0x11,0x17,0x1c,0x24,0x2b,0x34,0x3b,0x43,0x49,0x50,0x55,0x5a,0x5e,0x60,0x5f,0x5f,0x5c,0x55,0x50,0x4a,0x44,0x3c,0x36,0x2b,0x25,0x1f,0x19,0x12,0x0d,0x07,0x02,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x03,0x08,0x0e,0x14,0x18,0x1e,0x24,0x2b,0x32,0x3a,0x3e,0x45,0x47,0x4d,0x50,0x52,0x52,0x50,0x4f,0x4a,0x46,0x3f,0x38,0x34,0x2d,0x26,0x1f,0x19,0x16,0x0d,0x0a,0x04,0x01,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x04,0x07,0x0e,0x13,0x19,0x1c,0x23,0x28,0x2f,0x34,0x39,0x3b,0x3f,0x41,0x43,0x43,0x42,0x40,0x3c,0x3a,0x34,0x30,0x29,0x24,0x1e,0x19,0x13,0x0f,0x08,0x05,0x01,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x02,0x05,0x0a,0x0e,0x14,0x19,0x1c,0x20,0x26,0x2a,0x2e,0x32,0x34,0x36,0x38,0x38,0x36,0x35,0x32,0x2f,0x2a,0x27,0x21,0x1e,0x19,0x16,0x0f,0x0b,0x05,0x02,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x04,0x07,0x0c,0x11,0x15,0x19,0x1f,0x20,0x23,0x27,0x29,0x2a,0x2c,0x2c,0x2a,0x29,0x28,0x24,0x21,0x1e,0x19,0x16,0x11,0x0e,0x08,0x06,0x01,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x04,0x0a,0x0c,0x10,0x14,0x16,0x19,0x1d,0x1e,0x20,0x21,0x22,0x22,0x22,0x21,0x1e,0x1d,0x19,0x17,0x13,0x10,0x0d,0x0a,0x05,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x06,0x0b,0x0b,0x0e,0x11,0x15,0x16,0x18,0x19,0x19,0x19,0x19,0x19,0x16,0x15,0x12,0x0f,0x0b,0x0a,0x06,0x04,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x05,0x07,0x0a,0x0c,0x0d,0x0f,0x11,0x11,0x12,0x13,0x12,0x12,0x0f,0x0e,0x0b,0x0a,0x08,0x06,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x02,0x03,0x05,0x07,0x08,0x09,0x09,0x0a,0x0b,0x09,0x09,0x08,0x07,0x05,0x03,0x02,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x03,0x04,0x04,0x04,0x04,0x04,0x04,0x05,0x04,0x04,0x02,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 +}; + +unsigned char data60[3600] = { +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x01,0x01,0x00,0x02,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x02,0x01,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x02,0x02,0x04,0x03,0x05,0x06,0x05,0x05,0x05,0x05,0x05,0x05,0x05,0x06,0x03,0x04,0x03,0x02,0x02,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x02,0x02,0x04,0x05,0x06,0x07,0x08,0x07,0x08,0x08,0x08,0x08,0x07,0x08,0x07,0x06,0x05,0x04,0x03,0x02,0x02,0x01,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x01,0x02,0x03,0x06,0x06,0x07,0x08,0x09,0x0a,0x0a,0x0c,0x0c,0x0d,0x0d,0x0d,0x0d,0x0c,0x0c,0x0b,0x0b,0x09,0x09,0x08,0x07,0x05,0x04,0x02,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x02,0x04,0x06,0x07,0x09,0x0a,0x0b,0x0e,0x0d,0x0e,0x10,0x11,0x11,0x12,0x12,0x12,0x12,0x11,0x11,0x10,0x0e,0x0e,0x0f,0x0c,0x0b,0x09,0x07,0x07,0x04,0x02,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x03,0x06,0x07,0x08,0x0a,0x0e,0x0e,0x11,0x13,0x14,0x15,0x16,0x16,0x15,0x17,0x17,0x17,0x16,0x16,0x15,0x13,0x13,0x10,0x0f,0x0e,0x0d,0x08,0x08,0x06,0x04,0x03,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x03,0x07,0x07,0x0a,0x0b,0x0c,0x0f,0x11,0x14,0x16,0x18,0x17,0x19,0x1b,0x1b,0x1b,0x1c,0x1c,0x1c,0x1b,0x1b,0x1a,0x18,0x17,0x16,0x14,0x14,0x10,0x0d,0x0c,0x09,0x07,0x06,0x05,0x01,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x04,0x04,0x07,0x0a,0x0b,0x0f,0x10,0x12,0x15,0x16,0x18,0x1c,0x1d,0x1d,0x20,0x20,0x20,0x22,0x21,0x21,0x22,0x20,0x21,0x20,0x1d,0x1d,0x1c,0x19,0x18,0x15,0x13,0x12,0x0f,0x0b,0x0a,0x07,0x05,0x03,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x04,0x06,0x08,0x0c,0x0e,0x11,0x14,0x15,0x18,0x1b,0x1d,0x1f,0x21,0x23,0x24,0x25,0x27,0x27,0x28,0x29,0x26,0x28,0x26,0x25,0x23,0x22,0x1f,0x1e,0x1d,0x1a,0x16,0x15,0x12,0x0f,0x0d,0x08,0x06,0x05,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x04,0x07,0x09,0x0b,0x11,0x13,0x16,0x19,0x1a,0x1e,0x21,0x22,0x26,0x28,0x2a,0x2c,0x2e,0x2f,0x2e,0x30,0x31,0x2f,0x2e,0x2f,0x2d,0x29,0x28,0x26,0x23,0x22,0x1f,0x1a,0x1a,0x16,0x14,0x12,0x0d,0x0a,0x08,0x06,0x03,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x04,0x04,0x07,0x0c,0x0d,0x11,0x15,0x17,0x1b,0x1e,0x1f,0x25,0x26,0x28,0x2d,0x2e,0x30,0x34,0x35,0x36,0x37,0x37,0x37,0x38,0x36,0x34,0x35,0x30,0x30,0x2d,0x28,0x27,0x25,0x20,0x1f,0x1b,0x17,0x17,0x12,0x0e,0x0d,0x08,0x05,0x03,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x04,0x06,0x0a,0x0d,0x0e,0x14,0x18,0x18,0x1d,0x23,0x23,0x28,0x2e,0x2f,0x34,0x35,0x36,0x39,0x3b,0x3c,0x3d,0x3e,0x3e,0x3e,0x3c,0x3b,0x3b,0x38,0x36,0x34,0x31,0x2e,0x28,0x24,0x24,0x1f,0x1a,0x18,0x14,0x10,0x0e,0x09,0x06,0x05,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x05,0x08,0x09,0x0c,0x10,0x14,0x17,0x1b,0x1d,0x22,0x27,0x2a,0x30,0x34,0x35,0x3a,0x3e,0x3e,0x42,0x45,0x45,0x47,0x47,0x47,0x48,0x45,0x45,0x43,0x41,0x3f,0x3c,0x37,0x34,0x2f,0x2c,0x29,0x25,0x1f,0x1b,0x17,0x15,0x11,0x0c,0x0b,0x07,0x04,0x02,0x00,0x01,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x02,0x02,0x07,0x0b,0x0b,0x10,0x16,0x18,0x1a,0x1f,0x24,0x28,0x2c,0x2f,0x36,0x3a,0x3c,0x41,0x45,0x47,0x4b,0x4e,0x4f,0x51,0x52,0x52,0x4f,0x4f,0x4f,0x4c,0x48,0x46,0x43,0x3c,0x39,0x37,0x32,0x2e,0x29,0x24,0x22,0x1d,0x18,0x15,0x11,0x0d,0x0a,0x07,0x04,0x02,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x02,0x03,0x07,0x0b,0x0e,0x13,0x17,0x19,0x1d,0x23,0x26,0x2c,0x32,0x36,0x3c,0x40,0x43,0x47,0x4c,0x4e,0x53,0x55,0x58,0x59,0x5a,0x5a,0x59,0x58,0x57,0x54,0x4f,0x4d,0x49,0x44,0x40,0x3b,0x37,0x34,0x2e,0x27,0x25,0x21,0x1a,0x19,0x15,0x0e,0x0e,0x0a,0x04,0x02,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x01,0x03,0x06,0x0b,0x0e,0x11,0x14,0x1b,0x1d,0x22,0x29,0x2c,0x31,0x38,0x3d,0x42,0x48,0x4b,0x50,0x56,0x59,0x5e,0x61,0x63,0x65,0x64,0x64,0x65,0x63,0x62,0x5f,0x59,0x57,0x52,0x4e,0x49,0x42,0x3e,0x3a,0x35,0x2e,0x2a,0x25,0x1e,0x1d,0x17,0x12,0x0f,0x0a,0x06,0x05,0x02,0x01,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x02,0x07,0x08,0x0c,0x10,0x14,0x19,0x1e,0x22,0x27,0x2d,0x33,0x38,0x3d,0x42,0x47,0x4d,0x54,0x5b,0x60,0x64,0x69,0x6b,0x6c,0x6f,0x70,0x70,0x70,0x6d,0x6c,0x69,0x64,0x61,0x5d,0x56,0x51,0x4a,0x44,0x3e,0x3a,0x35,0x2f,0x28,0x23,0x1f,0x19,0x15,0x11,0x0c,0x09,0x07,0x04,0x01,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x03,0x07,0x07,0x0c,0x13,0x15,0x1a,0x1f,0x24,0x2a,0x30,0x36,0x3d,0x42,0x4a,0x50,0x55,0x5c,0x61,0x66,0x6a,0x71,0x74,0x75,0x79,0x7a,0x7a,0x79,0x76,0x74,0x72,0x6e,0x69,0x63,0x5d,0x57,0x4f,0x4b,0x44,0x3f,0x39,0x31,0x2c,0x26,0x21,0x1b,0x17,0x14,0x0f,0x09,0x08,0x05,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x04,0x09,0x0b,0x10,0x14,0x18,0x1d,0x24,0x28,0x2f,0x37,0x3c,0x42,0x47,0x50,0x57,0x5f,0x65,0x6b,0x72,0x75,0x7c,0x80,0x83,0x86,0x87,0x87,0x86,0x83,0x82,0x7d,0x77,0x74,0x6e,0x67,0x60,0x59,0x50,0x4a,0x44,0x3e,0x38,0x32,0x2b,0x26,0x20,0x1a,0x16,0x11,0x0b,0x0a,0x07,0x02,0x00,0x00,0x00, +0x00,0x00,0x02,0x02,0x07,0x0b,0x0d,0x12,0x16,0x1c,0x21,0x26,0x2d,0x32,0x3a,0x40,0x47,0x4e,0x55,0x5e,0x65,0x6e,0x75,0x7a,0x80,0x86,0x8c,0x90,0x93,0x95,0x94,0x94,0x91,0x8e,0x89,0x82,0x7b,0x77,0x70,0x68,0x61,0x59,0x51,0x4a,0x43,0x3c,0x35,0x2e,0x28,0x23,0x1d,0x18,0x12,0x0f,0x0c,0x08,0x03,0x02,0x00,0x00, +0x00,0x00,0x02,0x03,0x07,0x0b,0x0e,0x14,0x19,0x1e,0x22,0x27,0x30,0x35,0x3c,0x43,0x4b,0x56,0x5b,0x64,0x6e,0x73,0x7a,0x82,0x8b,0x90,0x96,0x99,0x9d,0x9f,0x9f,0x9e,0x9b,0x98,0x93,0x8d,0x85,0x7d,0x75,0x70,0x67,0x5e,0x57,0x4e,0x45,0x3f,0x37,0x31,0x2a,0x25,0x1e,0x19,0x14,0x0f,0x0d,0x09,0x03,0x02,0x00,0x00, +0x00,0x01,0x02,0x03,0x08,0x0d,0x11,0x17,0x1c,0x20,0x26,0x2c,0x33,0x3b,0x41,0x48,0x50,0x5b,0x61,0x6b,0x75,0x79,0x84,0x90,0x95,0x9d,0xa3,0xa7,0xab,0xac,0xad,0xab,0xa9,0xa4,0x9d,0x98,0x93,0x88,0x7d,0x76,0x6e,0x64,0x5c,0x54,0x4a,0x44,0x3c,0x36,0x2f,0x28,0x20,0x1c,0x18,0x12,0x0e,0x0a,0x05,0x02,0x00,0x00, +0x00,0x01,0x03,0x05,0x0a,0x0e,0x12,0x18,0x1d,0x22,0x27,0x2f,0x35,0x3e,0x45,0x4d,0x57,0x5f,0x66,0x72,0x7a,0x82,0x90,0x99,0xa0,0xa8,0xad,0xb5,0xba,0xba,0xbb,0xb9,0xb5,0xb2,0xaa,0xa3,0x9a,0x92,0x86,0x7c,0x74,0x69,0x62,0x58,0x4f,0x48,0x40,0x38,0x31,0x2a,0x23,0x1e,0x19,0x14,0x0f,0x0a,0x06,0x05,0x02,0x00, +0x00,0x01,0x03,0x06,0x0b,0x0e,0x13,0x18,0x1d,0x23,0x29,0x30,0x36,0x40,0x48,0x4e,0x59,0x63,0x6b,0x75,0x81,0x8b,0x96,0x9e,0xa8,0xb1,0xb8,0xbf,0xc5,0xc4,0xc5,0xc6,0xc1,0xbb,0xb3,0xa9,0xa1,0x99,0x8e,0x84,0x7a,0x6e,0x67,0x5c,0x52,0x4a,0x41,0x39,0x32,0x2b,0x25,0x1e,0x19,0x14,0x0f,0x0a,0x06,0x05,0x02,0x00, +0x00,0x02,0x04,0x06,0x0a,0x11,0x14,0x19,0x1f,0x25,0x2b,0x34,0x3a,0x43,0x4b,0x53,0x5f,0x6a,0x70,0x7a,0x85,0x90,0x9e,0xa8,0xb0,0xbc,0xc6,0xcc,0xd3,0xd5,0xd6,0xd5,0xce,0xc7,0xbe,0xb3,0xab,0xa1,0x94,0x89,0x7f,0x74,0x6c,0x62,0x56,0x4e,0x45,0x3c,0x35,0x2d,0x27,0x21,0x1b,0x16,0x12,0x0c,0x07,0x06,0x02,0x00, +0x00,0x01,0x05,0x07,0x0c,0x11,0x16,0x1b,0x21,0x25,0x2d,0x35,0x3b,0x44,0x4e,0x56,0x61,0x6b,0x74,0x81,0x8b,0x95,0xa4,0xaf,0xb9,0xc5,0xd2,0xda,0xe0,0xe3,0xe4,0xe1,0xdb,0xd3,0xc9,0xbe,0xb3,0xa7,0x9b,0x8f,0x84,0x77,0x6f,0x65,0x58,0x50,0x48,0x3d,0x36,0x2f,0x28,0x22,0x1d,0x17,0x13,0x0d,0x08,0x07,0x03,0x00, +0x00,0x01,0x05,0x07,0x0c,0x11,0x16,0x1b,0x21,0x27,0x2f,0x36,0x3b,0x45,0x4f,0x57,0x63,0x6c,0x75,0x82,0x8f,0x9b,0xa6,0xb4,0xbe,0xcb,0xda,0xe3,0xea,0xec,0xee,0xeb,0xe4,0xdc,0xce,0xc1,0xb8,0xab,0x9e,0x94,0x87,0x7a,0x70,0x65,0x5a,0x52,0x48,0x3e,0x38,0x2f,0x28,0x22,0x1d,0x18,0x13,0x0d,0x08,0x06,0x02,0x00, +0x00,0x01,0x05,0x08,0x0d,0x12,0x17,0x1c,0x23,0x27,0x2e,0x37,0x3e,0x47,0x4f,0x5a,0x65,0x6f,0x79,0x86,0x93,0x9e,0xab,0xba,0xc3,0xd2,0xe0,0xe9,0xf3,0xfa,0xfb,0xf4,0xeb,0xe5,0xd7,0xc6,0xbd,0xb1,0xa1,0x98,0x8a,0x7d,0x73,0x68,0x5d,0x54,0x49,0x40,0x3a,0x32,0x28,0x23,0x1d,0x18,0x14,0x0e,0x09,0x06,0x02,0x00, +0x00,0x01,0x05,0x08,0x0d,0x12,0x17,0x1c,0x22,0x28,0x30,0x36,0x3e,0x47,0x52,0x5a,0x64,0x70,0x7a,0x87,0x94,0x9f,0xae,0xba,0xc5,0xd5,0xe5,0xee,0xfa,0xff,0xff,0xfa,0xf1,0xe9,0xdb,0xcb,0xbe,0xb1,0xa3,0x99,0x8a,0x7d,0x73,0x69,0x5c,0x54,0x4b,0x40,0x39,0x32,0x2a,0x23,0x1d,0x17,0x14,0x0e,0x09,0x06,0x02,0x00, +0x00,0x01,0x05,0x08,0x0d,0x12,0x17,0x1c,0x21,0x28,0x30,0x37,0x3e,0x47,0x52,0x5a,0x64,0x71,0x7a,0x87,0x95,0x9f,0xae,0xbb,0xc5,0xd6,0xe7,0xee,0xfb,0xff,0xff,0xfc,0xf1,0xe8,0xda,0xca,0xbe,0xb1,0xa3,0x98,0x8a,0x7d,0x73,0x68,0x5c,0x54,0x4c,0x40,0x39,0x32,0x29,0x23,0x1d,0x17,0x14,0x0e,0x09,0x06,0x02,0x00, +0x00,0x01,0x05,0x08,0x0d,0x12,0x16,0x1b,0x22,0x27,0x2f,0x39,0x3f,0x47,0x50,0x59,0x65,0x70,0x79,0x86,0x95,0x9e,0xac,0xba,0xc5,0xd4,0xe1,0xea,0xf6,0xfd,0xfd,0xf7,0xee,0xe6,0xd8,0xc8,0xbe,0xb1,0xa3,0x97,0x89,0x7c,0x73,0x68,0x5d,0x54,0x4a,0x40,0x3a,0x32,0x28,0x24,0x1d,0x18,0x13,0x0e,0x09,0x06,0x02,0x00, +0x00,0x01,0x05,0x07,0x0c,0x11,0x16,0x1b,0x20,0x28,0x2f,0x35,0x3c,0x46,0x4f,0x58,0x64,0x6d,0x75,0x83,0x90,0x9c,0xa9,0xb7,0xbf,0xcc,0xda,0xe5,0xec,0xf1,0xf2,0xef,0xe7,0xe0,0xd2,0xc4,0xb9,0xad,0xa0,0x94,0x87,0x79,0x70,0x67,0x5b,0x52,0x47,0x3e,0x38,0x31,0x29,0x23,0x1d,0x18,0x13,0x0d,0x08,0x06,0x02,0x00, +0x00,0x01,0x05,0x08,0x0c,0x11,0x16,0x1b,0x21,0x26,0x2d,0x34,0x3c,0x45,0x4f,0x57,0x62,0x6c,0x75,0x82,0x8d,0x97,0xa5,0xb1,0xbb,0xc7,0xd4,0xdd,0xe2,0xe7,0xe8,0xe4,0xe0,0xd7,0xcb,0xc0,0xb5,0xa7,0x9b,0x91,0x84,0x78,0x70,0x65,0x59,0x51,0x48,0x3e,0x37,0x2f,0x28,0x23,0x1d,0x18,0x14,0x0d,0x08,0x07,0x02,0x00, +0x00,0x02,0x05,0x07,0x0b,0x11,0x15,0x1a,0x1f,0x23,0x2d,0x34,0x3a,0x43,0x4c,0x53,0x5f,0x6a,0x72,0x7d,0x89,0x93,0x9f,0xab,0xb3,0xbf,0xca,0xd0,0xd6,0xda,0xda,0xd8,0xd1,0xca,0xc2,0xb6,0xae,0xa2,0x96,0x8c,0x7f,0x75,0x6f,0x61,0x55,0x4f,0x47,0x3c,0x36,0x2f,0x27,0x21,0x1c,0x16,0x13,0x0c,0x08,0x05,0x01,0x00, +0x00,0x01,0x03,0x06,0x0a,0x0e,0x13,0x18,0x1d,0x23,0x2a,0x31,0x38,0x40,0x48,0x4f,0x5a,0x65,0x6d,0x77,0x82,0x8d,0x99,0xa2,0xa9,0xb4,0xbc,0xc1,0xc8,0xcb,0xca,0xca,0xc2,0xbc,0xb7,0xac,0xa4,0x9b,0x90,0x86,0x7a,0x70,0x67,0x5d,0x52,0x4a,0x42,0x39,0x34,0x2d,0x25,0x1e,0x1a,0x14,0x0f,0x0a,0x06,0x05,0x02,0x00, +0x00,0x01,0x03,0x06,0x0a,0x0e,0x13,0x17,0x1c,0x22,0x28,0x30,0x36,0x3f,0x46,0x4e,0x57,0x60,0x68,0x74,0x7b,0x85,0x92,0x99,0xa3,0xad,0xb2,0xb7,0xbd,0xbe,0xbf,0xbe,0xb8,0xb5,0xae,0xa5,0x9e,0x94,0x88,0x7f,0x75,0x6b,0x64,0x5a,0x51,0x49,0x41,0x39,0x31,0x2b,0x24,0x1e,0x19,0x14,0x0f,0x0a,0x07,0x05,0x02,0x00, +0x00,0x01,0x03,0x04,0x0a,0x0e,0x10,0x17,0x1c,0x20,0x26,0x2c,0x33,0x3c,0x43,0x4a,0x52,0x5c,0x63,0x6d,0x77,0x7d,0x87,0x92,0x98,0xa0,0xa7,0xab,0xae,0xb1,0xb2,0xb1,0xad,0xa9,0xa2,0x9b,0x94,0x89,0x7f,0x79,0x70,0x66,0x5f,0x55,0x4c,0x47,0x3e,0x36,0x2e,0x28,0x22,0x1d,0x18,0x13,0x0f,0x0a,0x06,0x03,0x00,0x00, +0x00,0x00,0x02,0x03,0x08,0x0c,0x0d,0x14,0x19,0x1f,0x23,0x28,0x31,0x37,0x3d,0x45,0x4d,0x57,0x5e,0x66,0x70,0x75,0x7d,0x86,0x8d,0x94,0x9a,0x9c,0xa2,0xa4,0xa4,0xa3,0x9e,0x9a,0x96,0x90,0x88,0x7f,0x78,0x72,0x6a,0x5f,0x58,0x50,0x47,0x40,0x39,0x32,0x2a,0x25,0x1f,0x19,0x14,0x10,0x0d,0x09,0x04,0x02,0x00,0x00, +0x00,0x00,0x02,0x03,0x07,0x0b,0x0e,0x12,0x18,0x1d,0x22,0x27,0x2f,0x33,0x3a,0x42,0x49,0x51,0x56,0x5f,0x68,0x6f,0x77,0x7d,0x84,0x8a,0x8f,0x94,0x99,0x98,0x99,0x99,0x95,0x90,0x8c,0x85,0x7f,0x7a,0x72,0x6b,0x61,0x58,0x53,0x4c,0x42,0x3b,0x35,0x30,0x29,0x24,0x1e,0x18,0x13,0x0f,0x0c,0x08,0x03,0x02,0x00,0x00, +0x00,0x00,0x01,0x01,0x05,0x0a,0x0c,0x10,0x15,0x1a,0x1e,0x24,0x28,0x2e,0x37,0x3e,0x43,0x49,0x51,0x59,0x61,0x66,0x6e,0x76,0x79,0x7e,0x84,0x86,0x8a,0x8b,0x8a,0x89,0x87,0x85,0x7f,0x7a,0x75,0x70,0x6a,0x62,0x59,0x52,0x4d,0x45,0x3f,0x38,0x30,0x2b,0x27,0x21,0x1a,0x17,0x12,0x0d,0x0b,0x07,0x02,0x01,0x00,0x00, +0x00,0x00,0x00,0x00,0x04,0x08,0x08,0x0d,0x13,0x16,0x1b,0x20,0x24,0x2b,0x31,0x38,0x3e,0x43,0x4b,0x50,0x58,0x5f,0x62,0x69,0x6d,0x74,0x77,0x78,0x7c,0x7d,0x7d,0x7c,0x79,0x77,0x74,0x71,0x6c,0x65,0x60,0x5b,0x53,0x4d,0x46,0x40,0x3b,0x33,0x2c,0x26,0x21,0x1d,0x17,0x14,0x0f,0x0a,0x08,0x05,0x01,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x02,0x07,0x08,0x0c,0x12,0x16,0x1a,0x1d,0x24,0x28,0x2d,0x34,0x3b,0x3e,0x44,0x4a,0x50,0x57,0x5c,0x61,0x66,0x6d,0x6f,0x70,0x73,0x73,0x74,0x75,0x70,0x6f,0x6d,0x67,0x64,0x5f,0x57,0x53,0x4d,0x46,0x40,0x3b,0x37,0x2f,0x2b,0x26,0x1f,0x1a,0x16,0x13,0x0e,0x09,0x08,0x04,0x01,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x01,0x04,0x06,0x0b,0x0f,0x12,0x15,0x1a,0x1e,0x23,0x29,0x2f,0x34,0x3a,0x3f,0x44,0x48,0x4e,0x54,0x59,0x5c,0x61,0x64,0x65,0x68,0x69,0x68,0x68,0x66,0x65,0x62,0x5d,0x59,0x55,0x50,0x4c,0x46,0x3f,0x3c,0x37,0x2e,0x2a,0x27,0x21,0x1d,0x17,0x13,0x10,0x0c,0x08,0x05,0x01,0x01,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x02,0x03,0x08,0x0c,0x0f,0x14,0x18,0x1a,0x1e,0x24,0x28,0x2d,0x34,0x38,0x3e,0x43,0x46,0x4b,0x4e,0x51,0x56,0x58,0x5a,0x5d,0x5d,0x5c,0x5c,0x5b,0x5a,0x56,0x51,0x4f,0x4b,0x47,0x43,0x3f,0x39,0x36,0x30,0x28,0x25,0x21,0x1b,0x19,0x15,0x0f,0x0d,0x09,0x05,0x03,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x02,0x03,0x06,0x0b,0x0e,0x13,0x17,0x18,0x1c,0x21,0x25,0x2a,0x2d,0x31,0x37,0x3c,0x3e,0x44,0x48,0x49,0x4d,0x50,0x52,0x55,0x54,0x54,0x54,0x52,0x52,0x4f,0x4a,0x49,0x46,0x40,0x3a,0x39,0x35,0x2f,0x2a,0x26,0x23,0x1d,0x1a,0x18,0x12,0x0d,0x0b,0x07,0x04,0x02,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x01,0x00,0x02,0x04,0x07,0x08,0x0d,0x11,0x15,0x18,0x1c,0x1f,0x24,0x28,0x2d,0x32,0x35,0x37,0x3c,0x40,0x40,0x44,0x48,0x48,0x49,0x4b,0x4b,0x4a,0x48,0x48,0x46,0x42,0x41,0x3d,0x38,0x35,0x32,0x2e,0x2a,0x25,0x21,0x1d,0x18,0x15,0x14,0x0d,0x09,0x09,0x05,0x01,0x01,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x04,0x06,0x0b,0x0e,0x10,0x14,0x19,0x1a,0x1e,0x24,0x24,0x2a,0x30,0x31,0x36,0x38,0x38,0x3c,0x3d,0x3f,0x40,0x40,0x40,0x40,0x3f,0x3e,0x3c,0x39,0x39,0x35,0x32,0x30,0x2b,0x27,0x24,0x21,0x1c,0x19,0x15,0x10,0x0f,0x0b,0x06,0x05,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x04,0x05,0x09,0x0d,0x0e,0x13,0x16,0x18,0x1d,0x1e,0x1f,0x25,0x28,0x2a,0x2e,0x31,0x32,0x36,0x36,0x37,0x3b,0x3a,0x39,0x3a,0x38,0x37,0x36,0x32,0x32,0x2f,0x2a,0x29,0x25,0x21,0x1f,0x1d,0x19,0x18,0x14,0x0f,0x0e,0x09,0x05,0x04,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x02,0x05,0x08,0x0b,0x0d,0x11,0x14,0x17,0x19,0x1b,0x21,0x23,0x25,0x27,0x29,0x2c,0x2e,0x2f,0x30,0x31,0x32,0x32,0x31,0x30,0x2f,0x2f,0x2d,0x2b,0x28,0x24,0x24,0x20,0x1c,0x1a,0x18,0x14,0x13,0x0f,0x0b,0x09,0x07,0x02,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x05,0x06,0x08,0x0c,0x0e,0x11,0x15,0x16,0x1a,0x1e,0x1d,0x20,0x23,0x25,0x26,0x28,0x29,0x29,0x2a,0x2a,0x29,0x29,0x28,0x27,0x26,0x24,0x21,0x1f,0x1e,0x1b,0x17,0x16,0x13,0x0f,0x0e,0x09,0x06,0x06,0x03,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x04,0x05,0x09,0x0b,0x0c,0x0f,0x11,0x14,0x17,0x18,0x1a,0x1d,0x1e,0x1f,0x22,0x22,0x22,0x24,0x24,0x23,0x24,0x23,0x23,0x20,0x1f,0x1e,0x1d,0x19,0x18,0x17,0x14,0x13,0x10,0x0d,0x0c,0x08,0x05,0x05,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x02,0x04,0x08,0x09,0x0c,0x0e,0x0f,0x11,0x13,0x14,0x18,0x19,0x19,0x1b,0x1c,0x1d,0x1d,0x1e,0x1d,0x1e,0x1d,0x1d,0x1c,0x19,0x19,0x18,0x14,0x14,0x12,0x0e,0x0d,0x0c,0x09,0x08,0x06,0x02,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x03,0x04,0x07,0x09,0x09,0x0b,0x0e,0x0f,0x11,0x14,0x14,0x16,0x17,0x18,0x18,0x17,0x17,0x18,0x18,0x18,0x16,0x14,0x14,0x13,0x10,0x0f,0x0d,0x09,0x0a,0x07,0x04,0x03,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x02,0x05,0x07,0x08,0x0a,0x0b,0x0c,0x0f,0x0f,0x0f,0x12,0x13,0x13,0x14,0x14,0x14,0x13,0x13,0x14,0x12,0x0f,0x10,0x0d,0x0c,0x0c,0x0b,0x08,0x07,0x06,0x02,0x02,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x03,0x03,0x04,0x07,0x07,0x08,0x0a,0x0a,0x0a,0x0d,0x0d,0x0d,0x0e,0x0e,0x0e,0x0f,0x0d,0x0d,0x0d,0x0a,0x0b,0x0a,0x08,0x06,0x06,0x06,0x03,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x01,0x03,0x03,0x05,0x06,0x06,0x08,0x08,0x08,0x09,0x09,0x09,0x09,0x08,0x08,0x09,0x07,0x06,0x06,0x04,0x03,0x02,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x02,0x02,0x03,0x04,0x05,0x05,0x07,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x04,0x05,0x04,0x02,0x02,0x02,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x02,0x01,0x03,0x02,0x02,0x02,0x02,0x02,0x02,0x03,0x02,0x01,0x02,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 +}; + +unsigned char data80[6400] = { +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x01,0x02,0x02,0x01,0x02,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x04,0x04,0x01,0x02,0x02,0x01,0x01,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x02,0x02,0x02,0x03,0x04,0x04,0x04,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x05,0x04,0x04,0x04,0x03,0x02,0x02,0x02,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x02,0x02,0x03,0x04,0x05,0x05,0x05,0x08,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x06,0x05,0x05,0x05,0x03,0x03,0x02,0x02,0x01,0x01,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x02,0x04,0x05,0x05,0x06,0x07,0x08,0x09,0x08,0x0a,0x0a,0x0a,0x0a,0x0b,0x0b,0x0b,0x0b,0x0a,0x0a,0x0a,0x0b,0x09,0x09,0x08,0x08,0x06,0x06,0x05,0x05,0x03,0x02,0x01,0x01,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x01,0x03,0x04,0x04,0x07,0x08,0x08,0x09,0x0a,0x0b,0x0b,0x0b,0x0c,0x0c,0x0e,0x0e,0x0e,0x0f,0x0f,0x0f,0x0f,0x0e,0x0e,0x0e,0x0e,0x0c,0x0c,0x0b,0x0c,0x0b,0x0a,0x09,0x08,0x06,0x06,0x04,0x02,0x01,0x01,0x01,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x02,0x02,0x04,0x06,0x07,0x07,0x08,0x0a,0x0b,0x0c,0x0d,0x0f,0x0e,0x0f,0x10,0x11,0x12,0x12,0x12,0x13,0x13,0x13,0x13,0x12,0x12,0x12,0x12,0x10,0x0f,0x0e,0x10,0x0d,0x0c,0x0c,0x0a,0x09,0x07,0x07,0x06,0x04,0x03,0x02,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x02,0x03,0x05,0x07,0x07,0x08,0x09,0x0b,0x0d,0x0d,0x0f,0x11,0x12,0x13,0x13,0x15,0x15,0x15,0x14,0x15,0x16,0x16,0x16,0x15,0x15,0x15,0x14,0x13,0x11,0x13,0x11,0x0f,0x0e,0x0d,0x0d,0x0a,0x08,0x08,0x07,0x05,0x03,0x03,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x04,0x05,0x05,0x07,0x08,0x0a,0x0a,0x0c,0x0e,0x11,0x11,0x13,0x14,0x16,0x16,0x16,0x18,0x19,0x19,0x18,0x19,0x1a,0x1a,0x1a,0x19,0x19,0x19,0x18,0x17,0x16,0x16,0x14,0x12,0x12,0x11,0x11,0x0c,0x0c,0x0a,0x08,0x08,0x05,0x04,0x05,0x02,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x02,0x03,0x03,0x07,0x09,0x08,0x0c,0x0c,0x0d,0x0f,0x11,0x13,0x13,0x15,0x16,0x19,0x1a,0x19,0x1a,0x1c,0x1d,0x1d,0x1d,0x1e,0x1e,0x1e,0x1e,0x1d,0x1d,0x1d,0x1c,0x1c,0x1a,0x19,0x1a,0x18,0x15,0x15,0x13,0x10,0x10,0x0f,0x0c,0x0b,0x09,0x08,0x07,0x05,0x02,0x02,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x04,0x04,0x06,0x0a,0x0a,0x0b,0x0d,0x10,0x11,0x13,0x15,0x17,0x17,0x19,0x1c,0x1d,0x1e,0x1d,0x20,0x22,0x21,0x21,0x22,0x23,0x22,0x22,0x23,0x22,0x21,0x22,0x21,0x20,0x1e,0x1d,0x1e,0x1b,0x19,0x19,0x17,0x15,0x13,0x13,0x12,0x0e,0x0c,0x0b,0x08,0x06,0x05,0x04,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x05,0x05,0x07,0x09,0x0b,0x0d,0x0f,0x12,0x13,0x14,0x16,0x18,0x1b,0x1c,0x1d,0x1f,0x20,0x22,0x22,0x24,0x24,0x25,0x27,0x26,0x28,0x28,0x26,0x27,0x27,0x25,0x25,0x23,0x22,0x22,0x1f,0x1e,0x1d,0x1c,0x1b,0x17,0x16,0x14,0x13,0x0f,0x0e,0x0d,0x0a,0x06,0x06,0x05,0x03,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x04,0x05,0x07,0x09,0x0c,0x10,0x11,0x12,0x16,0x17,0x18,0x19,0x1d,0x1f,0x20,0x22,0x24,0x26,0x27,0x27,0x29,0x2a,0x2b,0x2c,0x2a,0x2e,0x2e,0x2b,0x2b,0x2c,0x2b,0x2b,0x28,0x27,0x27,0x24,0x23,0x22,0x20,0x1f,0x1b,0x19,0x18,0x16,0x13,0x12,0x11,0x0d,0x0a,0x08,0x07,0x06,0x04,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x02,0x02,0x04,0x07,0x09,0x0b,0x0c,0x0f,0x13,0x14,0x17,0x19,0x1b,0x1c,0x1f,0x23,0x23,0x24,0x28,0x2a,0x2a,0x2b,0x2f,0x30,0x31,0x31,0x31,0x32,0x33,0x32,0x34,0x32,0x31,0x30,0x31,0x2e,0x2b,0x2b,0x2b,0x27,0x25,0x24,0x23,0x1f,0x1c,0x1c,0x1a,0x16,0x15,0x14,0x12,0x0d,0x0c,0x0b,0x08,0x06,0x04,0x02,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x04,0x04,0x05,0x0a,0x0c,0x0d,0x10,0x13,0x16,0x17,0x19,0x1d,0x1f,0x20,0x23,0x27,0x27,0x28,0x2c,0x2e,0x30,0x30,0x34,0x36,0x36,0x37,0x37,0x39,0x38,0x37,0x39,0x38,0x37,0x35,0x36,0x35,0x31,0x31,0x30,0x2c,0x29,0x28,0x28,0x24,0x20,0x20,0x1e,0x1a,0x18,0x17,0x15,0x10,0x0e,0x0d,0x0a,0x07,0x05,0x04,0x03,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x03,0x04,0x05,0x08,0x0b,0x0d,0x0e,0x11,0x15,0x17,0x18,0x1b,0x1f,0x22,0x22,0x25,0x2b,0x2d,0x2e,0x31,0x34,0x34,0x35,0x37,0x39,0x3a,0x3b,0x3b,0x3d,0x3d,0x3d,0x3d,0x3c,0x3c,0x3a,0x3a,0x39,0x37,0x35,0x34,0x32,0x2f,0x2e,0x2a,0x26,0x23,0x23,0x20,0x1c,0x19,0x18,0x16,0x12,0x0f,0x0e,0x0c,0x07,0x06,0x05,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x04,0x06,0x07,0x0b,0x0b,0x0f,0x11,0x14,0x18,0x1a,0x1b,0x1e,0x22,0x26,0x28,0x29,0x30,0x32,0x33,0x37,0x3a,0x3a,0x3b,0x3d,0x40,0x41,0x41,0x42,0x44,0x44,0x44,0x44,0x43,0x41,0x41,0x41,0x3f,0x3d,0x3b,0x3a,0x38,0x34,0x33,0x2e,0x2a,0x29,0x27,0x25,0x1f,0x1d,0x1b,0x17,0x15,0x12,0x11,0x0d,0x0a,0x09,0x07,0x04,0x02,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x04,0x08,0x0a,0x09,0x0b,0x0f,0x13,0x16,0x17,0x1a,0x1d,0x1f,0x23,0x27,0x2a,0x2b,0x31,0x34,0x36,0x37,0x3a,0x3e,0x41,0x42,0x43,0x47,0x49,0x49,0x4a,0x4b,0x4b,0x4b,0x4b,0x4a,0x49,0x49,0x48,0x46,0x43,0x42,0x40,0x3b,0x38,0x36,0x33,0x33,0x2d,0x2b,0x29,0x25,0x20,0x1e,0x1b,0x18,0x16,0x14,0x0e,0x0d,0x0b,0x09,0x06,0x04,0x03,0x01,0x01,0x01,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x02,0x03,0x05,0x09,0x0a,0x0b,0x0f,0x13,0x16,0x17,0x1a,0x1d,0x21,0x23,0x27,0x2a,0x2e,0x2f,0x33,0x39,0x3b,0x3d,0x41,0x45,0x46,0x47,0x4b,0x4d,0x50,0x50,0x51,0x52,0x53,0x53,0x51,0x50,0x51,0x50,0x4e,0x4c,0x48,0x47,0x46,0x41,0x3d,0x3b,0x38,0x36,0x31,0x2f,0x2b,0x28,0x24,0x23,0x20,0x1b,0x18,0x17,0x13,0x10,0x0c,0x0b,0x09,0x06,0x03,0x03,0x01,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x02,0x03,0x05,0x09,0x0b,0x0d,0x11,0x14,0x17,0x18,0x1c,0x1f,0x23,0x26,0x29,0x2d,0x32,0x35,0x38,0x3d,0x3f,0x42,0x45,0x49,0x4b,0x4c,0x50,0x53,0x54,0x55,0x58,0x58,0x59,0x59,0x58,0x57,0x56,0x55,0x54,0x51,0x4d,0x4c,0x4a,0x46,0x43,0x40,0x3c,0x39,0x36,0x33,0x30,0x2a,0x26,0x25,0x21,0x1e,0x1a,0x18,0x16,0x11,0x0d,0x0d,0x0b,0x06,0x04,0x03,0x01,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x05,0x07,0x0b,0x0d,0x10,0x11,0x16,0x19,0x1a,0x1e,0x22,0x27,0x28,0x2d,0x32,0x36,0x3a,0x3e,0x42,0x45,0x48,0x4a,0x4f,0x52,0x53,0x57,0x5b,0x5c,0x5e,0x61,0x60,0x60,0x60,0x60,0x60,0x5f,0x5e,0x5d,0x58,0x55,0x53,0x50,0x4c,0x4a,0x46,0x41,0x40,0x3b,0x38,0x35,0x2f,0x2a,0x28,0x25,0x20,0x1c,0x1b,0x19,0x13,0x11,0x0f,0x0c,0x08,0x05,0x05,0x02,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x01,0x03,0x05,0x07,0x0a,0x0d,0x0f,0x12,0x14,0x18,0x1d,0x1f,0x21,0x27,0x2b,0x2e,0x32,0x36,0x3a,0x3e,0x42,0x46,0x4b,0x4e,0x52,0x57,0x5b,0x5d,0x61,0x65,0x65,0x66,0x68,0x6a,0x69,0x69,0x6a,0x69,0x67,0x66,0x65,0x61,0x5e,0x5c,0x58,0x55,0x50,0x4d,0x48,0x43,0x3f,0x3c,0x38,0x35,0x30,0x2c,0x29,0x24,0x20,0x1f,0x1b,0x15,0x13,0x10,0x0c,0x09,0x07,0x07,0x04,0x02,0x01,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x01,0x04,0x07,0x08,0x0a,0x0d,0x11,0x13,0x17,0x1b,0x1f,0x22,0x26,0x2a,0x2e,0x32,0x36,0x3a,0x3f,0x42,0x46,0x4b,0x4f,0x54,0x5a,0x5e,0x61,0x64,0x68,0x6c,0x6c,0x6d,0x6f,0x71,0x72,0x72,0x72,0x70,0x6e,0x6e,0x6c,0x68,0x65,0x63,0x5f,0x5c,0x56,0x53,0x4e,0x48,0x44,0x40,0x3c,0x39,0x34,0x30,0x2c,0x27,0x22,0x21,0x1c,0x18,0x14,0x13,0x0f,0x0a,0x09,0x08,0x05,0x03,0x01,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x02,0x05,0x07,0x08,0x09,0x10,0x13,0x14,0x18,0x1c,0x20,0x23,0x27,0x2c,0x2f,0x35,0x3a,0x3e,0x42,0x48,0x4d,0x50,0x53,0x5a,0x5f,0x62,0x66,0x68,0x6d,0x72,0x73,0x74,0x77,0x79,0x79,0x79,0x79,0x77,0x74,0x74,0x71,0x70,0x6c,0x67,0x64,0x5f,0x5b,0x57,0x50,0x4e,0x4a,0x44,0x40,0x3c,0x37,0x32,0x2e,0x29,0x25,0x21,0x1c,0x19,0x15,0x14,0x11,0x0c,0x09,0x08,0x07,0x02,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x01,0x06,0x08,0x09,0x0b,0x12,0x14,0x16,0x19,0x1e,0x23,0x25,0x2a,0x31,0x35,0x38,0x3e,0x42,0x46,0x4d,0x52,0x57,0x5d,0x61,0x64,0x69,0x6e,0x70,0x76,0x79,0x7b,0x7d,0x80,0x82,0x82,0x82,0x82,0x80,0x7e,0x7c,0x7a,0x76,0x73,0x70,0x6c,0x66,0x61,0x5e,0x58,0x51,0x4d,0x49,0x44,0x40,0x3b,0x36,0x32,0x2d,0x28,0x25,0x20,0x1c,0x18,0x15,0x12,0x0e,0x0a,0x09,0x08,0x04,0x01,0x01,0x00,0x00,0x00, +0x00,0x00,0x01,0x01,0x02,0x03,0x08,0x0a,0x0b,0x10,0x12,0x16,0x1a,0x1d,0x21,0x27,0x29,0x2d,0x34,0x39,0x3d,0x42,0x46,0x4b,0x51,0x56,0x5c,0x62,0x68,0x6d,0x72,0x77,0x79,0x7e,0x82,0x85,0x87,0x8a,0x8c,0x8c,0x8c,0x8c,0x8b,0x88,0x87,0x84,0x7f,0x7a,0x78,0x74,0x6f,0x6a,0x64,0x5f,0x5a,0x52,0x4d,0x48,0x44,0x3f,0x3a,0x36,0x30,0x2b,0x29,0x24,0x1f,0x1a,0x18,0x13,0x10,0x0d,0x0b,0x0a,0x06,0x02,0x02,0x01,0x00,0x00, +0x00,0x00,0x01,0x02,0x02,0x05,0x09,0x0b,0x0c,0x10,0x14,0x18,0x1b,0x1f,0x23,0x27,0x2d,0x31,0x36,0x3b,0x3f,0x45,0x4b,0x50,0x54,0x5c,0x61,0x66,0x6e,0x74,0x78,0x7b,0x80,0x85,0x89,0x8e,0x91,0x92,0x95,0x97,0x96,0x95,0x94,0x92,0x90,0x8c,0x88,0x82,0x7d,0x79,0x75,0x70,0x6a,0x65,0x5f,0x58,0x53,0x4d,0x48,0x42,0x3d,0x38,0x34,0x2e,0x29,0x25,0x21,0x1d,0x19,0x15,0x12,0x0f,0x0c,0x0a,0x06,0x03,0x02,0x01,0x00,0x00, +0x00,0x00,0x01,0x02,0x03,0x05,0x09,0x0c,0x0d,0x11,0x15,0x19,0x1c,0x20,0x24,0x28,0x2e,0x33,0x37,0x3c,0x42,0x47,0x4f,0x56,0x59,0x5f,0x67,0x6e,0x71,0x77,0x7c,0x82,0x89,0x8e,0x90,0x95,0x98,0x9a,0x9e,0x9d,0x9d,0x9e,0x9b,0x98,0x97,0x94,0x90,0x8b,0x85,0x7f,0x79,0x73,0x70,0x69,0x62,0x5c,0x58,0x51,0x4a,0x44,0x3f,0x39,0x35,0x30,0x2a,0x26,0x22,0x1c,0x1a,0x15,0x12,0x0e,0x0d,0x0b,0x06,0x03,0x03,0x01,0x00,0x00, +0x00,0x00,0x02,0x02,0x03,0x06,0x09,0x0d,0x0f,0x13,0x18,0x1b,0x1f,0x22,0x26,0x2b,0x31,0x36,0x3a,0x40,0x46,0x4a,0x52,0x5a,0x5f,0x64,0x6c,0x75,0x76,0x7c,0x84,0x8c,0x8f,0x96,0x9a,0x9e,0xa1,0xa3,0xa6,0xa7,0xa7,0xa7,0xa5,0xa3,0xa0,0x9b,0x97,0x92,0x8f,0x88,0x7f,0x79,0x75,0x6f,0x68,0x60,0x5b,0x55,0x4e,0x47,0x43,0x3d,0x38,0x33,0x2e,0x2a,0x24,0x1e,0x1c,0x19,0x14,0x10,0x0e,0x0c,0x06,0x04,0x03,0x01,0x00,0x00, +0x00,0x00,0x01,0x03,0x04,0x07,0x0b,0x0f,0x11,0x15,0x19,0x1d,0x1f,0x24,0x2a,0x2d,0x33,0x3a,0x3f,0x44,0x4a,0x4f,0x57,0x5e,0x61,0x69,0x73,0x77,0x7b,0x84,0x8e,0x94,0x98,0x9e,0xa3,0xa8,0xac,0xb0,0xb1,0xb2,0xb3,0xb2,0xaf,0xae,0xab,0xa5,0xa0,0x9b,0x97,0x8f,0x88,0x7f,0x79,0x73,0x6c,0x65,0x60,0x59,0x51,0x4b,0x48,0x41,0x3c,0x37,0x31,0x2b,0x26,0x20,0x1e,0x1b,0x16,0x12,0x0f,0x0b,0x09,0x05,0x04,0x02,0x00,0x00, +0x00,0x00,0x02,0x04,0x05,0x08,0x0c,0x0e,0x12,0x16,0x1a,0x1e,0x21,0x25,0x2a,0x30,0x34,0x3a,0x41,0x46,0x4c,0x53,0x5a,0x61,0x66,0x6e,0x77,0x7c,0x81,0x8c,0x95,0x99,0xa0,0xa7,0xaa,0xb0,0xb5,0xba,0xbc,0xbb,0xbc,0xbc,0xb9,0xb5,0xb4,0xae,0xa9,0xa3,0x9c,0x96,0x8f,0x85,0x7e,0x78,0x71,0x69,0x64,0x5d,0x54,0x4e,0x49,0x43,0x3d,0x37,0x32,0x2d,0x29,0x23,0x1f,0x1b,0x17,0x13,0x10,0x0c,0x09,0x06,0x05,0x03,0x01,0x00, +0x00,0x00,0x02,0x04,0x05,0x09,0x0c,0x0e,0x13,0x16,0x1a,0x1d,0x22,0x27,0x2b,0x30,0x35,0x3b,0x42,0x48,0x4c,0x55,0x5c,0x63,0x69,0x71,0x79,0x81,0x88,0x91,0x99,0x9e,0xa5,0xad,0xb1,0xb7,0xbd,0xc1,0xc3,0xc3,0xc4,0xc3,0xc3,0xbf,0xbb,0xb5,0xae,0xa6,0xa1,0x9b,0x94,0x8b,0x84,0x7d,0x75,0x6b,0x67,0x60,0x57,0x50,0x4a,0x44,0x3e,0x38,0x33,0x2e,0x28,0x23,0x1f,0x1b,0x17,0x13,0x10,0x0c,0x08,0x06,0x05,0x03,0x01,0x00, +0x00,0x01,0x02,0x04,0x05,0x08,0x0c,0x11,0x12,0x16,0x1b,0x1f,0x23,0x28,0x2d,0x33,0x37,0x3e,0x45,0x4b,0x50,0x57,0x61,0x68,0x6d,0x75,0x7c,0x86,0x8d,0x96,0x9f,0xa5,0xac,0xb4,0xbc,0xc1,0xc6,0xca,0xce,0xce,0xce,0xcf,0xcd,0xc8,0xc3,0xbd,0xb5,0xae,0xa8,0xa2,0x9a,0x90,0x88,0x81,0x79,0x71,0x6b,0x64,0x5a,0x53,0x4e,0x47,0x40,0x3a,0x35,0x2f,0x2a,0x25,0x21,0x1c,0x18,0x14,0x12,0x0e,0x09,0x06,0x05,0x03,0x01,0x00, +0x00,0x01,0x03,0x06,0x07,0x09,0x0d,0x12,0x14,0x18,0x1c,0x21,0x24,0x29,0x30,0x36,0x39,0x41,0x47,0x4d,0x54,0x5c,0x65,0x6c,0x70,0x79,0x81,0x89,0x90,0x9a,0xa5,0xac,0xb2,0xbb,0xc4,0xcc,0xd0,0xd5,0xda,0xdb,0xdc,0xdc,0xd7,0xd1,0xcd,0xc6,0xbf,0xb5,0xaf,0xa8,0x9f,0x95,0x8c,0x85,0x7d,0x75,0x6e,0x68,0x5f,0x56,0x50,0x4a,0x43,0x3c,0x37,0x31,0x2c,0x27,0x23,0x1e,0x1a,0x16,0x13,0x0f,0x0a,0x08,0x07,0x04,0x00,0x00, +0x00,0x00,0x03,0x06,0x07,0x0a,0x0e,0x12,0x15,0x19,0x1d,0x22,0x24,0x2a,0x30,0x36,0x3b,0x40,0x48,0x4f,0x54,0x5d,0x65,0x6c,0x73,0x7c,0x86,0x8d,0x95,0x9f,0xa9,0xb1,0xb9,0xc0,0xca,0xd3,0xd9,0xdf,0xe2,0xe4,0xe5,0xe3,0xe0,0xdb,0xd5,0xcd,0xc6,0xbd,0xb4,0xac,0xa4,0x9a,0x91,0x89,0x7f,0x76,0x70,0x69,0x60,0x57,0x51,0x4b,0x44,0x3c,0x37,0x32,0x2c,0x26,0x23,0x1f,0x1a,0x15,0x14,0x10,0x0b,0x08,0x07,0x05,0x01,0x00, +0x00,0x00,0x03,0x06,0x07,0x0a,0x0e,0x12,0x15,0x19,0x1d,0x22,0x25,0x2c,0x31,0x37,0x3a,0x41,0x49,0x50,0x55,0x5e,0x66,0x6d,0x74,0x7d,0x87,0x90,0x9a,0xa2,0xab,0xb4,0xbc,0xc5,0xd0,0xda,0xe0,0xe6,0xea,0xeb,0xec,0xeb,0xe7,0xe2,0xdc,0xd3,0xc8,0xc0,0xb8,0xaf,0xa4,0x9c,0x94,0x8b,0x81,0x78,0x70,0x69,0x61,0x58,0x53,0x4c,0x44,0x3d,0x38,0x32,0x2d,0x29,0x23,0x1f,0x1b,0x17,0x14,0x10,0x0b,0x08,0x07,0x04,0x01,0x00, +0x00,0x00,0x03,0x06,0x07,0x0a,0x0e,0x12,0x15,0x19,0x1e,0x23,0x27,0x2c,0x31,0x38,0x3b,0x43,0x4a,0x50,0x57,0x61,0x68,0x6f,0x76,0x7f,0x89,0x92,0x9b,0xa4,0xaf,0xba,0xbf,0xc9,0xd6,0xdf,0xe5,0xec,0xf1,0xf4,0xf5,0xf4,0xed,0xe6,0xe3,0xda,0xcc,0xc2,0xbc,0xb5,0xa8,0x9e,0x97,0x8e,0x84,0x7b,0x73,0x6b,0x63,0x5a,0x55,0x4c,0x45,0x3e,0x3b,0x35,0x2d,0x27,0x23,0x1f,0x1b,0x17,0x14,0x10,0x0b,0x08,0x07,0x04,0x01,0x00, +0x00,0x00,0x03,0x06,0x07,0x0b,0x0f,0x13,0x16,0x1a,0x1e,0x24,0x26,0x2a,0x33,0x39,0x3d,0x44,0x4b,0x51,0x59,0x61,0x69,0x71,0x78,0x82,0x8c,0x96,0x9d,0xa7,0xb2,0xbb,0xc3,0xcd,0xd9,0xe3,0xe9,0xf1,0xf9,0xfd,0xfe,0xf9,0xf3,0xed,0xe7,0xdf,0xd2,0xc7,0xc0,0xb6,0xab,0xa0,0x9a,0x91,0x84,0x7c,0x75,0x6d,0x64,0x5b,0x56,0x4e,0x46,0x3f,0x3b,0x35,0x2e,0x28,0x24,0x20,0x1b,0x16,0x15,0x11,0x0c,0x09,0x07,0x04,0x01,0x00, +0x00,0x00,0x03,0x06,0x07,0x0b,0x0f,0x13,0x16,0x1a,0x1e,0x22,0x28,0x2e,0x33,0x37,0x3d,0x44,0x4b,0x53,0x59,0x60,0x69,0x72,0x79,0x82,0x8c,0x96,0x9c,0xa8,0xb3,0xbb,0xc4,0xce,0xdc,0xe6,0xec,0xf4,0xfc,0xff,0xff,0xfd,0xf6,0xf0,0xe8,0xe0,0xd4,0xc8,0xc0,0xb6,0xab,0xa1,0x9b,0x90,0x85,0x7c,0x74,0x6d,0x63,0x5b,0x55,0x4e,0x47,0x3f,0x3a,0x35,0x2f,0x29,0x24,0x20,0x1b,0x16,0x15,0x11,0x0c,0x09,0x07,0x04,0x01,0x00, +0x00,0x00,0x03,0x06,0x07,0x0b,0x0f,0x13,0x16,0x1a,0x1e,0x22,0x28,0x2e,0x32,0x37,0x3d,0x44,0x4b,0x53,0x59,0x60,0x69,0x72,0x79,0x82,0x8c,0x96,0x9d,0xa8,0xb4,0xbc,0xc3,0xce,0xdd,0xe7,0xec,0xf5,0xfd,0xff,0xff,0xff,0xf7,0xef,0xe9,0xdf,0xd3,0xc7,0xbe,0xb6,0xac,0xa1,0x9a,0x90,0x85,0x7c,0x74,0x6d,0x63,0x5b,0x55,0x4e,0x47,0x3f,0x3a,0x35,0x2f,0x28,0x24,0x20,0x1b,0x16,0x15,0x11,0x0c,0x09,0x07,0x04,0x01,0x00, +0x00,0x00,0x03,0x06,0x07,0x0b,0x0f,0x13,0x16,0x1a,0x1e,0x23,0x26,0x2a,0x34,0x3a,0x3e,0x43,0x4b,0x52,0x59,0x60,0x6a,0x72,0x78,0x82,0x8c,0x97,0x9c,0xa8,0xb2,0xbb,0xc4,0xce,0xdb,0xe5,0xea,0xf3,0xfb,0xfe,0xfe,0xfc,0xf5,0xed,0xe7,0xde,0xd3,0xc7,0xc0,0xb6,0xaa,0xa2,0x9a,0x8f,0x85,0x7c,0x75,0x6d,0x63,0x5c,0x55,0x4e,0x47,0x3f,0x3a,0x36,0x2e,0x29,0x25,0x20,0x1b,0x16,0x15,0x11,0x0c,0x09,0x07,0x04,0x01,0x00, +0x00,0x00,0x03,0x06,0x07,0x0a,0x0e,0x12,0x14,0x18,0x1c,0x22,0x27,0x2c,0x32,0x38,0x3c,0x44,0x4a,0x50,0x57,0x60,0x69,0x70,0x76,0x80,0x8a,0x94,0x9c,0xa4,0xb0,0xbb,0xc1,0xcb,0xd7,0xdf,0xe7,0xee,0xf5,0xf7,0xf7,0xf6,0xf1,0xe9,0xe5,0xdd,0xcf,0xc5,0xbd,0xb5,0xaa,0xa1,0x98,0x8d,0x83,0x7a,0x73,0x6d,0x63,0x5b,0x54,0x4c,0x45,0x3e,0x3b,0x36,0x2d,0x27,0x26,0x1f,0x1b,0x17,0x14,0x10,0x0b,0x08,0x07,0x04,0x01,0x00, +0x00,0x00,0x03,0x06,0x07,0x0a,0x0e,0x12,0x15,0x19,0x1d,0x21,0x27,0x2d,0x31,0x36,0x3b,0x41,0x49,0x51,0x56,0x5f,0x67,0x6e,0x74,0x7e,0x88,0x91,0x9a,0xa2,0xae,0xb7,0xbd,0xc6,0xd1,0xdb,0xe2,0xe8,0xec,0xef,0xf0,0xef,0xeb,0xe4,0xdf,0xd6,0xcb,0xc2,0xb9,0xb0,0xa7,0x9e,0x94,0x8c,0x81,0x78,0x71,0x6a,0x62,0x59,0x53,0x4c,0x44,0x3d,0x39,0x33,0x2f,0x28,0x23,0x1f,0x1b,0x17,0x14,0x10,0x0b,0x08,0x07,0x04,0x01,0x00, +0x00,0x00,0x03,0x06,0x07,0x0a,0x0e,0x12,0x15,0x19,0x1d,0x22,0x25,0x2a,0x30,0x35,0x3b,0x41,0x49,0x50,0x55,0x5e,0x66,0x6d,0x74,0x7d,0x87,0x8e,0x97,0xa1,0xab,0xb3,0xbb,0xc3,0xcc,0xd5,0xdd,0xe1,0xe4,0xe8,0xe9,0xe6,0xe4,0xe0,0xd8,0xcf,0xc8,0xbf,0xb6,0xad,0xa4,0x9b,0x93,0x8a,0x80,0x77,0x70,0x69,0x61,0x58,0x53,0x4b,0x43,0x3d,0x38,0x33,0x2c,0x27,0x24,0x1f,0x1b,0x17,0x14,0x10,0x0a,0x08,0x07,0x04,0x01,0x00, +0x00,0x01,0x03,0x06,0x07,0x0b,0x0e,0x12,0x15,0x18,0x1d,0x21,0x23,0x2a,0x30,0x36,0x3b,0x40,0x48,0x4e,0x53,0x5c,0x65,0x6c,0x72,0x7a,0x84,0x8c,0x93,0x9b,0xa5,0xae,0xb5,0xbe,0xc7,0xce,0xd5,0xd8,0xdd,0xdf,0xdf,0xde,0xdb,0xd6,0xd0,0xca,0xc1,0xb8,0xb2,0xa9,0x9f,0x97,0x90,0x85,0x7c,0x76,0x71,0x69,0x5e,0x57,0x51,0x4b,0x44,0x3a,0x38,0x33,0x2b,0x27,0x24,0x1f,0x1a,0x15,0x14,0x10,0x09,0x08,0x07,0x03,0x02,0x00, +0x00,0x01,0x03,0x05,0x06,0x08,0x0d,0x11,0x13,0x17,0x1b,0x1f,0x23,0x28,0x2f,0x34,0x38,0x3e,0x46,0x4c,0x51,0x58,0x61,0x69,0x70,0x77,0x7e,0x88,0x90,0x98,0xa1,0xa9,0xae,0xb5,0xbf,0xc6,0xc9,0xcd,0xd2,0xd5,0xd4,0xd5,0xd0,0xc8,0xc5,0xc1,0xb9,0xb1,0xab,0xa4,0x9b,0x93,0x8a,0x83,0x79,0x72,0x6d,0x64,0x5b,0x53,0x4e,0x48,0x41,0x3a,0x36,0x31,0x2c,0x26,0x20,0x1d,0x1a,0x15,0x12,0x0f,0x0a,0x07,0x06,0x02,0x00,0x00, +0x00,0x00,0x01,0x04,0x05,0x09,0x0c,0x0f,0x12,0x16,0x1a,0x1e,0x22,0x27,0x2c,0x32,0x37,0x3d,0x43,0x48,0x4d,0x55,0x5e,0x65,0x6b,0x73,0x7a,0x83,0x8a,0x93,0x9c,0xa2,0xa7,0xaf,0xb6,0xbc,0xbf,0xc3,0xc8,0xc8,0xc8,0xc8,0xc6,0xc0,0xbb,0xb8,0xb2,0xa9,0xa4,0x9e,0x96,0x8d,0x86,0x7e,0x75,0x6e,0x67,0x60,0x59,0x50,0x4b,0x45,0x3e,0x38,0x35,0x2f,0x29,0x23,0x20,0x1b,0x17,0x13,0x10,0x0c,0x09,0x06,0x05,0x03,0x01,0x00, +0x00,0x00,0x02,0x04,0x05,0x09,0x0b,0x0e,0x13,0x16,0x19,0x1d,0x22,0x26,0x2b,0x31,0x35,0x3b,0x42,0x47,0x4d,0x54,0x5b,0x63,0x68,0x70,0x78,0x7d,0x84,0x8f,0x96,0x9b,0xa3,0xab,0xb0,0xb4,0xb7,0xbc,0xc0,0xbf,0xc0,0xc1,0xbc,0xb9,0xb6,0xb2,0xac,0xa5,0xa0,0x99,0x91,0x88,0x81,0x7a,0x72,0x6b,0x66,0x5e,0x57,0x50,0x4a,0x44,0x3e,0x38,0x32,0x2d,0x29,0x23,0x1f,0x1b,0x17,0x13,0x10,0x0c,0x09,0x06,0x05,0x03,0x01,0x00, +0x00,0x00,0x02,0x04,0x05,0x08,0x0c,0x0f,0x11,0x15,0x1a,0x1e,0x20,0x24,0x2a,0x2f,0x33,0x3a,0x41,0x46,0x4b,0x51,0x57,0x5e,0x63,0x6b,0x74,0x79,0x7e,0x88,0x90,0x96,0x9c,0xa2,0xa8,0xac,0xb0,0xb3,0xb5,0xb6,0xb7,0xb8,0xb4,0xb2,0xaf,0xa9,0xa4,0x9f,0x99,0x92,0x8a,0x81,0x7c,0x75,0x6e,0x66,0x61,0x5b,0x53,0x4d,0x49,0x43,0x3d,0x37,0x31,0x2c,0x27,0x22,0x1e,0x1b,0x17,0x13,0x10,0x0c,0x09,0x06,0x05,0x02,0x00,0x00, +0x00,0x00,0x01,0x03,0x03,0x06,0x0b,0x0d,0x0f,0x13,0x18,0x1b,0x1f,0x23,0x26,0x2b,0x31,0x37,0x3c,0x42,0x46,0x4d,0x54,0x5b,0x60,0x66,0x6e,0x76,0x79,0x7f,0x87,0x8f,0x92,0x98,0x9d,0xa2,0xa5,0xa6,0xaa,0xac,0xab,0xac,0xaa,0xa6,0xa4,0x9f,0x9a,0x95,0x91,0x89,0x81,0x7b,0x78,0x72,0x6a,0x63,0x5e,0x58,0x4f,0x49,0x45,0x3f,0x39,0x34,0x2d,0x29,0x25,0x20,0x1c,0x18,0x14,0x10,0x10,0x0b,0x07,0x04,0x03,0x01,0x00,0x00, +0x00,0x00,0x01,0x02,0x03,0x06,0x0a,0x0c,0x0d,0x11,0x16,0x1a,0x1d,0x21,0x25,0x29,0x2f,0x34,0x38,0x3e,0x44,0x49,0x50,0x57,0x5c,0x62,0x68,0x70,0x73,0x79,0x7f,0x86,0x8b,0x91,0x95,0x9a,0x9a,0x9e,0xa2,0xa1,0xa1,0xa2,0x9f,0x9c,0x99,0x96,0x93,0x8d,0x88,0x81,0x7b,0x76,0x72,0x6c,0x65,0x5d,0x58,0x52,0x4c,0x45,0x40,0x3b,0x36,0x31,0x2b,0x26,0x23,0x1e,0x1a,0x16,0x13,0x0f,0x0d,0x0b,0x07,0x04,0x03,0x01,0x00,0x00, +0x00,0x00,0x01,0x02,0x03,0x05,0x09,0x0c,0x0d,0x11,0x15,0x19,0x1c,0x20,0x24,0x28,0x2e,0x32,0x36,0x3b,0x41,0x47,0x4d,0x53,0x56,0x5c,0x64,0x6b,0x6f,0x75,0x7a,0x7e,0x84,0x8a,0x8d,0x91,0x94,0x99,0x9a,0x9a,0x9a,0x9b,0x99,0x95,0x92,0x8e,0x8b,0x85,0x80,0x7d,0x78,0x72,0x6d,0x66,0x5f,0x58,0x55,0x50,0x49,0x42,0x3d,0x37,0x34,0x30,0x2a,0x26,0x22,0x1d,0x19,0x15,0x12,0x0e,0x0d,0x0a,0x06,0x03,0x03,0x01,0x00,0x00, +0x00,0x00,0x01,0x02,0x02,0x04,0x09,0x0b,0x0c,0x10,0x13,0x17,0x1b,0x1f,0x22,0x27,0x2b,0x2e,0x33,0x39,0x3e,0x43,0x47,0x4d,0x52,0x58,0x5e,0x64,0x69,0x6f,0x75,0x79,0x7c,0x80,0x84,0x89,0x8b,0x8f,0x90,0x90,0x90,0x90,0x8f,0x8c,0x8b,0x87,0x82,0x7e,0x7a,0x76,0x72,0x6c,0x66,0x60,0x59,0x53,0x51,0x4b,0x45,0x3f,0x3a,0x35,0x30,0x2d,0x29,0x24,0x20,0x1c,0x19,0x15,0x11,0x0d,0x0c,0x0a,0x06,0x03,0x02,0x01,0x00,0x00, +0x00,0x00,0x00,0x00,0x01,0x02,0x07,0x09,0x0a,0x0d,0x11,0x15,0x17,0x1b,0x1e,0x23,0x26,0x2a,0x31,0x35,0x3b,0x40,0x43,0x48,0x4f,0x53,0x59,0x5f,0x63,0x66,0x6c,0x72,0x74,0x77,0x7c,0x7f,0x80,0x82,0x85,0x85,0x85,0x84,0x82,0x81,0x80,0x7c,0x78,0x76,0x72,0x6e,0x6a,0x65,0x60,0x5b,0x54,0x4f,0x4b,0x45,0x42,0x3d,0x37,0x32,0x2d,0x28,0x26,0x22,0x1c,0x18,0x16,0x13,0x0f,0x0b,0x0a,0x08,0x04,0x01,0x01,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x01,0x02,0x06,0x08,0x08,0x0b,0x10,0x13,0x15,0x19,0x1d,0x21,0x23,0x29,0x2d,0x31,0x36,0x3c,0x3f,0x44,0x4a,0x4d,0x52,0x58,0x5d,0x60,0x63,0x69,0x6b,0x70,0x75,0x76,0x77,0x79,0x7c,0x7c,0x7c,0x7c,0x7a,0x78,0x77,0x74,0x72,0x6f,0x6b,0x67,0x62,0x5e,0x5b,0x55,0x50,0x4c,0x46,0x41,0x3d,0x39,0x33,0x2e,0x2a,0x25,0x21,0x1e,0x1b,0x17,0x15,0x11,0x0d,0x09,0x08,0x07,0x03,0x01,0x01,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x01,0x04,0x07,0x08,0x0a,0x0f,0x12,0x14,0x19,0x1b,0x1f,0x23,0x27,0x2b,0x2f,0x34,0x39,0x3c,0x40,0x44,0x49,0x4d,0x53,0x57,0x5c,0x5f,0x63,0x66,0x6c,0x6f,0x70,0x70,0x73,0x74,0x74,0x74,0x76,0x74,0x71,0x70,0x70,0x6c,0x67,0x66,0x62,0x5c,0x57,0x55,0x50,0x4b,0x47,0x42,0x3e,0x3a,0x36,0x31,0x2d,0x29,0x25,0x20,0x1c,0x19,0x15,0x14,0x10,0x0c,0x09,0x08,0x06,0x02,0x01,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x01,0x02,0x06,0x08,0x0a,0x0d,0x10,0x14,0x17,0x17,0x1d,0x20,0x23,0x28,0x2c,0x30,0x35,0x38,0x3c,0x40,0x44,0x48,0x4c,0x50,0x55,0x59,0x5e,0x60,0x64,0x68,0x69,0x69,0x6b,0x6d,0x6d,0x6d,0x6d,0x6c,0x6a,0x69,0x68,0x64,0x60,0x5f,0x5b,0x58,0x52,0x4f,0x4c,0x45,0x41,0x3e,0x3a,0x36,0x31,0x2d,0x2a,0x27,0x22,0x20,0x1a,0x16,0x14,0x12,0x10,0x0b,0x08,0x07,0x04,0x01,0x01,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x04,0x04,0x08,0x0d,0x0e,0x0f,0x12,0x16,0x1a,0x1c,0x1f,0x24,0x28,0x2b,0x2f,0x34,0x38,0x3c,0x40,0x44,0x47,0x4a,0x4f,0x52,0x55,0x56,0x5a,0x5e,0x5f,0x61,0x63,0x65,0x63,0x63,0x63,0x62,0x62,0x61,0x60,0x5c,0x59,0x56,0x52,0x4f,0x4c,0x49,0x45,0x41,0x3d,0x3a,0x38,0x31,0x2b,0x28,0x27,0x22,0x1d,0x1c,0x18,0x14,0x12,0x0e,0x0c,0x09,0x06,0x05,0x02,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x03,0x03,0x05,0x09,0x0c,0x0e,0x12,0x15,0x18,0x19,0x1d,0x20,0x24,0x26,0x2a,0x2f,0x34,0x36,0x3a,0x3f,0x42,0x45,0x48,0x4c,0x4d,0x4f,0x53,0x56,0x57,0x58,0x5a,0x5c,0x5b,0x5b,0x5b,0x5b,0x59,0x58,0x57,0x53,0x50,0x4f,0x4c,0x49,0x45,0x43,0x3f,0x3c,0x37,0x35,0x32,0x2c,0x27,0x25,0x22,0x1e,0x1b,0x19,0x17,0x12,0x0e,0x0d,0x0b,0x07,0x04,0x04,0x01,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x02,0x03,0x04,0x08,0x0b,0x0d,0x11,0x14,0x17,0x18,0x1a,0x1f,0x22,0x25,0x29,0x2b,0x2f,0x31,0x34,0x3a,0x3d,0x3e,0x43,0x48,0x49,0x4a,0x4c,0x50,0x51,0x53,0x55,0x56,0x55,0x55,0x55,0x55,0x52,0x53,0x52,0x4d,0x4b,0x4a,0x49,0x45,0x40,0x3d,0x3a,0x39,0x35,0x30,0x2c,0x2a,0x26,0x24,0x20,0x1c,0x1a,0x18,0x15,0x10,0x0d,0x0c,0x09,0x06,0x04,0x03,0x01,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x03,0x03,0x07,0x09,0x0a,0x0d,0x11,0x15,0x16,0x18,0x1c,0x1e,0x21,0x26,0x28,0x2b,0x2e,0x32,0x35,0x38,0x39,0x3d,0x41,0x43,0x43,0x45,0x4a,0x4b,0x4c,0x4d,0x4f,0x4e,0x4e,0x4e,0x4d,0x4c,0x4c,0x4b,0x48,0x45,0x44,0x43,0x3f,0x3a,0x37,0x34,0x33,0x30,0x2c,0x29,0x26,0x22,0x21,0x1d,0x18,0x17,0x16,0x11,0x0d,0x0b,0x0a,0x07,0x04,0x03,0x02,0x01,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x01,0x02,0x05,0x07,0x06,0x0a,0x0c,0x10,0x12,0x15,0x17,0x1c,0x1e,0x1e,0x25,0x27,0x29,0x2e,0x32,0x34,0x35,0x38,0x3b,0x3d,0x3d,0x3f,0x42,0x44,0x44,0x44,0x46,0x47,0x47,0x47,0x45,0x45,0x44,0x43,0x41,0x3e,0x3e,0x3c,0x38,0x36,0x34,0x31,0x2e,0x2a,0x29,0x26,0x22,0x1f,0x1c,0x18,0x14,0x13,0x12,0x0f,0x0a,0x07,0x07,0x07,0x02,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x02,0x05,0x06,0x08,0x0d,0x0e,0x0f,0x12,0x16,0x19,0x1a,0x1c,0x20,0x23,0x23,0x26,0x2c,0x2f,0x30,0x33,0x36,0x37,0x38,0x3a,0x3b,0x3c,0x3d,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3d,0x3d,0x3c,0x3a,0x37,0x38,0x37,0x33,0x31,0x30,0x2b,0x29,0x25,0x23,0x22,0x1e,0x1b,0x19,0x17,0x13,0x10,0x0f,0x0e,0x09,0x06,0x06,0x04,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x03,0x04,0x05,0x07,0x0b,0x0d,0x0e,0x11,0x15,0x17,0x18,0x1b,0x1f,0x1f,0x20,0x24,0x27,0x29,0x2a,0x2d,0x31,0x32,0x32,0x35,0x38,0x37,0x38,0x3b,0x3c,0x3a,0x3a,0x3b,0x3b,0x38,0x38,0x38,0x35,0x33,0x33,0x32,0x2d,0x2b,0x2a,0x28,0x24,0x22,0x20,0x1f,0x1c,0x19,0x18,0x16,0x12,0x0f,0x0e,0x0c,0x07,0x06,0x05,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x02,0x03,0x05,0x07,0x0b,0x0c,0x0f,0x11,0x14,0x15,0x18,0x1b,0x1b,0x1c,0x21,0x24,0x25,0x26,0x29,0x2b,0x2c,0x2d,0x30,0x32,0x32,0x32,0x35,0x35,0x35,0x35,0x35,0x35,0x33,0x32,0x32,0x30,0x2f,0x2d,0x2d,0x29,0x26,0x26,0x24,0x20,0x1e,0x1c,0x1b,0x18,0x16,0x15,0x13,0x0f,0x0d,0x0c,0x09,0x06,0x03,0x02,0x03,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x03,0x05,0x06,0x08,0x09,0x0c,0x10,0x11,0x13,0x16,0x19,0x18,0x1c,0x20,0x21,0x22,0x23,0x25,0x28,0x29,0x2a,0x2c,0x2c,0x2d,0x2e,0x2e,0x2f,0x2e,0x2f,0x2d,0x2e,0x2c,0x2c,0x2c,0x29,0x29,0x26,0x25,0x22,0x22,0x20,0x1c,0x1a,0x19,0x18,0x13,0x12,0x11,0x0e,0x0a,0x09,0x07,0x06,0x04,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x03,0x05,0x06,0x07,0x0a,0x0c,0x0e,0x10,0x12,0x15,0x15,0x17,0x1b,0x1d,0x1c,0x1e,0x20,0x23,0x24,0x24,0x26,0x26,0x29,0x27,0x29,0x29,0x28,0x29,0x27,0x28,0x27,0x26,0x26,0x24,0x23,0x21,0x1f,0x1e,0x1c,0x1c,0x18,0x16,0x15,0x14,0x10,0x0e,0x0d,0x0b,0x07,0x06,0x06,0x04,0x02,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x05,0x05,0x07,0x0a,0x0b,0x0c,0x0e,0x10,0x13,0x14,0x16,0x18,0x19,0x1a,0x1d,0x1f,0x1f,0x1f,0x22,0x23,0x23,0x23,0x24,0x25,0x24,0x25,0x24,0x25,0x23,0x24,0x23,0x20,0x20,0x1f,0x1f,0x1c,0x1a,0x19,0x19,0x15,0x14,0x14,0x12,0x0e,0x0d,0x0c,0x0a,0x06,0x06,0x05,0x03,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x03,0x03,0x05,0x08,0x0a,0x0a,0x0c,0x0e,0x0f,0x10,0x13,0x15,0x15,0x16,0x19,0x1b,0x1b,0x1b,0x1c,0x1e,0x1f,0x1f,0x1f,0x21,0x20,0x20,0x20,0x1f,0x1f,0x1f,0x1f,0x1d,0x1b,0x1b,0x1b,0x18,0x16,0x15,0x15,0x13,0x10,0x10,0x0e,0x0d,0x0b,0x0a,0x09,0x06,0x03,0x03,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x01,0x01,0x03,0x06,0x06,0x09,0x0b,0x0c,0x0c,0x0d,0x10,0x11,0x12,0x13,0x16,0x17,0x17,0x18,0x1a,0x1a,0x1b,0x1b,0x1b,0x1b,0x1b,0x1c,0x1c,0x1b,0x1b,0x1a,0x1a,0x17,0x17,0x17,0x14,0x13,0x12,0x12,0x0e,0x0c,0x0c,0x0b,0x09,0x07,0x06,0x05,0x03,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x03,0x03,0x04,0x05,0x07,0x08,0x09,0x0a,0x0c,0x0e,0x0e,0x10,0x12,0x13,0x13,0x14,0x16,0x15,0x17,0x17,0x16,0x16,0x16,0x17,0x17,0x17,0x17,0x15,0x15,0x13,0x13,0x13,0x10,0x0f,0x0e,0x0e,0x0b,0x09,0x09,0x08,0x06,0x04,0x04,0x02,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x02,0x03,0x05,0x06,0x07,0x08,0x09,0x0b,0x0c,0x0d,0x0e,0x0f,0x10,0x10,0x12,0x14,0x14,0x14,0x14,0x15,0x15,0x15,0x14,0x13,0x14,0x14,0x14,0x11,0x10,0x11,0x0f,0x0e,0x0d,0x0d,0x0c,0x0a,0x08,0x08,0x07,0x05,0x03,0x03,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x01,0x03,0x04,0x06,0x06,0x08,0x0a,0x08,0x0a,0x0c,0x0c,0x0c,0x0c,0x0e,0x10,0x10,0x10,0x10,0x11,0x11,0x11,0x11,0x10,0x10,0x10,0x10,0x0e,0x0c,0x0d,0x0c,0x0a,0x0b,0x08,0x08,0x09,0x07,0x05,0x04,0x03,0x01,0x01,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x02,0x02,0x02,0x03,0x05,0x06,0x06,0x06,0x09,0x08,0x08,0x0a,0x0b,0x0b,0x0b,0x0b,0x0c,0x0c,0x0c,0x0c,0x0b,0x0b,0x0b,0x0b,0x0a,0x09,0x09,0x0a,0x08,0x07,0x05,0x04,0x04,0x03,0x02,0x01,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x01,0x02,0x03,0x03,0x04,0x05,0x06,0x06,0x06,0x08,0x08,0x08,0x08,0x09,0x09,0x09,0x09,0x08,0x08,0x08,0x08,0x07,0x06,0x06,0x06,0x04,0x04,0x03,0x03,0x01,0x01,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x02,0x02,0x02,0x03,0x04,0x05,0x05,0x05,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x06,0x05,0x05,0x05,0x03,0x03,0x02,0x02,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x02,0x01,0x03,0x03,0x03,0x04,0x05,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x02,0x03,0x03,0x03,0x02,0x01,0x01,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 +}; + +unsigned char data100[10000] = { +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x03,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x02,0x01,0x00,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x01,0x01,0x03,0x02,0x03,0x02,0x02,0x03,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x05,0x04,0x02,0x03,0x03,0x02,0x02,0x01,0x01,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x02,0x02,0x02,0x02,0x04,0x04,0x04,0x04,0x05,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x05,0x04,0x04,0x04,0x04,0x02,0x02,0x02,0x02,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x02,0x02,0x02,0x03,0x03,0x05,0x05,0x05,0x05,0x06,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x06,0x05,0x05,0x05,0x04,0x03,0x03,0x02,0x02,0x02,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x01,0x02,0x03,0x04,0x04,0x05,0x05,0x06,0x07,0x08,0x07,0x09,0x0a,0x09,0x09,0x09,0x0a,0x0a,0x0a,0x0a,0x0a,0x09,0x09,0x09,0x09,0x0a,0x09,0x07,0x09,0x07,0x07,0x06,0x05,0x05,0x04,0x04,0x03,0x01,0x01,0x01,0x02,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x01,0x02,0x02,0x04,0x06,0x06,0x07,0x07,0x08,0x08,0x09,0x0a,0x0a,0x0a,0x0b,0x0b,0x0c,0x0c,0x0c,0x0d,0x0d,0x0d,0x0d,0x0d,0x0c,0x0c,0x0c,0x0c,0x0d,0x0c,0x0a,0x0b,0x0a,0x0a,0x0a,0x08,0x08,0x07,0x07,0x06,0x05,0x04,0x02,0x02,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x02,0x02,0x03,0x04,0x05,0x05,0x06,0x08,0x09,0x09,0x0a,0x0b,0x0b,0x0d,0x0b,0x0c,0x0e,0x0d,0x0e,0x0f,0x0f,0x0f,0x10,0x10,0x10,0x10,0x10,0x10,0x0f,0x0f,0x0f,0x0f,0x0e,0x0d,0x0d,0x0b,0x0c,0x0d,0x0b,0x0b,0x0a,0x08,0x08,0x07,0x06,0x05,0x04,0x03,0x02,0x02,0x02,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x02,0x02,0x03,0x05,0x06,0x07,0x07,0x07,0x09,0x0b,0x0b,0x0c,0x0c,0x0e,0x0f,0x0f,0x10,0x10,0x11,0x12,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x11,0x11,0x0f,0x0f,0x10,0x0e,0x0c,0x0c,0x0c,0x0b,0x0a,0x08,0x07,0x07,0x07,0x05,0x03,0x03,0x02,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x02,0x03,0x04,0x06,0x07,0x07,0x08,0x08,0x0a,0x0c,0x0c,0x0d,0x0e,0x10,0x11,0x11,0x12,0x12,0x14,0x14,0x14,0x14,0x14,0x15,0x15,0x15,0x15,0x15,0x15,0x14,0x14,0x14,0x14,0x13,0x12,0x11,0x12,0x11,0x10,0x0e,0x0d,0x0d,0x0c,0x0b,0x09,0x08,0x08,0x07,0x06,0x04,0x03,0x03,0x02,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x02,0x03,0x04,0x04,0x05,0x07,0x08,0x09,0x09,0x0a,0x0b,0x0f,0x10,0x10,0x12,0x12,0x14,0x15,0x16,0x15,0x16,0x17,0x18,0x18,0x18,0x16,0x19,0x19,0x19,0x19,0x19,0x18,0x18,0x18,0x18,0x16,0x16,0x15,0x16,0x14,0x11,0x11,0x12,0x10,0x10,0x0e,0x0b,0x0b,0x09,0x08,0x08,0x06,0x04,0x04,0x04,0x02,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x02,0x02,0x03,0x06,0x07,0x06,0x09,0x0a,0x0a,0x0c,0x0c,0x0e,0x10,0x10,0x13,0x13,0x13,0x16,0x17,0x18,0x17,0x18,0x19,0x1a,0x1b,0x1b,0x1b,0x1b,0x1c,0x1c,0x1c,0x1c,0x1c,0x1b,0x1b,0x1b,0x1b,0x19,0x19,0x18,0x17,0x18,0x16,0x15,0x13,0x13,0x13,0x10,0x0e,0x0e,0x0c,0x0a,0x0b,0x09,0x07,0x06,0x07,0x05,0x03,0x01,0x02,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x03,0x03,0x04,0x06,0x09,0x09,0x09,0x0b,0x0d,0x0d,0x0e,0x10,0x12,0x13,0x14,0x14,0x16,0x17,0x1a,0x1a,0x1b,0x1a,0x1c,0x1d,0x1e,0x1e,0x1e,0x1e,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1e,0x1e,0x1e,0x1e,0x1e,0x1c,0x1b,0x1a,0x1b,0x1a,0x18,0x16,0x16,0x14,0x13,0x11,0x11,0x11,0x0e,0x0e,0x0b,0x0a,0x09,0x08,0x06,0x05,0x03,0x03,0x02,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x03,0x04,0x04,0x05,0x08,0x0a,0x0a,0x0b,0x0c,0x0f,0x12,0x12,0x13,0x14,0x16,0x18,0x18,0x19,0x1b,0x1d,0x1e,0x1e,0x1e,0x1f,0x21,0x22,0x22,0x23,0x22,0x24,0x24,0x23,0x23,0x24,0x24,0x22,0x22,0x23,0x22,0x22,0x20,0x1f,0x1e,0x1e,0x1d,0x1a,0x1a,0x19,0x18,0x17,0x14,0x13,0x13,0x12,0x10,0x0d,0x0c,0x0b,0x0a,0x08,0x06,0x05,0x04,0x03,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x03,0x05,0x05,0x07,0x08,0x09,0x0b,0x0c,0x0e,0x10,0x12,0x13,0x14,0x16,0x17,0x18,0x1a,0x1b,0x1c,0x1e,0x1f,0x20,0x21,0x22,0x23,0x24,0x24,0x25,0x26,0x26,0x26,0x27,0x27,0x26,0x26,0x26,0x26,0x25,0x24,0x23,0x22,0x21,0x21,0x20,0x1e,0x1d,0x1c,0x1b,0x1a,0x18,0x15,0x15,0x14,0x13,0x11,0x0e,0x0d,0x0c,0x0b,0x08,0x06,0x06,0x05,0x04,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x03,0x05,0x05,0x06,0x08,0x0a,0x0c,0x0f,0x10,0x10,0x13,0x15,0x16,0x17,0x18,0x19,0x1c,0x1e,0x1f,0x20,0x20,0x23,0x24,0x26,0x26,0x26,0x29,0x28,0x28,0x2b,0x2a,0x29,0x2c,0x2c,0x29,0x29,0x2b,0x2b,0x28,0x29,0x28,0x26,0x26,0x26,0x23,0x21,0x22,0x20,0x1f,0x1e,0x1c,0x19,0x19,0x17,0x15,0x14,0x11,0x11,0x10,0x0d,0x0b,0x08,0x07,0x06,0x05,0x04,0x02,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x03,0x04,0x06,0x07,0x09,0x0a,0x0b,0x10,0x12,0x13,0x14,0x15,0x18,0x19,0x1a,0x1b,0x1e,0x21,0x21,0x22,0x24,0x26,0x28,0x28,0x29,0x29,0x2b,0x2c,0x2e,0x2e,0x2e,0x2e,0x2e,0x30,0x30,0x30,0x2f,0x2e,0x2e,0x2e,0x2e,0x2c,0x29,0x29,0x29,0x28,0x27,0x24,0x23,0x22,0x21,0x1f,0x1c,0x1a,0x1a,0x19,0x17,0x13,0x14,0x13,0x11,0x0e,0x0b,0x0a,0x09,0x07,0x06,0x04,0x03,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x03,0x03,0x05,0x06,0x09,0x0a,0x0c,0x0d,0x0f,0x11,0x14,0x15,0x17,0x19,0x1a,0x1c,0x1d,0x1f,0x22,0x24,0x24,0x25,0x28,0x2b,0x2b,0x2b,0x2c,0x2f,0x32,0x31,0x32,0x33,0x34,0x33,0x35,0x33,0x33,0x35,0x35,0x33,0x34,0x31,0x31,0x32,0x2f,0x2d,0x2c,0x2c,0x2b,0x27,0x26,0x25,0x24,0x22,0x1f,0x1d,0x1d,0x1c,0x19,0x16,0x16,0x15,0x13,0x0f,0x0d,0x0d,0x0c,0x09,0x07,0x05,0x05,0x03,0x02,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x03,0x04,0x04,0x05,0x07,0x0b,0x0c,0x0d,0x0f,0x12,0x14,0x16,0x17,0x18,0x1b,0x1e,0x1f,0x20,0x22,0x25,0x28,0x28,0x29,0x2b,0x2d,0x30,0x31,0x31,0x33,0x35,0x36,0x37,0x38,0x38,0x39,0x3a,0x38,0x38,0x3a,0x3a,0x38,0x38,0x36,0x36,0x36,0x34,0x32,0x32,0x31,0x2f,0x2b,0x2a,0x29,0x29,0x26,0x23,0x21,0x20,0x1f,0x1c,0x19,0x18,0x17,0x16,0x13,0x10,0x0e,0x0d,0x0c,0x09,0x06,0x05,0x04,0x04,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x04,0x04,0x05,0x06,0x09,0x0c,0x0d,0x0e,0x10,0x13,0x16,0x17,0x18,0x1a,0x1d,0x20,0x21,0x22,0x24,0x27,0x2b,0x2c,0x2d,0x2e,0x32,0x33,0x34,0x35,0x35,0x38,0x39,0x3a,0x3a,0x3b,0x3c,0x3c,0x3d,0x3d,0x3d,0x3c,0x3b,0x3b,0x3a,0x3a,0x39,0x37,0x36,0x35,0x34,0x33,0x30,0x2e,0x2d,0x2b,0x28,0x25,0x23,0x22,0x21,0x1e,0x1b,0x19,0x18,0x17,0x14,0x11,0x0f,0x0e,0x0d,0x09,0x07,0x06,0x05,0x03,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x02,0x04,0x05,0x07,0x0a,0x0b,0x0c,0x0f,0x10,0x12,0x15,0x18,0x19,0x1a,0x1c,0x1f,0x22,0x25,0x26,0x26,0x2b,0x30,0x31,0x32,0x34,0x38,0x38,0x38,0x39,0x3b,0x3d,0x3e,0x3f,0x3f,0x40,0x41,0x42,0x42,0x42,0x42,0x42,0x40,0x40,0x3f,0x3f,0x3e,0x3c,0x3b,0x39,0x37,0x38,0x35,0x33,0x32,0x2e,0x2a,0x28,0x27,0x26,0x24,0x20,0x1c,0x1c,0x1a,0x18,0x16,0x13,0x11,0x10,0x0e,0x0b,0x08,0x08,0x07,0x05,0x03,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x02,0x04,0x07,0x08,0x08,0x0a,0x0c,0x0e,0x12,0x13,0x15,0x18,0x1a,0x1c,0x1d,0x20,0x23,0x26,0x28,0x29,0x2d,0x30,0x32,0x34,0x35,0x37,0x3a,0x3d,0x3e,0x3f,0x3f,0x41,0x45,0x44,0x45,0x45,0x47,0x48,0x47,0x47,0x47,0x48,0x46,0x45,0x45,0x45,0x44,0x41,0x40,0x3f,0x3e,0x3b,0x38,0x36,0x35,0x31,0x30,0x2e,0x2a,0x29,0x28,0x24,0x21,0x1f,0x1d,0x19,0x19,0x16,0x14,0x13,0x0f,0x0b,0x0b,0x09,0x08,0x06,0x04,0x02,0x02,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x02,0x03,0x06,0x09,0x0a,0x09,0x0b,0x0e,0x11,0x15,0x16,0x18,0x19,0x1b,0x1f,0x1f,0x23,0x26,0x29,0x2b,0x2c,0x30,0x34,0x36,0x37,0x38,0x3b,0x3e,0x41,0x42,0x43,0x44,0x48,0x49,0x4b,0x4b,0x4c,0x4d,0x4d,0x4e,0x4e,0x4e,0x4c,0x4c,0x4c,0x4b,0x4a,0x49,0x47,0x44,0x43,0x42,0x40,0x3b,0x39,0x38,0x34,0x34,0x33,0x2d,0x2c,0x2a,0x27,0x26,0x20,0x1f,0x1e,0x1a,0x18,0x17,0x16,0x11,0x0e,0x0e,0x0a,0x09,0x08,0x05,0x04,0x03,0x02,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x02,0x03,0x04,0x07,0x09,0x0a,0x0b,0x0f,0x12,0x14,0x16,0x17,0x19,0x1c,0x1f,0x22,0x23,0x26,0x29,0x2c,0x2f,0x30,0x32,0x36,0x3a,0x3c,0x3d,0x41,0x44,0x46,0x47,0x48,0x4b,0x4e,0x4e,0x51,0x50,0x51,0x53,0x53,0x53,0x53,0x53,0x51,0x52,0x51,0x50,0x4f,0x4e,0x4c,0x49,0x48,0x47,0x45,0x40,0x3e,0x3d,0x39,0x38,0x35,0x31,0x30,0x2c,0x2a,0x27,0x24,0x23,0x21,0x1e,0x1b,0x18,0x17,0x15,0x12,0x0f,0x0c,0x0b,0x0a,0x08,0x05,0x03,0x03,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x02,0x03,0x04,0x07,0x09,0x0b,0x0c,0x10,0x13,0x15,0x17,0x18,0x1b,0x1e,0x1f,0x23,0x25,0x29,0x2a,0x2d,0x31,0x34,0x37,0x3a,0x3d,0x3f,0x41,0x44,0x47,0x4a,0x4b,0x4c,0x4e,0x51,0x54,0x54,0x55,0x56,0x58,0x58,0x58,0x58,0x58,0x58,0x57,0x56,0x55,0x54,0x52,0x4f,0x4d,0x4c,0x4a,0x47,0x45,0x43,0x40,0x3c,0x3b,0x38,0x35,0x33,0x30,0x2c,0x29,0x26,0x25,0x22,0x1f,0x1d,0x19,0x18,0x16,0x13,0x10,0x0d,0x0c,0x0b,0x08,0x05,0x04,0x03,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x03,0x04,0x05,0x09,0x0b,0x0c,0x0f,0x11,0x13,0x17,0x18,0x1a,0x1d,0x1f,0x23,0x26,0x27,0x2b,0x2f,0x32,0x36,0x38,0x3c,0x3f,0x42,0x43,0x46,0x48,0x4b,0x4e,0x50,0x51,0x54,0x57,0x5a,0x5a,0x5b,0x5d,0x5e,0x5e,0x5e,0x5e,0x5e,0x5e,0x5d,0x5c,0x5b,0x5a,0x58,0x55,0x53,0x51,0x4f,0x4c,0x49,0x48,0x45,0x40,0x3f,0x3d,0x39,0x37,0x35,0x31,0x2b,0x29,0x27,0x25,0x22,0x1d,0x1b,0x1a,0x18,0x16,0x12,0x10,0x0f,0x0c,0x0a,0x06,0x04,0x04,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x02,0x02,0x05,0x06,0x07,0x0b,0x0c,0x0e,0x11,0x12,0x14,0x19,0x1b,0x1d,0x1d,0x22,0x26,0x28,0x2b,0x2f,0x32,0x35,0x39,0x3b,0x3f,0x42,0x45,0x49,0x4b,0x4d,0x51,0x54,0x57,0x58,0x5b,0x5e,0x61,0x61,0x62,0x64,0x65,0x64,0x64,0x64,0x64,0x65,0x64,0x63,0x62,0x61,0x5f,0x5c,0x5a,0x58,0x55,0x53,0x50,0x4c,0x4a,0x46,0x44,0x40,0x3c,0x3b,0x37,0x34,0x31,0x2d,0x2a,0x28,0x25,0x20,0x1e,0x1d,0x1b,0x17,0x13,0x12,0x0f,0x0d,0x0b,0x08,0x06,0x06,0x04,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x02,0x05,0x06,0x07,0x09,0x0c,0x0d,0x11,0x12,0x15,0x17,0x1a,0x1e,0x20,0x22,0x26,0x29,0x2c,0x2e,0x32,0x35,0x38,0x3c,0x3e,0x42,0x45,0x48,0x4c,0x4f,0x54,0x57,0x5a,0x5d,0x5e,0x62,0x65,0x67,0x67,0x68,0x69,0x6b,0x6c,0x6c,0x6c,0x6c,0x6c,0x6a,0x69,0x68,0x67,0x65,0x62,0x60,0x5e,0x5b,0x59,0x55,0x51,0x4f,0x4b,0x47,0x43,0x3f,0x3e,0x3a,0x37,0x36,0x30,0x2e,0x2a,0x28,0x23,0x21,0x20,0x1d,0x18,0x16,0x13,0x11,0x0e,0x0b,0x09,0x08,0x07,0x05,0x04,0x02,0x01,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x02,0x05,0x07,0x08,0x09,0x0c,0x0e,0x12,0x13,0x16,0x19,0x1c,0x1f,0x21,0x25,0x28,0x2b,0x2f,0x31,0x36,0x39,0x3c,0x40,0x43,0x46,0x4a,0x4d,0x51,0x54,0x59,0x5c,0x5f,0x62,0x63,0x68,0x6b,0x6d,0x6d,0x6e,0x6f,0x71,0x72,0x73,0x73,0x73,0x72,0x70,0x6e,0x6e,0x6d,0x6b,0x68,0x64,0x64,0x61,0x5e,0x5b,0x57,0x53,0x50,0x4c,0x48,0x44,0x42,0x3e,0x3b,0x38,0x33,0x31,0x2d,0x2a,0x26,0x22,0x21,0x1e,0x1b,0x17,0x14,0x13,0x11,0x0d,0x0b,0x08,0x08,0x06,0x04,0x02,0x01,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x03,0x05,0x07,0x08,0x09,0x0c,0x11,0x13,0x14,0x17,0x1a,0x1d,0x20,0x22,0x26,0x29,0x2c,0x30,0x34,0x38,0x3b,0x3e,0x42,0x46,0x4b,0x4e,0x50,0x54,0x59,0x5d,0x60,0x63,0x66,0x68,0x6b,0x6f,0x72,0x73,0x74,0x76,0x78,0x77,0x78,0x78,0x78,0x78,0x76,0x74,0x74,0x72,0x70,0x6e,0x6a,0x68,0x64,0x61,0x5e,0x5a,0x57,0x52,0x4f,0x4e,0x49,0x44,0x40,0x3d,0x3a,0x35,0x32,0x2e,0x2b,0x28,0x24,0x21,0x1d,0x1b,0x18,0x15,0x14,0x11,0x0e,0x0b,0x09,0x08,0x07,0x05,0x01,0x01,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x05,0x07,0x08,0x08,0x09,0x0e,0x13,0x14,0x15,0x18,0x1c,0x1f,0x22,0x24,0x27,0x2d,0x31,0x33,0x36,0x3c,0x3f,0x42,0x46,0x4b,0x50,0x53,0x56,0x5a,0x5e,0x62,0x65,0x68,0x6c,0x6e,0x71,0x75,0x77,0x79,0x7a,0x7c,0x7e,0x7f,0x7f,0x7f,0x7f,0x7e,0x7d,0x7b,0x7a,0x77,0x76,0x74,0x70,0x6e,0x6a,0x67,0x62,0x5f,0x5d,0x57,0x52,0x50,0x4d,0x48,0x44,0x41,0x3e,0x39,0x36,0x32,0x2f,0x2a,0x27,0x24,0x20,0x1c,0x1a,0x16,0x15,0x12,0x10,0x0c,0x09,0x08,0x08,0x05,0x02,0x01,0x01,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x01,0x00,0x02,0x01,0x03,0x07,0x09,0x0a,0x0c,0x11,0x11,0x16,0x18,0x1a,0x1d,0x21,0x25,0x27,0x2a,0x30,0x34,0x37,0x3a,0x3f,0x42,0x45,0x4a,0x4e,0x53,0x56,0x5c,0x61,0x63,0x67,0x6b,0x6f,0x73,0x75,0x78,0x7c,0x7d,0x81,0x82,0x84,0x86,0x87,0x87,0x87,0x87,0x87,0x84,0x83,0x82,0x80,0x7d,0x79,0x76,0x75,0x71,0x6d,0x6a,0x65,0x62,0x5d,0x59,0x52,0x4f,0x4c,0x47,0x44,0x41,0x3c,0x39,0x35,0x32,0x2d,0x2a,0x27,0x24,0x20,0x1b,0x19,0x17,0x14,0x10,0x0f,0x0b,0x0a,0x09,0x07,0x04,0x01,0x02,0x00,0x00,0x00,0x00, +0x00,0x00,0x01,0x01,0x01,0x02,0x04,0x06,0x0a,0x0b,0x0c,0x0f,0x12,0x14,0x17,0x19,0x1d,0x20,0x24,0x28,0x2a,0x2d,0x31,0x35,0x3a,0x3d,0x42,0x45,0x48,0x4d,0x51,0x56,0x5b,0x5e,0x63,0x69,0x6e,0x71,0x75,0x79,0x7a,0x7f,0x82,0x85,0x88,0x8a,0x8c,0x8e,0x8f,0x8f,0x8f,0x8f,0x8f,0x8d,0x8b,0x8a,0x87,0x84,0x80,0x7c,0x7a,0x76,0x73,0x70,0x6b,0x66,0x61,0x5e,0x5a,0x53,0x4f,0x4b,0x47,0x44,0x3f,0x3c,0x38,0x34,0x2f,0x2c,0x2a,0x25,0x22,0x1f,0x1b,0x18,0x15,0x12,0x10,0x0d,0x0c,0x0b,0x08,0x05,0x03,0x02,0x01,0x00,0x00,0x00, +0x00,0x00,0x00,0x01,0x02,0x02,0x04,0x07,0x0a,0x0b,0x0c,0x0f,0x12,0x15,0x18,0x1a,0x1e,0x21,0x24,0x28,0x2c,0x31,0x34,0x37,0x3c,0x3f,0x43,0x49,0x4d,0x52,0x55,0x5a,0x60,0x63,0x68,0x6e,0x73,0x76,0x79,0x7c,0x80,0x85,0x87,0x8b,0x8e,0x92,0x92,0x94,0x97,0x97,0x97,0x96,0x96,0x94,0x93,0x92,0x8d,0x8a,0x88,0x82,0x7f,0x7a,0x78,0x75,0x70,0x6c,0x67,0x63,0x5d,0x58,0x54,0x50,0x4b,0x46,0x41,0x3e,0x39,0x36,0x32,0x2d,0x2a,0x26,0x23,0x20,0x1c,0x1a,0x16,0x13,0x12,0x0e,0x0c,0x0b,0x08,0x05,0x03,0x02,0x02,0x00,0x00,0x00, +0x00,0x00,0x00,0x01,0x02,0x03,0x04,0x07,0x0a,0x0c,0x0d,0x10,0x13,0x16,0x19,0x1b,0x1f,0x22,0x25,0x29,0x2d,0x32,0x35,0x38,0x3d,0x41,0x46,0x4a,0x50,0x55,0x58,0x5d,0x63,0x69,0x6e,0x6f,0x75,0x79,0x7d,0x82,0x87,0x8c,0x8e,0x91,0x96,0x97,0x98,0x9c,0x9d,0x9c,0x9c,0x9d,0x9c,0x99,0x98,0x97,0x94,0x91,0x8e,0x89,0x85,0x80,0x7c,0x76,0x72,0x6f,0x6b,0x65,0x5f,0x5b,0x57,0x52,0x4d,0x48,0x43,0x3f,0x3a,0x37,0x34,0x2f,0x2b,0x27,0x24,0x20,0x1c,0x1a,0x16,0x14,0x11,0x0e,0x0d,0x0b,0x08,0x05,0x03,0x03,0x02,0x00,0x00,0x00, +0x00,0x00,0x00,0x01,0x02,0x03,0x05,0x08,0x0a,0x0c,0x0e,0x10,0x15,0x18,0x1a,0x1d,0x21,0x23,0x26,0x2b,0x2f,0x34,0x37,0x3b,0x40,0x43,0x48,0x4d,0x54,0x59,0x5d,0x62,0x65,0x6e,0x73,0x74,0x7a,0x7e,0x84,0x8a,0x8d,0x92,0x96,0x98,0x9c,0x9e,0x9f,0xa2,0xa4,0xa4,0xa4,0xa5,0xa3,0xa1,0x9f,0x9e,0x9a,0x97,0x94,0x8f,0x8c,0x87,0x81,0x7b,0x77,0x74,0x6f,0x6a,0x64,0x5f,0x5b,0x56,0x51,0x4b,0x45,0x42,0x3e,0x39,0x36,0x31,0x2e,0x2a,0x26,0x21,0x1d,0x1c,0x19,0x16,0x12,0x0f,0x0d,0x0d,0x09,0x05,0x04,0x03,0x02,0x00,0x00,0x00, +0x00,0x00,0x01,0x03,0x02,0x03,0x05,0x08,0x0b,0x0e,0x10,0x12,0x17,0x1a,0x1c,0x1f,0x22,0x26,0x29,0x2c,0x31,0x37,0x3a,0x3e,0x43,0x47,0x4c,0x50,0x57,0x5c,0x60,0x65,0x6b,0x72,0x76,0x79,0x7e,0x84,0x8b,0x91,0x93,0x97,0x9d,0xa0,0xa3,0xa6,0xa8,0xaa,0xac,0xad,0xad,0xac,0xab,0xaa,0xa8,0xa6,0xa1,0x9d,0x9a,0x95,0x93,0x8e,0x87,0x81,0x7b,0x78,0x73,0x6e,0x67,0x62,0x5e,0x59,0x54,0x4e,0x49,0x45,0x41,0x3c,0x39,0x35,0x30,0x2c,0x28,0x23,0x1e,0x1e,0x1b,0x18,0x14,0x11,0x0f,0x0c,0x09,0x06,0x04,0x03,0x03,0x01,0x00,0x00, +0x00,0x00,0x00,0x02,0x04,0x05,0x07,0x09,0x0d,0x0f,0x10,0x14,0x17,0x1a,0x1e,0x1f,0x23,0x28,0x2b,0x2f,0x32,0x38,0x3d,0x41,0x46,0x4a,0x4e,0x54,0x5a,0x60,0x62,0x67,0x70,0x75,0x79,0x7d,0x84,0x8c,0x91,0x96,0x9a,0xa0,0xa3,0xa6,0xac,0xae,0xb2,0xb5,0xb5,0xb5,0xb6,0xb5,0xb4,0xb1,0xb0,0xae,0xaa,0xa5,0xa2,0x9d,0x98,0x93,0x8e,0x87,0x81,0x7b,0x76,0x71,0x6b,0x65,0x61,0x5c,0x56,0x4f,0x4c,0x49,0x44,0x3f,0x3b,0x36,0x31,0x2d,0x29,0x26,0x20,0x1f,0x1c,0x19,0x16,0x12,0x10,0x0b,0x0b,0x09,0x06,0x05,0x03,0x00,0x00,0x00, +0x00,0x00,0x01,0x03,0x04,0x05,0x07,0x0a,0x0b,0x0f,0x11,0x15,0x18,0x1b,0x1e,0x20,0x24,0x27,0x2c,0x31,0x34,0x38,0x3e,0x42,0x47,0x4c,0x51,0x56,0x5d,0x63,0x66,0x6c,0x73,0x79,0x7d,0x82,0x89,0x91,0x96,0x9b,0x9f,0xa6,0xaa,0xac,0xb2,0xb6,0xb8,0xbc,0xbd,0xbc,0xbd,0xbd,0xbc,0xb8,0xb6,0xb6,0xb0,0xac,0xa8,0xa2,0x9e,0x98,0x93,0x8c,0x86,0x80,0x7b,0x76,0x6f,0x69,0x64,0x60,0x5a,0x53,0x4e,0x4a,0x45,0x40,0x3b,0x36,0x33,0x2e,0x2b,0x27,0x22,0x20,0x1c,0x19,0x16,0x12,0x11,0x0d,0x0a,0x07,0x06,0x05,0x04,0x02,0x00,0x00, +0x00,0x00,0x01,0x03,0x04,0x05,0x08,0x0b,0x0c,0x0f,0x12,0x16,0x17,0x1a,0x1e,0x21,0x26,0x29,0x2c,0x31,0x35,0x39,0x3f,0x44,0x48,0x4c,0x52,0x59,0x5e,0x63,0x68,0x6e,0x75,0x7b,0x80,0x87,0x8d,0x94,0x9a,0x9f,0xa3,0xaa,0xae,0xb2,0xb7,0xbb,0xbf,0xc2,0xc3,0xc3,0xc3,0xc3,0xc3,0xc1,0xbd,0xbb,0xb6,0xb1,0xab,0xa5,0xa1,0x9d,0x97,0x90,0x8a,0x84,0x7e,0x78,0x71,0x6b,0x66,0x61,0x5b,0x55,0x4f,0x4b,0x46,0x41,0x3c,0x37,0x34,0x2f,0x2b,0x27,0x22,0x20,0x1c,0x19,0x16,0x13,0x11,0x0d,0x0a,0x07,0x06,0x05,0x04,0x02,0x00,0x00, +0x00,0x00,0x00,0x03,0x04,0x05,0x08,0x0b,0x0d,0x10,0x12,0x15,0x18,0x1c,0x1f,0x22,0x26,0x29,0x2e,0x33,0x36,0x3b,0x40,0x46,0x4b,0x4e,0x54,0x5a,0x61,0x67,0x6b,0x71,0x77,0x7e,0x85,0x8c,0x92,0x99,0x9f,0xa4,0xa9,0xb0,0xb6,0xba,0xbf,0xc3,0xc7,0xc9,0xcb,0xcb,0xcb,0xcb,0xcb,0xc9,0xc5,0xc1,0xbd,0xb7,0xb1,0xab,0xa6,0xa2,0x9c,0x95,0x8f,0x88,0x82,0x7c,0x75,0x6f,0x6a,0x65,0x5e,0x57,0x52,0x4e,0x47,0x42,0x3d,0x38,0x36,0x31,0x2c,0x27,0x24,0x21,0x1d,0x19,0x16,0x13,0x12,0x0e,0x0c,0x09,0x06,0x05,0x04,0x02,0x00,0x00, +0x00,0x00,0x02,0x04,0x05,0x06,0x07,0x0a,0x0e,0x12,0x13,0x16,0x19,0x1d,0x21,0x23,0x28,0x2b,0x31,0x35,0x38,0x3d,0x43,0x47,0x4e,0x52,0x57,0x5e,0x65,0x6b,0x6e,0x75,0x7a,0x81,0x89,0x8e,0x95,0x9d,0xa4,0xa9,0xaf,0xb5,0xbc,0xc2,0xc7,0xca,0xce,0xd1,0xd5,0xd5,0xd5,0xd6,0xd4,0xd0,0xcc,0xc8,0xc3,0xbe,0xb8,0xb2,0xac,0xa7,0xa1,0x99,0x91,0x8b,0x85,0x7f,0x78,0x72,0x6e,0x68,0x61,0x5a,0x53,0x50,0x4b,0x45,0x40,0x3b,0x37,0x32,0x2e,0x2a,0x26,0x23,0x1e,0x1b,0x18,0x14,0x13,0x11,0x0c,0x08,0x07,0x06,0x04,0x01,0x00,0x00, +0x00,0x00,0x01,0x04,0x06,0x07,0x0a,0x0b,0x0e,0x12,0x14,0x17,0x1a,0x1e,0x22,0x24,0x27,0x2d,0x32,0x36,0x39,0x3e,0x45,0x49,0x4e,0x54,0x5a,0x61,0x67,0x6d,0x71,0x76,0x7e,0x85,0x8b,0x91,0x98,0xa1,0xa8,0xad,0xb3,0xba,0xc1,0xc8,0xce,0xd2,0xd6,0xda,0xdd,0xdd,0xdf,0xde,0xdc,0xd7,0xd4,0xcf,0xca,0xc5,0xbe,0xb6,0xb0,0xab,0xa4,0x9d,0x95,0x8e,0x88,0x82,0x7b,0x74,0x6f,0x6a,0x64,0x5d,0x56,0x51,0x4c,0x47,0x41,0x3c,0x38,0x33,0x2f,0x2b,0x26,0x24,0x1f,0x1c,0x19,0x15,0x14,0x10,0x0d,0x0a,0x08,0x07,0x05,0x02,0x00,0x00, +0x00,0x00,0x01,0x04,0x06,0x07,0x09,0x0c,0x0f,0x13,0x14,0x18,0x1b,0x1e,0x22,0x24,0x28,0x2d,0x32,0x37,0x3a,0x3f,0x44,0x4b,0x50,0x54,0x5a,0x61,0x67,0x6d,0x73,0x79,0x81,0x88,0x8e,0x95,0x9d,0xa4,0xac,0xb2,0xb8,0xbf,0xc5,0xcd,0xd4,0xd8,0xde,0xe2,0xe3,0xe3,0xe6,0xe3,0xe2,0xe0,0xdb,0xd6,0xd0,0xca,0xc3,0xbc,0xb5,0xaf,0xa8,0xa1,0x99,0x93,0x8b,0x84,0x7c,0x75,0x71,0x6b,0x64,0x5d,0x57,0x52,0x4d,0x48,0x41,0x3c,0x38,0x33,0x30,0x2a,0x26,0x24,0x20,0x1d,0x19,0x15,0x14,0x11,0x0e,0x0a,0x08,0x07,0x06,0x03,0x01,0x00, +0x00,0x00,0x01,0x04,0x06,0x07,0x09,0x0c,0x0f,0x13,0x14,0x18,0x1b,0x1e,0x23,0x25,0x29,0x2e,0x33,0x37,0x3a,0x3f,0x45,0x4b,0x50,0x55,0x5b,0x62,0x68,0x6e,0x74,0x7a,0x82,0x8a,0x90,0x98,0x9f,0xa6,0xad,0xb4,0xbb,0xc1,0xc9,0xd2,0xd9,0xde,0xe3,0xe7,0xe9,0xeb,0xeb,0xeb,0xe8,0xe5,0xe0,0xdb,0xd5,0xcd,0xc6,0xc0,0xb7,0xb1,0xa9,0xa1,0x9b,0x94,0x8c,0x85,0x7d,0x77,0x71,0x6b,0x65,0x5e,0x58,0x53,0x4e,0x48,0x42,0x3d,0x39,0x34,0x2f,0x2c,0x28,0x24,0x20,0x1d,0x1a,0x16,0x14,0x11,0x0e,0x0a,0x08,0x07,0x05,0x02,0x01,0x00, +0x00,0x00,0x01,0x04,0x06,0x07,0x09,0x0c,0x0f,0x13,0x14,0x18,0x1b,0x1f,0x22,0x26,0x2c,0x2e,0x34,0x38,0x3b,0x40,0x46,0x4b,0x51,0x56,0x5d,0x64,0x69,0x6f,0x75,0x7b,0x84,0x8a,0x92,0x9b,0xa1,0xa8,0xb1,0xb9,0xbe,0xc5,0xcf,0xd7,0xde,0xe3,0xe8,0xec,0xf0,0xf1,0xf1,0xf2,0xef,0xe9,0xe4,0xe1,0xdb,0xd2,0xc8,0xc1,0xbb,0xb5,0xad,0xa3,0x9e,0x96,0x8f,0x88,0x80,0x7a,0x73,0x6c,0x66,0x5f,0x59,0x54,0x4f,0x48,0x43,0x3d,0x3a,0x36,0x31,0x2c,0x27,0x24,0x20,0x1d,0x1a,0x16,0x14,0x11,0x0e,0x0a,0x08,0x07,0x05,0x02,0x01,0x00, +0x00,0x00,0x01,0x04,0x06,0x07,0x09,0x0d,0x10,0x13,0x15,0x19,0x1c,0x20,0x24,0x26,0x29,0x2e,0x33,0x39,0x3c,0x41,0x48,0x4c,0x51,0x57,0x5e,0x65,0x6b,0x70,0x77,0x7e,0x86,0x8d,0x95,0x9b,0xa3,0xab,0xb4,0xbc,0xc1,0xc8,0xd2,0xda,0xe0,0xe7,0xec,0xf1,0xf6,0xf8,0xf9,0xf7,0xf4,0xee,0xe9,0xe5,0xe0,0xd6,0xcc,0xc5,0xbf,0xb8,0xb0,0xa6,0x9f,0x99,0x92,0x8a,0x81,0x7b,0x75,0x6e,0x68,0x61,0x5b,0x56,0x50,0x49,0x44,0x3e,0x3c,0x37,0x32,0x2b,0x27,0x25,0x21,0x1e,0x1a,0x16,0x15,0x11,0x0e,0x0b,0x09,0x07,0x05,0x02,0x01,0x00, +0x00,0x00,0x01,0x04,0x06,0x07,0x0a,0x0d,0x10,0x13,0x15,0x19,0x1c,0x1f,0x24,0x26,0x29,0x30,0x35,0x3a,0x3c,0x42,0x48,0x4d,0x53,0x58,0x5e,0x64,0x6c,0x72,0x78,0x7f,0x87,0x8f,0x97,0x9c,0xa4,0xad,0xb5,0xbc,0xc3,0xcb,0xd4,0xdd,0xe4,0xea,0xef,0xf6,0xfb,0xfe,0xff,0xfc,0xf7,0xf3,0xed,0xe8,0xe1,0xd9,0xcf,0xc8,0xc2,0xb9,0xb1,0xa8,0xa0,0x9b,0x94,0x8a,0x82,0x7c,0x75,0x6f,0x68,0x61,0x5b,0x56,0x50,0x4a,0x44,0x3f,0x3b,0x36,0x31,0x2e,0x28,0x25,0x21,0x1e,0x1a,0x16,0x15,0x12,0x0f,0x0b,0x09,0x07,0x05,0x02,0x01,0x00, +0x00,0x00,0x01,0x04,0x06,0x07,0x0a,0x0d,0x10,0x13,0x15,0x19,0x1c,0x1f,0x23,0x27,0x2c,0x30,0x33,0x38,0x3d,0x42,0x47,0x4e,0x53,0x58,0x5e,0x64,0x6c,0x73,0x78,0x7f,0x87,0x8f,0x97,0x9b,0xa4,0xae,0xb5,0xbc,0xc3,0xcb,0xd5,0xdf,0xe6,0xeb,0xf1,0xf8,0xfd,0xfe,0xff,0xfe,0xfa,0xf4,0xee,0xe8,0xe2,0xda,0xcf,0xc6,0xc0,0xb9,0xb1,0xa8,0xa0,0x9b,0x93,0x8a,0x82,0x7b,0x75,0x6f,0x68,0x61,0x5b,0x56,0x50,0x4b,0x44,0x3f,0x3b,0x36,0x32,0x2d,0x28,0x25,0x21,0x1e,0x1a,0x16,0x15,0x12,0x0f,0x0b,0x09,0x07,0x05,0x02,0x01,0x00, +0x00,0x00,0x01,0x04,0x06,0x07,0x0a,0x0d,0x10,0x13,0x15,0x19,0x1c,0x1f,0x23,0x27,0x2c,0x30,0x33,0x38,0x3d,0x42,0x47,0x4e,0x53,0x58,0x5e,0x64,0x6c,0x73,0x78,0x7f,0x87,0x8f,0x97,0x9c,0xa4,0xad,0xb7,0xbd,0xc2,0xcb,0xd5,0xdf,0xe6,0xeb,0xf1,0xf8,0xfe,0xfe,0xff,0xfe,0xfb,0xf4,0xee,0xe9,0xe2,0xd9,0xcf,0xc6,0xbf,0xb9,0xb2,0xa8,0xa0,0x9b,0x93,0x8a,0x82,0x7b,0x75,0x6f,0x68,0x61,0x5b,0x56,0x50,0x4b,0x44,0x3f,0x3b,0x36,0x32,0x2c,0x28,0x26,0x21,0x1e,0x1a,0x16,0x15,0x12,0x0f,0x0b,0x09,0x07,0x05,0x02,0x01,0x00, +0x00,0x00,0x01,0x04,0x06,0x07,0x0a,0x0d,0x10,0x13,0x15,0x19,0x1c,0x1f,0x24,0x26,0x29,0x30,0x35,0x3a,0x3d,0x42,0x47,0x4e,0x53,0x58,0x5e,0x64,0x6c,0x73,0x78,0x7f,0x87,0x8f,0x97,0x9b,0xa4,0xae,0xb5,0xbb,0xc3,0xcb,0xd5,0xdf,0xe6,0xea,0xf1,0xf8,0xfd,0xfe,0xfe,0xfe,0xfa,0xf4,0xed,0xe8,0xe1,0xd9,0xd0,0xc6,0xc1,0xb8,0xaf,0xa8,0xa1,0x9b,0x93,0x8a,0x82,0x7c,0x76,0x6f,0x68,0x61,0x5b,0x56,0x50,0x4b,0x44,0x3f,0x3b,0x36,0x32,0x2d,0x28,0x25,0x21,0x1e,0x1a,0x16,0x15,0x12,0x0f,0x0b,0x09,0x07,0x05,0x02,0x01,0x00, +0x00,0x00,0x01,0x04,0x06,0x07,0x0a,0x0d,0x10,0x13,0x15,0x18,0x1b,0x1f,0x24,0x26,0x29,0x2e,0x35,0x3a,0x3c,0x42,0x48,0x4c,0x52,0x58,0x5e,0x65,0x6c,0x71,0x77,0x7e,0x86,0x8f,0x96,0x9c,0xa3,0xac,0xb4,0xbd,0xc3,0xca,0xd3,0xdc,0xe3,0xe7,0xee,0xf4,0xfa,0xfa,0xfb,0xf9,0xf6,0xf0,0xea,0xe6,0xe1,0xd8,0xce,0xc6,0xc0,0xb9,0xb0,0xa7,0xa0,0x9a,0x92,0x88,0x82,0x7b,0x75,0x6f,0x68,0x61,0x5b,0x56,0x4f,0x4a,0x44,0x3f,0x3b,0x37,0x32,0x2b,0x28,0x26,0x22,0x1d,0x1a,0x16,0x15,0x12,0x0f,0x0b,0x09,0x07,0x05,0x02,0x01,0x00, +0x00,0x00,0x01,0x04,0x06,0x07,0x09,0x0c,0x0f,0x13,0x14,0x17,0x1a,0x1e,0x22,0x26,0x2c,0x2e,0x33,0x38,0x3b,0x40,0x47,0x4c,0x51,0x57,0x5d,0x64,0x6a,0x70,0x75,0x7c,0x84,0x8c,0x93,0x9a,0xa1,0xa9,0xb4,0xba,0xbe,0xc7,0xd0,0xd7,0xde,0xe5,0xea,0xef,0xf3,0xf4,0xf5,0xf4,0xf2,0xec,0xe6,0xe3,0xde,0xd4,0xcb,0xc3,0xbc,0xb6,0xae,0xa6,0x9f,0x98,0x8f,0x88,0x80,0x78,0x72,0x6e,0x68,0x60,0x5a,0x54,0x4e,0x49,0x43,0x3e,0x3b,0x37,0x31,0x2b,0x27,0x26,0x21,0x1d,0x1a,0x16,0x14,0x11,0x0e,0x0a,0x08,0x07,0x05,0x02,0x01,0x00, +0x00,0x00,0x01,0x04,0x06,0x07,0x09,0x0c,0x0f,0x13,0x14,0x18,0x1b,0x1e,0x22,0x26,0x2b,0x2e,0x33,0x38,0x3b,0x40,0x45,0x4c,0x51,0x56,0x5c,0x63,0x69,0x6e,0x74,0x7b,0x83,0x8a,0x92,0x99,0x9f,0xa7,0xb0,0xb6,0xbd,0xc3,0xcb,0xd3,0xda,0xe0,0xe5,0xe9,0xec,0xee,0xef,0xee,0xec,0xe8,0xe2,0xdf,0xd8,0xcf,0xc7,0xc1,0xb8,0xb2,0xab,0xa4,0x9c,0x94,0x8e,0x87,0x7e,0x78,0x72,0x6c,0x66,0x5f,0x59,0x53,0x4e,0x48,0x42,0x3d,0x39,0x34,0x31,0x2d,0x28,0x24,0x20,0x1d,0x1a,0x16,0x14,0x11,0x0e,0x0a,0x08,0x07,0x05,0x02,0x01,0x00, +0x00,0x00,0x01,0x04,0x06,0x07,0x09,0x0c,0x0f,0x13,0x14,0x18,0x1b,0x1e,0x23,0x25,0x28,0x2e,0x31,0x36,0x3a,0x3f,0x45,0x4b,0x50,0x55,0x5b,0x62,0x68,0x6e,0x74,0x7a,0x82,0x89,0x8f,0x97,0x9f,0xa6,0xad,0xb3,0xbb,0xc1,0xc8,0xd0,0xd6,0xdc,0xe0,0xe3,0xe6,0xe9,0xea,0xe8,0xe5,0xe3,0xdf,0xd9,0xd2,0xcc,0xc5,0xbf,0xb7,0xb1,0xa9,0xa1,0x9b,0x94,0x8c,0x85,0x7d,0x77,0x71,0x6b,0x65,0x5e,0x58,0x53,0x4e,0x47,0x42,0x3d,0x39,0x34,0x30,0x2a,0x27,0x25,0x20,0x1d,0x1a,0x16,0x14,0x11,0x0e,0x0a,0x08,0x07,0x06,0x02,0x01,0x00, +0x00,0x00,0x01,0x04,0x06,0x07,0x0a,0x0d,0x0f,0x12,0x15,0x18,0x1b,0x1e,0x22,0x24,0x28,0x2d,0x31,0x37,0x3a,0x3f,0x45,0x4a,0x4f,0x54,0x5a,0x61,0x67,0x6d,0x73,0x79,0x80,0x87,0x8e,0x93,0x9a,0xa2,0xa9,0xaf,0xb7,0xbd,0xc4,0xca,0xd0,0xd6,0xda,0xdd,0xe0,0xe1,0xe2,0xe0,0xdf,0xdd,0xd8,0xd3,0xcd,0xc7,0xc0,0xb9,0xb3,0xad,0xa5,0x9d,0x97,0x92,0x8a,0x81,0x7c,0x76,0x71,0x6b,0x64,0x5d,0x57,0x52,0x4d,0x48,0x41,0x3b,0x39,0x35,0x2e,0x29,0x27,0x24,0x20,0x1d,0x19,0x15,0x14,0x12,0x0c,0x09,0x08,0x07,0x05,0x03,0x01,0x00, +0x00,0x00,0x02,0x04,0x06,0x07,0x09,0x0c,0x0f,0x11,0x14,0x16,0x19,0x1d,0x21,0x22,0x28,0x2c,0x32,0x36,0x39,0x3d,0x44,0x49,0x4e,0x52,0x58,0x5f,0x65,0x6b,0x71,0x76,0x7c,0x84,0x8b,0x91,0x97,0x9e,0xa5,0xab,0xb1,0xb7,0xbe,0xc5,0xca,0xce,0xd2,0xd5,0xd9,0xd9,0xda,0xda,0xd8,0xd3,0xcf,0xcc,0xc7,0xc2,0xba,0xb4,0xaf,0xa9,0xa2,0x9b,0x94,0x8e,0x87,0x7f,0x79,0x74,0x6f,0x69,0x62,0x5b,0x55,0x50,0x4c,0x46,0x40,0x39,0x38,0x34,0x2f,0x2b,0x26,0x23,0x1f,0x1c,0x19,0x15,0x13,0x11,0x0d,0x09,0x08,0x07,0x02,0x01,0x01,0x00, +0x00,0x00,0x01,0x04,0x05,0x06,0x06,0x0a,0x0e,0x11,0x12,0x16,0x19,0x1c,0x20,0x22,0x27,0x2b,0x2f,0x33,0x37,0x3b,0x41,0x47,0x4c,0x4f,0x55,0x5c,0x62,0x68,0x6f,0x74,0x79,0x80,0x88,0x8d,0x94,0x9c,0xa2,0xa7,0xab,0xb1,0xb7,0xbe,0xc3,0xc6,0xc9,0xcc,0xd0,0xd0,0xd1,0xd0,0xd0,0xca,0xc5,0xc3,0xbf,0xbb,0xb4,0xaf,0xa9,0xa4,0x9e,0x98,0x90,0x8a,0x84,0x7d,0x75,0x71,0x6c,0x65,0x5e,0x58,0x51,0x4e,0x48,0x43,0x3e,0x39,0x36,0x32,0x2d,0x2a,0x24,0x21,0x1e,0x1b,0x18,0x14,0x12,0x0f,0x0c,0x08,0x07,0x06,0x04,0x01,0x00,0x00, +0x00,0x00,0x00,0x02,0x04,0x05,0x09,0x0b,0x0d,0x10,0x11,0x15,0x18,0x1b,0x1f,0x21,0x26,0x29,0x2e,0x33,0x36,0x3b,0x40,0x44,0x49,0x4d,0x53,0x5a,0x60,0x64,0x6a,0x70,0x76,0x7c,0x83,0x88,0x8f,0x97,0x9d,0xa2,0xa5,0xac,0xb1,0xb7,0xbb,0xbe,0xc2,0xc5,0xc7,0xc6,0xc8,0xc6,0xc7,0xc5,0xbf,0xbc,0xb8,0xb5,0xae,0xa8,0xa4,0x9f,0x99,0x93,0x8c,0x86,0x7f,0x7a,0x72,0x6d,0x68,0x62,0x5d,0x56,0x50,0x4c,0x47,0x42,0x3c,0x37,0x35,0x31,0x2c,0x27,0x23,0x21,0x1d,0x19,0x16,0x13,0x11,0x0d,0x0b,0x09,0x06,0x05,0x04,0x02,0x00,0x00, +0x00,0x00,0x01,0x03,0x04,0x05,0x07,0x0a,0x0b,0x0f,0x12,0x16,0x17,0x1a,0x1e,0x21,0x26,0x29,0x2c,0x31,0x35,0x39,0x3f,0x43,0x48,0x4c,0x52,0x58,0x5e,0x63,0x68,0x6e,0x74,0x7a,0x7f,0x84,0x8c,0x93,0x98,0x9d,0xa2,0xa8,0xae,0xb1,0xb5,0xb7,0xba,0xbf,0xc1,0xc0,0xc1,0xc2,0xc0,0xbb,0xb9,0xb7,0xb3,0xaf,0xaa,0xa5,0xa0,0x9b,0x95,0x8f,0x87,0x83,0x7d,0x77,0x71,0x6b,0x66,0x61,0x5b,0x55,0x4f,0x4b,0x46,0x41,0x3c,0x37,0x33,0x2e,0x2b,0x28,0x23,0x20,0x1c,0x19,0x16,0x13,0x11,0x0d,0x0a,0x07,0x06,0x05,0x04,0x02,0x00,0x00, +0x00,0x00,0x01,0x03,0x04,0x05,0x07,0x0b,0x0c,0x10,0x11,0x15,0x18,0x1b,0x1e,0x20,0x22,0x28,0x2c,0x31,0x33,0x38,0x3e,0x42,0x47,0x4b,0x50,0x54,0x5b,0x61,0x64,0x6a,0x71,0x76,0x7b,0x7e,0x87,0x8f,0x93,0x98,0x9d,0xa3,0xa8,0xac,0xaf,0xb1,0xb5,0xb7,0xb9,0xb9,0xb9,0xbb,0xb9,0xb5,0xb4,0xb1,0xad,0xa9,0xa5,0xa0,0x9b,0x96,0x90,0x8a,0x82,0x7e,0x79,0x73,0x6d,0x66,0x64,0x5d,0x58,0x52,0x4e,0x4a,0x45,0x40,0x3b,0x36,0x33,0x2e,0x2a,0x26,0x22,0x20,0x1c,0x19,0x16,0x12,0x11,0x0d,0x0b,0x08,0x06,0x05,0x03,0x00,0x00,0x00, +0x00,0x00,0x01,0x02,0x04,0x04,0x06,0x0a,0x0d,0x0e,0x10,0x13,0x17,0x1a,0x1d,0x1f,0x23,0x26,0x29,0x2d,0x32,0x37,0x3c,0x40,0x45,0x47,0x4d,0x53,0x58,0x5d,0x61,0x66,0x6d,0x73,0x78,0x7c,0x81,0x87,0x8e,0x93,0x96,0x9b,0xa0,0xa3,0xa8,0xaa,0xac,0xad,0xb0,0xb1,0xb1,0xb1,0xb1,0xaf,0xac,0xaa,0xa6,0xa1,0x9e,0x99,0x96,0x90,0x8a,0x83,0x7e,0x7a,0x75,0x6f,0x6a,0x64,0x60,0x5b,0x56,0x4e,0x4b,0x47,0x43,0x3d,0x3a,0x35,0x2f,0x2c,0x28,0x25,0x20,0x1e,0x1b,0x18,0x15,0x11,0x10,0x0d,0x0a,0x07,0x05,0x04,0x02,0x00,0x00,0x00, +0x00,0x00,0x00,0x02,0x02,0x03,0x05,0x08,0x0b,0x0c,0x0f,0x11,0x15,0x18,0x1a,0x1d,0x22,0x23,0x27,0x2b,0x30,0x35,0x38,0x3c,0x42,0x44,0x49,0x4f,0x55,0x5b,0x5f,0x64,0x68,0x6f,0x74,0x76,0x7b,0x81,0x87,0x8d,0x90,0x94,0x99,0x9c,0xa1,0xa1,0xa2,0xa6,0xa9,0xa8,0xa8,0xa8,0xa8,0xa4,0xa2,0xa1,0x9d,0x9a,0x97,0x92,0x8f,0x8a,0x83,0x7e,0x79,0x76,0x72,0x6d,0x66,0x61,0x5d,0x58,0x52,0x4c,0x48,0x44,0x40,0x3a,0x37,0x32,0x2d,0x28,0x27,0x23,0x1e,0x1b,0x18,0x15,0x12,0x0f,0x0f,0x0c,0x09,0x06,0x04,0x03,0x02,0x00,0x00,0x00, +0x00,0x00,0x00,0x01,0x02,0x03,0x05,0x08,0x0b,0x0c,0x0d,0x10,0x14,0x17,0x1a,0x1c,0x20,0x23,0x26,0x2a,0x2e,0x33,0x36,0x39,0x3e,0x43,0x48,0x4b,0x51,0x56,0x5a,0x5f,0x64,0x6a,0x6f,0x72,0x77,0x7c,0x81,0x85,0x8a,0x90,0x92,0x96,0x99,0x9a,0x9c,0xa0,0xa1,0xa0,0xa0,0xa1,0x9f,0x9d,0x9c,0x9a,0x96,0x94,0x91,0x8c,0x88,0x83,0x7e,0x79,0x74,0x71,0x6d,0x68,0x62,0x5d,0x58,0x53,0x4f,0x4a,0x44,0x40,0x3c,0x38,0x35,0x30,0x2c,0x27,0x24,0x21,0x1d,0x1b,0x17,0x15,0x12,0x0f,0x0d,0x0c,0x09,0x06,0x04,0x03,0x02,0x00,0x00,0x00, +0x00,0x00,0x00,0x01,0x02,0x03,0x04,0x07,0x0a,0x0c,0x0d,0x10,0x13,0x16,0x19,0x1b,0x1f,0x22,0x25,0x29,0x2d,0x32,0x35,0x38,0x3d,0x41,0x46,0x4a,0x4f,0x54,0x56,0x5b,0x61,0x67,0x6c,0x6f,0x73,0x78,0x7c,0x80,0x83,0x89,0x8b,0x8e,0x93,0x93,0x98,0x9a,0x9b,0x9b,0x9b,0x9b,0x9a,0x98,0x96,0x93,0x90,0x8d,0x8b,0x85,0x82,0x7e,0x7b,0x76,0x71,0x6f,0x69,0x64,0x5e,0x59,0x56,0x51,0x4d,0x47,0x42,0x3f,0x39,0x37,0x34,0x2f,0x2b,0x27,0x24,0x20,0x1c,0x1a,0x16,0x14,0x11,0x0e,0x0d,0x0b,0x08,0x05,0x03,0x03,0x02,0x00,0x00,0x00, +0x00,0x00,0x00,0x01,0x02,0x02,0x04,0x07,0x0a,0x0b,0x0c,0x0f,0x12,0x14,0x18,0x1a,0x1e,0x21,0x24,0x29,0x2b,0x2e,0x31,0x35,0x3a,0x3d,0x43,0x46,0x4b,0x50,0x53,0x57,0x5c,0x61,0x66,0x6b,0x6f,0x74,0x77,0x7b,0x7d,0x82,0x85,0x88,0x8b,0x8d,0x91,0x92,0x93,0x93,0x93,0x93,0x94,0x90,0x8f,0x8d,0x8a,0x87,0x84,0x7f,0x7d,0x79,0x76,0x72,0x6d,0x69,0x64,0x5f,0x59,0x54,0x52,0x4e,0x49,0x44,0x3e,0x3b,0x36,0x33,0x30,0x2d,0x2b,0x26,0x23,0x20,0x1c,0x1a,0x16,0x13,0x10,0x0e,0x0c,0x0b,0x08,0x05,0x03,0x02,0x02,0x00,0x00,0x00, +0x00,0x00,0x01,0x01,0x01,0x01,0x02,0x06,0x09,0x0a,0x0b,0x0e,0x11,0x13,0x17,0x18,0x1c,0x1f,0x21,0x26,0x28,0x2a,0x30,0x34,0x38,0x3c,0x41,0x44,0x46,0x4b,0x51,0x55,0x59,0x5d,0x61,0x66,0x6a,0x6e,0x72,0x76,0x78,0x7b,0x7e,0x81,0x84,0x86,0x87,0x89,0x8a,0x8a,0x8a,0x8a,0x89,0x87,0x87,0x86,0x83,0x80,0x7c,0x7a,0x76,0x73,0x70,0x6d,0x68,0x63,0x5e,0x5b,0x55,0x51,0x4f,0x49,0x46,0x42,0x3d,0x3a,0x35,0x32,0x2d,0x2a,0x28,0x24,0x21,0x1d,0x1a,0x18,0x15,0x12,0x0f,0x0c,0x0b,0x0a,0x07,0x04,0x02,0x01,0x01,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x04,0x07,0x08,0x09,0x0b,0x0f,0x12,0x14,0x15,0x19,0x1c,0x1f,0x22,0x25,0x28,0x2d,0x30,0x34,0x39,0x3e,0x41,0x43,0x48,0x4e,0x50,0x53,0x59,0x5e,0x60,0x64,0x66,0x6b,0x6f,0x71,0x74,0x78,0x7b,0x7c,0x7d,0x7e,0x81,0x82,0x82,0x82,0x82,0x81,0x7f,0x7e,0x7d,0x7b,0x77,0x76,0x73,0x71,0x6d,0x6a,0x66,0x62,0x60,0x5b,0x57,0x51,0x4e,0x4b,0x46,0x42,0x3f,0x3b,0x37,0x32,0x2f,0x2a,0x27,0x25,0x23,0x1e,0x1a,0x17,0x15,0x13,0x11,0x0d,0x0a,0x09,0x08,0x05,0x02,0x01,0x01,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x04,0x07,0x08,0x08,0x0a,0x0e,0x11,0x13,0x15,0x18,0x1b,0x1e,0x21,0x23,0x27,0x2b,0x2e,0x32,0x35,0x39,0x3d,0x3f,0x44,0x49,0x4c,0x4f,0x52,0x57,0x5b,0x5f,0x61,0x65,0x69,0x6b,0x6e,0x72,0x75,0x75,0x77,0x78,0x7b,0x7b,0x7b,0x7b,0x7b,0x7a,0x78,0x78,0x77,0x75,0x73,0x71,0x6d,0x6b,0x67,0x64,0x60,0x5c,0x5b,0x56,0x52,0x4f,0x4a,0x46,0x42,0x3e,0x3b,0x37,0x33,0x2f,0x2c,0x29,0x25,0x22,0x1f,0x1d,0x1a,0x16,0x15,0x12,0x0f,0x0c,0x09,0x08,0x08,0x05,0x02,0x01,0x01,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x02,0x05,0x07,0x08,0x09,0x0c,0x11,0x13,0x14,0x17,0x1a,0x1d,0x20,0x22,0x26,0x29,0x2c,0x30,0x34,0x38,0x3b,0x3e,0x42,0x44,0x49,0x4c,0x50,0x54,0x58,0x5b,0x5e,0x61,0x64,0x66,0x6a,0x6e,0x6f,0x71,0x71,0x73,0x75,0x75,0x75,0x75,0x75,0x76,0x74,0x72,0x71,0x71,0x6f,0x6b,0x68,0x66,0x64,0x60,0x5c,0x58,0x56,0x52,0x4e,0x4b,0x47,0x44,0x40,0x3d,0x3a,0x35,0x32,0x2e,0x2b,0x28,0x24,0x21,0x1d,0x1b,0x18,0x15,0x14,0x11,0x0e,0x0b,0x09,0x08,0x07,0x04,0x01,0x01,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x03,0x07,0x08,0x09,0x0c,0x0e,0x11,0x13,0x17,0x18,0x19,0x1e,0x21,0x24,0x27,0x2a,0x2e,0x30,0x36,0x37,0x3a,0x3e,0x40,0x44,0x47,0x4b,0x4f,0x51,0x56,0x59,0x5c,0x60,0x61,0x65,0x69,0x6a,0x6b,0x6b,0x6c,0x6e,0x6f,0x6f,0x6f,0x6f,0x70,0x6d,0x6c,0x6b,0x6b,0x68,0x65,0x62,0x61,0x5e,0x5b,0x57,0x53,0x51,0x4e,0x4a,0x45,0x42,0x40,0x3c,0x39,0x36,0x32,0x2f,0x2c,0x29,0x26,0x22,0x21,0x1e,0x19,0x17,0x14,0x13,0x12,0x0d,0x0a,0x08,0x08,0x05,0x02,0x01,0x01,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x02,0x04,0x05,0x06,0x08,0x0c,0x0d,0x10,0x11,0x14,0x15,0x18,0x1c,0x1e,0x20,0x24,0x27,0x2b,0x2d,0x31,0x34,0x37,0x3b,0x3d,0x41,0x44,0x47,0x4b,0x4c,0x51,0x54,0x57,0x5a,0x5b,0x5d,0x61,0x64,0x64,0x65,0x66,0x69,0x68,0x68,0x68,0x68,0x68,0x66,0x66,0x65,0x64,0x62,0x5f,0x5d,0x5b,0x57,0x55,0x53,0x4f,0x4c,0x4a,0x46,0x42,0x3e,0x3d,0x39,0x36,0x32,0x2e,0x2b,0x28,0x28,0x23,0x20,0x1e,0x1b,0x15,0x16,0x13,0x10,0x0f,0x0c,0x09,0x07,0x06,0x05,0x02,0x01,0x01,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x03,0x04,0x05,0x0a,0x0c,0x0d,0x0e,0x10,0x14,0x17,0x19,0x1b,0x1e,0x21,0x24,0x27,0x29,0x2b,0x31,0x34,0x38,0x3a,0x3d,0x41,0x44,0x46,0x49,0x4c,0x4f,0x50,0x52,0x54,0x57,0x5a,0x5d,0x5d,0x5e,0x5f,0x62,0x61,0x61,0x61,0x61,0x61,0x60,0x5f,0x5e,0x5d,0x5b,0x58,0x56,0x54,0x51,0x4f,0x4c,0x49,0x47,0x44,0x42,0x3f,0x3b,0x39,0x37,0x34,0x2c,0x2a,0x28,0x26,0x24,0x1e,0x1c,0x1b,0x19,0x16,0x13,0x0f,0x0e,0x0c,0x0a,0x07,0x05,0x04,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x03,0x04,0x04,0x07,0x0a,0x0c,0x0d,0x11,0x14,0x16,0x18,0x19,0x1b,0x1e,0x20,0x24,0x26,0x29,0x2c,0x2f,0x33,0x36,0x38,0x3c,0x3f,0x41,0x44,0x46,0x4a,0x4c,0x4d,0x4f,0x51,0x54,0x57,0x57,0x58,0x59,0x5a,0x5b,0x5b,0x5b,0x5b,0x5b,0x5a,0x59,0x58,0x57,0x55,0x52,0x50,0x4f,0x4d,0x4b,0x48,0x44,0x43,0x3e,0x3d,0x3a,0x36,0x35,0x32,0x2f,0x2a,0x27,0x26,0x22,0x1f,0x1e,0x1a,0x19,0x17,0x14,0x11,0x0e,0x0d,0x0c,0x09,0x06,0x04,0x04,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x02,0x03,0x04,0x06,0x09,0x0b,0x0c,0x10,0x13,0x15,0x17,0x18,0x1a,0x1d,0x20,0x23,0x25,0x29,0x2a,0x2d,0x31,0x32,0x34,0x38,0x3c,0x3e,0x3f,0x42,0x46,0x49,0x4a,0x4b,0x4c,0x4f,0x51,0x52,0x53,0x54,0x56,0x56,0x56,0x56,0x56,0x56,0x55,0x53,0x53,0x52,0x50,0x4d,0x4c,0x4b,0x4a,0x47,0x44,0x41,0x3f,0x3b,0x3a,0x38,0x34,0x31,0x2e,0x2c,0x29,0x26,0x25,0x21,0x1e,0x1d,0x19,0x18,0x16,0x13,0x0f,0x0d,0x0c,0x0b,0x08,0x05,0x04,0x03,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x02,0x03,0x03,0x06,0x09,0x0a,0x0b,0x0d,0x10,0x13,0x16,0x17,0x18,0x1a,0x1e,0x1f,0x22,0x25,0x29,0x29,0x2d,0x2e,0x31,0x34,0x38,0x39,0x3a,0x3e,0x41,0x44,0x45,0x46,0x46,0x4a,0x4c,0x4d,0x4e,0x4f,0x51,0x50,0x50,0x50,0x50,0x50,0x4f,0x4e,0x4e,0x4d,0x4b,0x48,0x47,0x46,0x45,0x43,0x40,0x3c,0x39,0x36,0x35,0x34,0x30,0x2e,0x2b,0x29,0x26,0x22,0x22,0x1f,0x1b,0x18,0x18,0x17,0x13,0x10,0x0d,0x0c,0x0b,0x08,0x05,0x04,0x03,0x03,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x02,0x02,0x04,0x07,0x08,0x08,0x0a,0x0c,0x0f,0x13,0x14,0x16,0x19,0x19,0x1e,0x1f,0x21,0x25,0x27,0x29,0x2b,0x30,0x32,0x34,0x36,0x37,0x39,0x3c,0x3f,0x40,0x41,0x41,0x45,0x47,0x48,0x48,0x48,0x49,0x4a,0x4b,0x4b,0x4b,0x4a,0x48,0x49,0x48,0x47,0x46,0x44,0x42,0x41,0x40,0x3d,0x3a,0x38,0x37,0x33,0x32,0x2f,0x2d,0x2b,0x29,0x26,0x23,0x1f,0x1f,0x1b,0x18,0x16,0x15,0x14,0x11,0x0d,0x0c,0x09,0x08,0x08,0x04,0x03,0x01,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x03,0x05,0x06,0x06,0x09,0x0b,0x0d,0x10,0x11,0x13,0x16,0x18,0x1c,0x1d,0x1c,0x20,0x24,0x26,0x27,0x29,0x2e,0x32,0x33,0x34,0x36,0x39,0x3a,0x3b,0x3c,0x3e,0x3f,0x41,0x41,0x42,0x43,0x44,0x44,0x44,0x44,0x44,0x44,0x43,0x42,0x42,0x41,0x40,0x3e,0x3c,0x3c,0x3b,0x39,0x36,0x35,0x34,0x30,0x2e,0x2c,0x29,0x27,0x26,0x23,0x20,0x1e,0x1d,0x18,0x16,0x13,0x12,0x11,0x10,0x0c,0x08,0x07,0x06,0x07,0x04,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x03,0x05,0x06,0x07,0x0b,0x0d,0x0e,0x0f,0x11,0x14,0x17,0x18,0x19,0x1b,0x1e,0x21,0x22,0x23,0x25,0x28,0x2c,0x2e,0x2f,0x31,0x34,0x35,0x36,0x37,0x39,0x3a,0x3b,0x3c,0x3d,0x3e,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3e,0x3d,0x3d,0x3c,0x3a,0x38,0x37,0x37,0x36,0x34,0x31,0x30,0x2f,0x2c,0x29,0x28,0x25,0x23,0x22,0x1f,0x1c,0x1a,0x19,0x18,0x15,0x12,0x10,0x0f,0x0e,0x0b,0x08,0x06,0x06,0x05,0x03,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x04,0x04,0x05,0x06,0x09,0x0c,0x0d,0x0e,0x10,0x13,0x16,0x17,0x18,0x1a,0x1d,0x20,0x20,0x21,0x24,0x26,0x29,0x2a,0x2b,0x2c,0x31,0x32,0x33,0x33,0x34,0x38,0x39,0x38,0x39,0x3a,0x3c,0x3b,0x3b,0x3b,0x3b,0x3c,0x3b,0x39,0x39,0x39,0x38,0x35,0x35,0x33,0x33,0x30,0x2d,0x2c,0x2b,0x2a,0x27,0x24,0x23,0x21,0x20,0x1e,0x1b,0x19,0x18,0x17,0x14,0x11,0x0f,0x0e,0x0d,0x09,0x07,0x06,0x05,0x03,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x02,0x03,0x03,0x05,0x06,0x09,0x0c,0x0d,0x0f,0x11,0x14,0x15,0x16,0x18,0x1a,0x1d,0x1c,0x1d,0x21,0x24,0x25,0x26,0x27,0x29,0x2c,0x2d,0x2e,0x2e,0x30,0x33,0x34,0x33,0x34,0x35,0x38,0x36,0x36,0x36,0x36,0x37,0x36,0x34,0x33,0x34,0x34,0x31,0x30,0x2e,0x2e,0x2c,0x28,0x27,0x27,0x26,0x23,0x20,0x1f,0x1d,0x1c,0x1b,0x18,0x17,0x16,0x15,0x12,0x0f,0x0e,0x0d,0x0b,0x08,0x05,0x04,0x03,0x04,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x04,0x05,0x06,0x09,0x09,0x0c,0x0c,0x0f,0x12,0x13,0x15,0x17,0x18,0x1a,0x1b,0x1e,0x21,0x22,0x23,0x24,0x26,0x28,0x28,0x2a,0x2b,0x2c,0x2e,0x2f,0x30,0x2f,0x31,0x32,0x31,0x32,0x32,0x32,0x32,0x31,0x31,0x30,0x2f,0x2e,0x2e,0x2b,0x2b,0x2a,0x2a,0x27,0x24,0x24,0x23,0x20,0x1d,0x1c,0x1b,0x1a,0x17,0x14,0x14,0x13,0x12,0x0f,0x0c,0x0b,0x09,0x08,0x06,0x04,0x02,0x01,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x02,0x04,0x05,0x06,0x07,0x08,0x09,0x0c,0x0f,0x10,0x11,0x13,0x16,0x18,0x17,0x19,0x1d,0x1f,0x20,0x20,0x21,0x22,0x24,0x27,0x28,0x27,0x29,0x2a,0x2a,0x2c,0x2c,0x2c,0x2e,0x2d,0x2c,0x2d,0x2c,0x2b,0x2d,0x2a,0x29,0x2b,0x2a,0x27,0x28,0x25,0x23,0x23,0x21,0x20,0x20,0x1d,0x1a,0x19,0x18,0x17,0x15,0x11,0x11,0x10,0x0e,0x0b,0x09,0x08,0x07,0x06,0x05,0x03,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x02,0x04,0x05,0x06,0x08,0x09,0x0a,0x0c,0x0d,0x10,0x11,0x13,0x14,0x15,0x16,0x19,0x1b,0x1c,0x1c,0x1d,0x1f,0x21,0x22,0x23,0x24,0x25,0x26,0x26,0x28,0x27,0x27,0x29,0x28,0x28,0x28,0x28,0x27,0x28,0x27,0x26,0x25,0x25,0x23,0x23,0x22,0x20,0x1e,0x1d,0x1c,0x1c,0x1a,0x17,0x16,0x15,0x14,0x12,0x0f,0x0e,0x0d,0x0c,0x09,0x07,0x06,0x06,0x04,0x02,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x03,0x05,0x05,0x07,0x08,0x0a,0x0b,0x0c,0x0d,0x0f,0x11,0x13,0x14,0x15,0x17,0x18,0x1a,0x1a,0x1c,0x1e,0x1f,0x20,0x20,0x22,0x23,0x24,0x24,0x24,0x24,0x26,0x25,0x25,0x26,0x25,0x26,0x25,0x24,0x25,0x24,0x22,0x21,0x21,0x20,0x20,0x1e,0x1c,0x1b,0x1a,0x1a,0x17,0x15,0x15,0x14,0x13,0x10,0x0e,0x0d,0x0c,0x0b,0x08,0x06,0x06,0x05,0x04,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x02,0x04,0x04,0x05,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x11,0x11,0x12,0x16,0x16,0x16,0x16,0x1a,0x1c,0x1c,0x1c,0x1c,0x1d,0x1f,0x1f,0x20,0x20,0x20,0x22,0x21,0x21,0x21,0x21,0x21,0x20,0x20,0x20,0x20,0x1f,0x1d,0x1d,0x1c,0x1c,0x1b,0x18,0x17,0x16,0x16,0x15,0x12,0x11,0x11,0x10,0x0e,0x0c,0x0c,0x0b,0x0a,0x08,0x05,0x04,0x04,0x03,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x02,0x02,0x03,0x04,0x06,0x08,0x08,0x0a,0x0c,0x0d,0x0d,0x0e,0x10,0x11,0x12,0x13,0x14,0x16,0x17,0x19,0x19,0x19,0x19,0x1b,0x1c,0x1d,0x1d,0x1d,0x1d,0x1e,0x1e,0x1e,0x1e,0x1e,0x1d,0x1d,0x1d,0x1d,0x1c,0x1b,0x19,0x19,0x19,0x18,0x15,0x15,0x14,0x13,0x12,0x10,0x0f,0x0e,0x0d,0x0c,0x0a,0x09,0x08,0x08,0x06,0x04,0x02,0x02,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x02,0x04,0x05,0x05,0x06,0x09,0x0a,0x0b,0x0b,0x0b,0x0e,0x0f,0x10,0x11,0x12,0x13,0x16,0x16,0x16,0x16,0x18,0x19,0x19,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1b,0x1a,0x1a,0x1a,0x19,0x19,0x18,0x16,0x16,0x16,0x15,0x12,0x12,0x11,0x11,0x10,0x0c,0x0c,0x0b,0x0a,0x09,0x07,0x06,0x05,0x05,0x03,0x02,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x02,0x03,0x03,0x04,0x04,0x06,0x08,0x08,0x09,0x09,0x0b,0x0c,0x0e,0x0e,0x0f,0x11,0x12,0x12,0x13,0x14,0x14,0x15,0x15,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x15,0x15,0x14,0x13,0x13,0x12,0x11,0x0f,0x0f,0x0e,0x0e,0x0c,0x0a,0x09,0x09,0x08,0x07,0x05,0x04,0x04,0x03,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x02,0x03,0x04,0x06,0x07,0x07,0x08,0x08,0x0a,0x0c,0x0c,0x0d,0x0d,0x0f,0x10,0x11,0x11,0x11,0x13,0x14,0x14,0x14,0x14,0x15,0x15,0x15,0x15,0x15,0x15,0x14,0x14,0x14,0x14,0x13,0x12,0x11,0x11,0x10,0x0f,0x0e,0x0d,0x0d,0x0c,0x0b,0x09,0x08,0x08,0x07,0x06,0x04,0x03,0x03,0x02,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x02,0x02,0x03,0x04,0x04,0x07,0x07,0x07,0x09,0x0a,0x09,0x0b,0x0c,0x0d,0x0c,0x0d,0x0d,0x0e,0x11,0x11,0x11,0x11,0x11,0x11,0x12,0x12,0x12,0x12,0x12,0x11,0x11,0x11,0x11,0x10,0x0f,0x0d,0x0e,0x0e,0x0b,0x0b,0x0c,0x0b,0x08,0x0a,0x09,0x07,0x07,0x05,0x05,0x03,0x02,0x02,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x03,0x03,0x04,0x04,0x05,0x07,0x08,0x06,0x08,0x09,0x0a,0x0b,0x0a,0x0a,0x0c,0x0c,0x0d,0x0e,0x0e,0x0e,0x0e,0x0f,0x0f,0x0f,0x0f,0x0f,0x0e,0x0e,0x0e,0x0e,0x0d,0x0c,0x0b,0x0b,0x0c,0x0a,0x09,0x09,0x07,0x05,0x08,0x06,0x05,0x04,0x02,0x02,0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x02,0x01,0x01,0x02,0x03,0x04,0x05,0x05,0x05,0x06,0x08,0x07,0x07,0x09,0x09,0x0a,0x0a,0x0a,0x0a,0x0b,0x0b,0x0b,0x0b,0x0b,0x0b,0x0a,0x0a,0x0a,0x0a,0x0a,0x09,0x08,0x07,0x09,0x08,0x06,0x06,0x05,0x04,0x03,0x02,0x02,0x01,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x01,0x01,0x03,0x03,0x03,0x04,0x04,0x06,0x06,0x06,0x06,0x07,0x08,0x08,0x08,0x08,0x09,0x09,0x09,0x09,0x09,0x09,0x08,0x08,0x08,0x08,0x08,0x07,0x06,0x06,0x06,0x05,0x04,0x04,0x03,0x03,0x02,0x01,0x01,0x01,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x02,0x02,0x02,0x03,0x03,0x05,0x05,0x05,0x05,0x06,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x06,0x05,0x05,0x05,0x04,0x03,0x03,0x02,0x02,0x02,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x02,0x02,0x02,0x02,0x02,0x04,0x04,0x04,0x04,0x06,0x06,0x05,0x05,0x05,0x05,0x05,0x05,0x05,0x05,0x05,0x05,0x05,0x06,0x03,0x04,0x04,0x04,0x03,0x04,0x02,0x02,0x02,0x02,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x01,0x00,0x02,0x02,0x02,0x01,0x03,0x03,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x03,0x02,0x00,0x02,0x02,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 +}; + +unsigned char data120[14400] = { +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x01,0x00,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x02,0x02,0x00,0x02,0x03,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x03,0x02,0x01,0x02,0x02,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x01,0x01,0x02,0x03,0x03,0x03,0x03,0x03,0x03,0x04,0x05,0x05,0x05,0x05,0x05,0x05,0x05,0x05,0x05,0x05,0x05,0x05,0x05,0x05,0x05,0x05,0x05,0x04,0x04,0x03,0x03,0x03,0x03,0x02,0x02,0x01,0x01,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x02,0x02,0x02,0x02,0x02,0x03,0x04,0x04,0x04,0x04,0x05,0x05,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x05,0x05,0x04,0x04,0x04,0x04,0x03,0x02,0x02,0x02,0x02,0x02,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x02,0x02,0x02,0x02,0x03,0x03,0x04,0x05,0x05,0x05,0x05,0x06,0x06,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x06,0x06,0x05,0x05,0x05,0x05,0x03,0x03,0x03,0x02,0x02,0x02,0x01,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x01,0x01,0x02,0x03,0x03,0x03,0x04,0x04,0x05,0x06,0x06,0x07,0x07,0x07,0x09,0x08,0x08,0x08,0x08,0x09,0x09,0x09,0x09,0x09,0x09,0x09,0x08,0x08,0x08,0x08,0x08,0x09,0x07,0x07,0x08,0x06,0x06,0x06,0x04,0x04,0x04,0x03,0x03,0x03,0x01,0x01,0x01,0x01,0x01,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x01,0x03,0x04,0x05,0x05,0x06,0x06,0x07,0x07,0x07,0x09,0x09,0x0a,0x0a,0x09,0x0c,0x0a,0x0b,0x0b,0x0b,0x0c,0x0b,0x0c,0x0c,0x0c,0x0c,0x0b,0x0b,0x0b,0x0b,0x0b,0x0b,0x0c,0x0a,0x09,0x0b,0x09,0x09,0x09,0x07,0x07,0x07,0x06,0x06,0x05,0x04,0x03,0x03,0x01,0x02,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x01,0x02,0x01,0x03,0x03,0x03,0x05,0x06,0x07,0x07,0x08,0x08,0x09,0x09,0x0a,0x0b,0x0a,0x0a,0x0c,0x0b,0x0c,0x0c,0x0d,0x0d,0x0d,0x0e,0x0d,0x0e,0x0e,0x0e,0x0e,0x0d,0x0e,0x0d,0x0d,0x0d,0x0d,0x0c,0x0c,0x0b,0x0c,0x0a,0x0a,0x0c,0x0a,0x09,0x09,0x08,0x07,0x07,0x07,0x05,0x05,0x03,0x03,0x01,0x02,0x01,0x01,0x01,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x02,0x02,0x03,0x04,0x05,0x06,0x06,0x06,0x07,0x09,0x08,0x0a,0x0a,0x0b,0x0b,0x0d,0x0e,0x0c,0x0c,0x0f,0x0e,0x0f,0x0f,0x10,0x10,0x10,0x11,0x10,0x11,0x11,0x11,0x11,0x11,0x11,0x10,0x10,0x10,0x10,0x0f,0x0f,0x0d,0x0e,0x0c,0x0c,0x0e,0x0c,0x0b,0x0b,0x0a,0x09,0x08,0x08,0x07,0x06,0x06,0x05,0x04,0x03,0x02,0x02,0x02,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x02,0x02,0x03,0x04,0x06,0x06,0x07,0x07,0x07,0x08,0x0a,0x0b,0x0b,0x0c,0x0c,0x0d,0x0f,0x0f,0x10,0x10,0x10,0x11,0x12,0x12,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x12,0x11,0x11,0x10,0x10,0x10,0x0f,0x0d,0x0c,0x0c,0x0c,0x0b,0x0b,0x09,0x08,0x07,0x07,0x07,0x06,0x04,0x03,0x03,0x02,0x02,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x02,0x02,0x03,0x03,0x05,0x06,0x07,0x07,0x08,0x08,0x09,0x0b,0x0c,0x0c,0x0d,0x0d,0x0f,0x10,0x11,0x11,0x11,0x11,0x13,0x13,0x14,0x14,0x14,0x14,0x14,0x15,0x15,0x15,0x15,0x15,0x15,0x14,0x14,0x14,0x14,0x14,0x14,0x12,0x12,0x11,0x11,0x11,0x11,0x0f,0x0e,0x0d,0x0d,0x0c,0x0c,0x0a,0x09,0x08,0x08,0x07,0x06,0x05,0x04,0x03,0x03,0x02,0x02,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x02,0x03,0x03,0x04,0x04,0x06,0x07,0x08,0x08,0x09,0x0b,0x0a,0x0d,0x0e,0x0f,0x0f,0x11,0x11,0x12,0x13,0x14,0x15,0x14,0x16,0x16,0x17,0x17,0x17,0x17,0x16,0x17,0x18,0x18,0x18,0x18,0x18,0x17,0x17,0x17,0x17,0x17,0x17,0x15,0x15,0x14,0x15,0x14,0x12,0x11,0x10,0x11,0x0f,0x0f,0x0e,0x0d,0x0a,0x0b,0x09,0x08,0x08,0x07,0x05,0x04,0x04,0x03,0x02,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x03,0x05,0x06,0x05,0x06,0x09,0x09,0x09,0x0b,0x0b,0x0c,0x0d,0x0f,0x10,0x12,0x12,0x13,0x14,0x15,0x16,0x17,0x17,0x17,0x18,0x18,0x1a,0x1a,0x1a,0x1a,0x19,0x1a,0x1b,0x1b,0x1b,0x1b,0x1b,0x1a,0x1a,0x1a,0x1a,0x1a,0x19,0x18,0x18,0x17,0x17,0x17,0x15,0x13,0x13,0x13,0x12,0x12,0x10,0x0e,0x0d,0x0d,0x0a,0x0a,0x09,0x0a,0x07,0x06,0x05,0x06,0x05,0x03,0x02,0x01,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x02,0x03,0x03,0x03,0x05,0x07,0x08,0x07,0x09,0x0b,0x0b,0x0b,0x0d,0x0e,0x0f,0x12,0x11,0x12,0x13,0x14,0x14,0x16,0x18,0x18,0x19,0x18,0x19,0x1b,0x1b,0x1c,0x1c,0x1c,0x1c,0x1c,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1a,0x1a,0x19,0x18,0x19,0x18,0x17,0x15,0x14,0x14,0x13,0x12,0x10,0x0f,0x0f,0x0e,0x0c,0x0b,0x0c,0x09,0x09,0x07,0x08,0x07,0x05,0x04,0x02,0x03,0x02,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x02,0x03,0x03,0x04,0x06,0x08,0x09,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,0x11,0x12,0x13,0x14,0x16,0x15,0x17,0x18,0x1a,0x1b,0x1b,0x1c,0x1b,0x1c,0x1e,0x1e,0x1f,0x1f,0x1f,0x1f,0x1f,0x20,0x20,0x20,0x20,0x20,0x20,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1e,0x1d,0x1c,0x1b,0x1c,0x1b,0x19,0x18,0x17,0x17,0x15,0x15,0x13,0x12,0x12,0x11,0x0f,0x0e,0x0e,0x0a,0x0b,0x0a,0x09,0x07,0x06,0x05,0x04,0x03,0x03,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x03,0x04,0x04,0x05,0x07,0x09,0x0a,0x0a,0x0b,0x0c,0x0d,0x11,0x11,0x12,0x13,0x13,0x16,0x17,0x18,0x19,0x19,0x1a,0x1c,0x1d,0x1e,0x1e,0x1f,0x1f,0x20,0x21,0x22,0x22,0x23,0x23,0x23,0x24,0x24,0x24,0x24,0x24,0x24,0x23,0x23,0x23,0x23,0x22,0x22,0x21,0x20,0x1f,0x1f,0x1e,0x1e,0x1b,0x1a,0x1a,0x19,0x19,0x18,0x16,0x14,0x13,0x13,0x12,0x11,0x0f,0x0c,0x0c,0x0b,0x0a,0x09,0x07,0x06,0x05,0x04,0x04,0x02,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x02,0x04,0x05,0x05,0x06,0x08,0x08,0x0a,0x0b,0x0c,0x0d,0x0f,0x10,0x13,0x13,0x14,0x15,0x17,0x17,0x19,0x1a,0x1b,0x1c,0x1d,0x1f,0x1f,0x20,0x20,0x21,0x23,0x23,0x24,0x24,0x25,0x25,0x25,0x26,0x26,0x26,0x26,0x26,0x26,0x25,0x25,0x25,0x25,0x24,0x23,0x22,0x21,0x21,0x20,0x20,0x1f,0x1d,0x1c,0x1c,0x1b,0x1a,0x18,0x16,0x15,0x15,0x14,0x13,0x12,0x10,0x0e,0x0d,0x0c,0x0b,0x09,0x07,0x06,0x06,0x05,0x05,0x02,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x02,0x04,0x05,0x05,0x06,0x07,0x09,0x0a,0x0c,0x0e,0x0f,0x0f,0x12,0x13,0x13,0x15,0x16,0x18,0x19,0x1a,0x1c,0x1d,0x1e,0x1f,0x20,0x21,0x23,0x23,0x25,0x25,0x25,0x27,0x28,0x27,0x27,0x2a,0x2a,0x28,0x2a,0x2b,0x2b,0x29,0x27,0x29,0x2a,0x2a,0x27,0x27,0x28,0x26,0x25,0x25,0x25,0x23,0x20,0x21,0x20,0x1f,0x1e,0x1d,0x1c,0x1a,0x18,0x18,0x16,0x15,0x13,0x13,0x10,0x10,0x0f,0x0d,0x0b,0x09,0x07,0x06,0x06,0x05,0x04,0x02,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x02,0x03,0x05,0x06,0x06,0x08,0x09,0x0a,0x0d,0x0f,0x11,0x12,0x12,0x12,0x16,0x18,0x18,0x19,0x1a,0x1b,0x1d,0x1f,0x20,0x21,0x22,0x22,0x25,0x27,0x26,0x28,0x28,0x28,0x2a,0x2b,0x2c,0x2c,0x2d,0x2d,0x2c,0x2d,0x2e,0x2e,0x2e,0x2d,0x2d,0x2d,0x2d,0x2c,0x2c,0x2b,0x2a,0x28,0x28,0x28,0x26,0x25,0x24,0x23,0x22,0x21,0x20,0x1f,0x1d,0x1b,0x1a,0x19,0x18,0x17,0x14,0x12,0x13,0x12,0x0f,0x0e,0x0c,0x0a,0x09,0x08,0x06,0x05,0x05,0x03,0x02,0x01,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x02,0x02,0x04,0x05,0x05,0x07,0x08,0x0a,0x0b,0x0c,0x0d,0x11,0x13,0x14,0x16,0x16,0x16,0x19,0x1a,0x1b,0x1c,0x1f,0x21,0x22,0x22,0x23,0x25,0x27,0x28,0x29,0x29,0x2a,0x2a,0x2d,0x2e,0x2e,0x2f,0x30,0x30,0x30,0x30,0x31,0x31,0x31,0x31,0x32,0x30,0x30,0x30,0x2f,0x2f,0x2f,0x2d,0x2b,0x2a,0x2a,0x2a,0x29,0x26,0x25,0x24,0x23,0x22,0x21,0x1f,0x1d,0x1b,0x1b,0x1a,0x18,0x16,0x14,0x15,0x14,0x12,0x10,0x0c,0x0c,0x0b,0x0a,0x08,0x07,0x05,0x04,0x04,0x02,0x02,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x08,0x0a,0x0b,0x0c,0x0d,0x0f,0x10,0x12,0x14,0x15,0x16,0x19,0x1a,0x1b,0x1d,0x1e,0x1f,0x22,0x24,0x25,0x25,0x26,0x28,0x2b,0x2b,0x2c,0x2c,0x2d,0x30,0x32,0x33,0x32,0x33,0x33,0x35,0x34,0x35,0x36,0x34,0x34,0x35,0x36,0x35,0x34,0x35,0x32,0x32,0x33,0x32,0x2f,0x2e,0x2d,0x2d,0x2d,0x2a,0x28,0x27,0x26,0x25,0x24,0x22,0x20,0x1e,0x1e,0x1d,0x1b,0x19,0x17,0x16,0x15,0x14,0x11,0x0f,0x0e,0x0d,0x0c,0x09,0x08,0x07,0x05,0x05,0x04,0x03,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x03,0x04,0x04,0x05,0x06,0x08,0x0b,0x0c,0x0d,0x0e,0x11,0x13,0x15,0x16,0x17,0x18,0x19,0x1c,0x1e,0x1f,0x20,0x21,0x24,0x26,0x28,0x29,0x2a,0x2b,0x2c,0x2e,0x31,0x32,0x32,0x33,0x34,0x36,0x37,0x37,0x38,0x38,0x39,0x3a,0x3a,0x39,0x39,0x3a,0x3a,0x3a,0x38,0x38,0x37,0x37,0x37,0x35,0x34,0x33,0x32,0x31,0x30,0x2e,0x2b,0x2a,0x2a,0x29,0x27,0x25,0x22,0x21,0x20,0x1f,0x1d,0x1b,0x18,0x18,0x17,0x16,0x14,0x12,0x0f,0x0e,0x0d,0x0c,0x0a,0x08,0x06,0x05,0x04,0x04,0x03,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x03,0x04,0x04,0x05,0x06,0x08,0x0a,0x0c,0x0d,0x0e,0x0f,0x12,0x14,0x16,0x17,0x18,0x19,0x1c,0x1e,0x20,0x21,0x22,0x23,0x26,0x28,0x2a,0x2b,0x2c,0x2d,0x30,0x32,0x33,0x34,0x35,0x35,0x37,0x39,0x39,0x3a,0x3a,0x3a,0x3c,0x3c,0x3c,0x3c,0x3c,0x3c,0x3c,0x3b,0x3b,0x3a,0x3a,0x3a,0x39,0x38,0x36,0x35,0x35,0x34,0x33,0x31,0x2e,0x2d,0x2c,0x2b,0x29,0x27,0x24,0x23,0x22,0x21,0x1f,0x1d,0x1a,0x19,0x18,0x17,0x15,0x13,0x10,0x0f,0x0e,0x0d,0x0b,0x08,0x07,0x06,0x05,0x04,0x02,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x03,0x04,0x05,0x06,0x08,0x0a,0x0b,0x0d,0x0e,0x0f,0x10,0x13,0x15,0x17,0x18,0x19,0x1b,0x1d,0x1f,0x22,0x24,0x25,0x25,0x28,0x2c,0x2f,0x30,0x31,0x32,0x35,0x37,0x36,0x37,0x38,0x3a,0x3b,0x3c,0x3d,0x3e,0x3e,0x3f,0x3f,0x40,0x41,0x41,0x41,0x41,0x41,0x40,0x3f,0x3f,0x3e,0x3e,0x3d,0x3c,0x3a,0x3a,0x38,0x35,0x37,0x36,0x33,0x32,0x31,0x2e,0x2a,0x28,0x27,0x26,0x25,0x24,0x21,0x1e,0x1c,0x1b,0x19,0x19,0x16,0x14,0x11,0x10,0x0f,0x0e,0x0c,0x0a,0x07,0x07,0x06,0x05,0x04,0x02,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x02,0x04,0x06,0x07,0x08,0x0a,0x0b,0x0b,0x0e,0x11,0x12,0x13,0x16,0x18,0x1a,0x1b,0x1c,0x1f,0x20,0x22,0x25,0x27,0x28,0x29,0x2d,0x2f,0x32,0x33,0x34,0x35,0x38,0x3a,0x3b,0x3c,0x3d,0x3e,0x3e,0x40,0x42,0x42,0x43,0x43,0x44,0x45,0x46,0x45,0x45,0x45,0x46,0x45,0x44,0x43,0x43,0x42,0x42,0x3f,0x3f,0x3e,0x3d,0x3b,0x3a,0x39,0x36,0x35,0x34,0x31,0x2e,0x2d,0x2a,0x29,0x28,0x27,0x25,0x20,0x1f,0x1e,0x1c,0x1a,0x18,0x17,0x14,0x13,0x12,0x10,0x0d,0x0a,0x0a,0x09,0x08,0x06,0x05,0x03,0x01,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x02,0x04,0x06,0x08,0x09,0x08,0x09,0x0c,0x0d,0x10,0x13,0x14,0x15,0x18,0x19,0x1a,0x1e,0x1e,0x20,0x23,0x25,0x28,0x29,0x2a,0x2e,0x31,0x32,0x33,0x35,0x36,0x37,0x3a,0x3c,0x3e,0x3f,0x40,0x41,0x43,0x45,0x47,0x47,0x47,0x48,0x48,0x4a,0x4a,0x4a,0x4a,0x4a,0x4a,0x49,0x48,0x48,0x47,0x47,0x47,0x44,0x43,0x41,0x40,0x40,0x3e,0x3b,0x38,0x37,0x36,0x33,0x31,0x32,0x2f,0x2b,0x2a,0x29,0x26,0x24,0x22,0x1f,0x1e,0x1b,0x19,0x18,0x16,0x15,0x14,0x12,0x0d,0x0c,0x0c,0x09,0x08,0x08,0x05,0x03,0x03,0x02,0x01,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x02,0x03,0x05,0x07,0x09,0x0a,0x0a,0x0b,0x0e,0x10,0x13,0x15,0x16,0x17,0x19,0x1a,0x1d,0x20,0x20,0x23,0x26,0x28,0x2b,0x2c,0x2d,0x2f,0x33,0x35,0x37,0x38,0x39,0x3b,0x3e,0x40,0x42,0x43,0x44,0x45,0x48,0x4a,0x4a,0x4c,0x4c,0x4d,0x4d,0x4e,0x4e,0x4f,0x4f,0x4f,0x4e,0x4d,0x4d,0x4d,0x4c,0x4c,0x4a,0x4a,0x48,0x45,0x44,0x43,0x42,0x3f,0x3b,0x3a,0x39,0x36,0x34,0x35,0x32,0x2e,0x2d,0x2c,0x29,0x27,0x25,0x21,0x20,0x20,0x1d,0x19,0x18,0x17,0x16,0x13,0x0f,0x0f,0x0d,0x0b,0x0a,0x0a,0x07,0x05,0x04,0x03,0x02,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x02,0x03,0x03,0x06,0x08,0x09,0x0a,0x0b,0x0e,0x11,0x13,0x14,0x16,0x17,0x18,0x1b,0x1e,0x21,0x22,0x23,0x25,0x28,0x2a,0x2d,0x2f,0x31,0x32,0x35,0x38,0x3b,0x3d,0x3e,0x40,0x44,0x45,0x47,0x48,0x49,0x4a,0x4d,0x4f,0x4f,0x51,0x51,0x52,0x52,0x53,0x53,0x54,0x54,0x54,0x53,0x52,0x52,0x52,0x51,0x50,0x4f,0x4e,0x4b,0x4a,0x49,0x48,0x46,0x44,0x40,0x3e,0x3e,0x3b,0x39,0x37,0x34,0x32,0x31,0x2d,0x2b,0x29,0x26,0x25,0x23,0x21,0x1e,0x1e,0x1b,0x18,0x17,0x16,0x13,0x11,0x0e,0x0c,0x0b,0x0a,0x09,0x07,0x04,0x03,0x03,0x02,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x02,0x02,0x03,0x04,0x05,0x07,0x0a,0x0b,0x0c,0x0f,0x12,0x14,0x15,0x17,0x18,0x19,0x1d,0x1e,0x20,0x23,0x25,0x28,0x2a,0x2b,0x2e,0x31,0x33,0x35,0x38,0x3a,0x3d,0x3f,0x40,0x43,0x46,0x48,0x4a,0x4b,0x4c,0x4d,0x50,0x52,0x54,0x54,0x54,0x55,0x56,0x57,0x58,0x57,0x57,0x57,0x58,0x57,0x55,0x55,0x54,0x54,0x53,0x50,0x4e,0x4d,0x4c,0x4b,0x48,0x46,0x44,0x42,0x40,0x3d,0x3b,0x3a,0x37,0x34,0x33,0x30,0x2d,0x2b,0x28,0x26,0x25,0x23,0x20,0x1e,0x1c,0x19,0x18,0x17,0x14,0x12,0x0f,0x0d,0x0c,0x0b,0x09,0x07,0x05,0x04,0x03,0x02,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x03,0x04,0x04,0x07,0x0a,0x0b,0x0c,0x0e,0x10,0x13,0x15,0x16,0x18,0x19,0x1c,0x1f,0x1f,0x23,0x26,0x26,0x29,0x2c,0x2f,0x32,0x35,0x36,0x3a,0x3d,0x3f,0x42,0x42,0x45,0x46,0x49,0x4b,0x4d,0x4f,0x50,0x52,0x55,0x57,0x59,0x59,0x5a,0x5b,0x5c,0x5d,0x5d,0x5d,0x5d,0x5d,0x5d,0x5d,0x5b,0x5b,0x5a,0x59,0x58,0x56,0x53,0x52,0x50,0x4e,0x4c,0x4a,0x47,0x47,0x45,0x40,0x3e,0x3e,0x3b,0x38,0x36,0x35,0x31,0x2e,0x2a,0x28,0x26,0x24,0x22,0x1f,0x1d,0x1a,0x19,0x18,0x16,0x14,0x11,0x0f,0x0e,0x0c,0x0b,0x08,0x05,0x04,0x04,0x02,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x03,0x04,0x05,0x05,0x08,0x0b,0x0c,0x0d,0x10,0x11,0x12,0x15,0x19,0x1a,0x1c,0x1d,0x1f,0x23,0x26,0x27,0x29,0x2c,0x2f,0x32,0x35,0x38,0x39,0x3d,0x40,0x42,0x45,0x47,0x49,0x4a,0x4d,0x4f,0x52,0x54,0x55,0x57,0x5a,0x5c,0x5e,0x5e,0x5f,0x60,0x62,0x62,0x61,0x61,0x61,0x61,0x62,0x62,0x60,0x60,0x5f,0x5e,0x5d,0x5b,0x58,0x57,0x55,0x54,0x51,0x4f,0x4c,0x4a,0x49,0x45,0x43,0x41,0x3e,0x3b,0x39,0x37,0x34,0x31,0x2d,0x2b,0x29,0x27,0x25,0x22,0x1e,0x1d,0x1c,0x1a,0x19,0x15,0x12,0x11,0x10,0x0d,0x0c,0x0a,0x06,0x05,0x05,0x02,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x02,0x04,0x06,0x07,0x07,0x0a,0x0b,0x0c,0x10,0x10,0x13,0x14,0x16,0x1a,0x1c,0x1e,0x1f,0x22,0x26,0x26,0x2a,0x2c,0x2f,0x32,0x34,0x37,0x3b,0x3c,0x3f,0x42,0x44,0x47,0x4a,0x4c,0x4f,0x53,0x55,0x58,0x5a,0x5b,0x5d,0x60,0x62,0x64,0x64,0x65,0x66,0x67,0x68,0x68,0x67,0x67,0x67,0x68,0x68,0x66,0x66,0x65,0x64,0x63,0x61,0x5e,0x5d,0x5b,0x58,0x55,0x54,0x51,0x4d,0x4c,0x49,0x46,0x43,0x40,0x3d,0x3c,0x39,0x36,0x34,0x32,0x2d,0x2c,0x29,0x27,0x25,0x20,0x1f,0x1e,0x1c,0x19,0x15,0x14,0x11,0x10,0x0d,0x0c,0x0a,0x08,0x07,0x07,0x06,0x03,0x02,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x03,0x05,0x06,0x07,0x08,0x0b,0x0d,0x0f,0x11,0x13,0x14,0x17,0x17,0x1b,0x1e,0x20,0x22,0x25,0x28,0x2b,0x2d,0x2f,0x32,0x35,0x37,0x3a,0x3e,0x3f,0x42,0x45,0x47,0x4a,0x4d,0x50,0x54,0x57,0x59,0x5c,0x5e,0x5f,0x62,0x65,0x67,0x68,0x68,0x69,0x6a,0x6b,0x6c,0x6d,0x6d,0x6d,0x6d,0x6d,0x6c,0x6b,0x6a,0x69,0x68,0x67,0x65,0x62,0x60,0x5f,0x5e,0x5b,0x58,0x55,0x51,0x50,0x4d,0x4a,0x46,0x43,0x40,0x3f,0x3c,0x39,0x37,0x35,0x30,0x2f,0x2c,0x29,0x26,0x23,0x21,0x20,0x1e,0x1a,0x18,0x16,0x13,0x12,0x10,0x0d,0x0a,0x09,0x08,0x07,0x05,0x04,0x03,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x03,0x06,0x07,0x08,0x08,0x0b,0x0d,0x0f,0x12,0x13,0x15,0x18,0x1a,0x1d,0x1f,0x21,0x24,0x27,0x29,0x2c,0x2f,0x31,0x35,0x38,0x3b,0x3e,0x41,0x43,0x46,0x49,0x4c,0x4f,0x52,0x55,0x59,0x5c,0x5e,0x61,0x63,0x64,0x67,0x6a,0x6c,0x6d,0x6e,0x6f,0x6f,0x71,0x72,0x73,0x73,0x73,0x73,0x73,0x72,0x70,0x6f,0x6f,0x6e,0x6d,0x6b,0x68,0x65,0x64,0x62,0x5f,0x5d,0x5a,0x56,0x55,0x51,0x4e,0x4c,0x48,0x45,0x43,0x3f,0x3c,0x3a,0x37,0x33,0x31,0x2e,0x2b,0x28,0x25,0x22,0x21,0x1f,0x1c,0x19,0x16,0x14,0x13,0x12,0x0f,0x0c,0x0b,0x08,0x08,0x07,0x04,0x03,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x03,0x06,0x07,0x08,0x09,0x0a,0x0e,0x11,0x13,0x14,0x16,0x19,0x1b,0x1e,0x20,0x22,0x25,0x28,0x2a,0x2d,0x31,0x33,0x37,0x3a,0x3c,0x3f,0x43,0x45,0x49,0x4c,0x4e,0x51,0x55,0x57,0x5b,0x5e,0x60,0x63,0x66,0x68,0x6a,0x6d,0x70,0x72,0x72,0x73,0x74,0x76,0x77,0x77,0x78,0x78,0x78,0x77,0x76,0x75,0x74,0x73,0x72,0x71,0x6f,0x6c,0x69,0x68,0x65,0x62,0x60,0x5d,0x59,0x57,0x53,0x50,0x4e,0x4c,0x47,0x44,0x41,0x3e,0x3c,0x39,0x34,0x33,0x2f,0x2c,0x2a,0x27,0x23,0x22,0x1e,0x1c,0x1a,0x17,0x15,0x14,0x12,0x0f,0x0d,0x0a,0x09,0x08,0x07,0x06,0x03,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x03,0x06,0x07,0x08,0x08,0x09,0x0b,0x10,0x13,0x13,0x15,0x17,0x1a,0x1d,0x1f,0x21,0x23,0x26,0x29,0x2e,0x30,0x32,0x35,0x3a,0x3d,0x3f,0x42,0x46,0x49,0x4e,0x51,0x53,0x54,0x59,0x5c,0x60,0x63,0x65,0x68,0x6b,0x6d,0x6f,0x72,0x75,0x76,0x78,0x79,0x7a,0x7c,0x7d,0x7d,0x7e,0x7e,0x7e,0x7d,0x7d,0x7b,0x7a,0x79,0x77,0x75,0x75,0x72,0x6e,0x6d,0x69,0x67,0x64,0x60,0x5d,0x5c,0x58,0x53,0x51,0x50,0x4b,0x48,0x44,0x41,0x3f,0x3c,0x37,0x35,0x32,0x2f,0x2c,0x28,0x26,0x23,0x20,0x1d,0x1b,0x19,0x16,0x15,0x12,0x11,0x0e,0x0b,0x09,0x08,0x08,0x07,0x03,0x02,0x01,0x01,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x03,0x05,0x07,0x08,0x09,0x0a,0x0e,0x11,0x12,0x15,0x17,0x19,0x1b,0x1e,0x21,0x24,0x26,0x29,0x2c,0x31,0x33,0x35,0x38,0x3d,0x40,0x42,0x45,0x49,0x4c,0x51,0x54,0x56,0x5c,0x5f,0x60,0x64,0x67,0x6a,0x6d,0x70,0x72,0x74,0x78,0x79,0x7b,0x7e,0x7f,0x80,0x81,0x83,0x84,0x84,0x84,0x84,0x84,0x82,0x7f,0x80,0x7f,0x7d,0x7a,0x79,0x76,0x73,0x72,0x6f,0x6c,0x69,0x66,0x62,0x60,0x5c,0x58,0x55,0x50,0x4e,0x4b,0x47,0x44,0x42,0x3f,0x3a,0x38,0x35,0x32,0x2f,0x2b,0x29,0x26,0x24,0x20,0x1c,0x1a,0x18,0x17,0x14,0x11,0x0f,0x0d,0x0a,0x09,0x08,0x07,0x05,0x02,0x01,0x01,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x01,0x01,0x02,0x02,0x03,0x06,0x09,0x0a,0x0b,0x0c,0x10,0x11,0x13,0x17,0x18,0x1b,0x1d,0x20,0x23,0x26,0x28,0x2a,0x2e,0x31,0x35,0x38,0x3a,0x3f,0x42,0x44,0x47,0x4c,0x4e,0x53,0x56,0x5a,0x5e,0x61,0x64,0x69,0x6c,0x6e,0x73,0x76,0x77,0x7a,0x7e,0x7f,0x82,0x84,0x85,0x87,0x89,0x8a,0x8a,0x8a,0x8a,0x8a,0x8a,0x89,0x87,0x86,0x85,0x84,0x81,0x7e,0x7b,0x79,0x77,0x74,0x70,0x6f,0x6c,0x66,0x64,0x5f,0x5c,0x59,0x53,0x50,0x4e,0x49,0x46,0x44,0x41,0x3c,0x3a,0x37,0x34,0x31,0x2d,0x2b,0x28,0x25,0x22,0x1f,0x1c,0x1a,0x17,0x15,0x11,0x11,0x0f,0x0b,0x0b,0x0a,0x08,0x06,0x03,0x02,0x02,0x01,0x01,0x00,0x00,0x00, +0x00,0x00,0x00,0x01,0x01,0x01,0x02,0x03,0x06,0x08,0x0a,0x0b,0x0c,0x0e,0x11,0x13,0x16,0x18,0x19,0x1c,0x1f,0x22,0x25,0x28,0x2a,0x2d,0x30,0x34,0x37,0x3b,0x3d,0x40,0x45,0x47,0x4a,0x4f,0x51,0x56,0x5a,0x5d,0x60,0x65,0x69,0x6e,0x71,0x73,0x77,0x79,0x7b,0x7f,0x82,0x84,0x87,0x89,0x8c,0x8d,0x8e,0x90,0x91,0x91,0x91,0x91,0x91,0x8f,0x8e,0x8d,0x8c,0x89,0x86,0x84,0x81,0x7d,0x7b,0x78,0x75,0x73,0x70,0x6b,0x68,0x63,0x60,0x5e,0x59,0x53,0x51,0x4d,0x49,0x47,0x44,0x3f,0x3d,0x39,0x36,0x32,0x2e,0x2c,0x2a,0x26,0x23,0x21,0x1e,0x1b,0x19,0x16,0x14,0x12,0x0f,0x0d,0x0c,0x0b,0x09,0x07,0x04,0x03,0x02,0x01,0x01,0x00,0x00,0x00, +0x00,0x00,0x00,0x01,0x01,0x02,0x02,0x03,0x06,0x08,0x0a,0x0b,0x0c,0x0e,0x11,0x13,0x15,0x19,0x1a,0x1d,0x20,0x22,0x25,0x29,0x2b,0x30,0x33,0x35,0x38,0x3d,0x3f,0x42,0x47,0x4a,0x4e,0x53,0x55,0x59,0x5e,0x62,0x65,0x6a,0x6d,0x72,0x75,0x77,0x7a,0x7e,0x80,0x85,0x87,0x8a,0x8d,0x8f,0x92,0x93,0x94,0x96,0x97,0x97,0x97,0x97,0x97,0x96,0x93,0x93,0x92,0x8f,0x8c,0x8a,0x87,0x82,0x80,0x7c,0x79,0x77,0x74,0x6f,0x6d,0x69,0x65,0x61,0x5c,0x58,0x55,0x51,0x4d,0x49,0x45,0x41,0x3f,0x3a,0x37,0x35,0x31,0x2d,0x2b,0x27,0x24,0x22,0x1f,0x1c,0x1a,0x17,0x14,0x13,0x11,0x0e,0x0c,0x0b,0x09,0x07,0x04,0x03,0x02,0x02,0x01,0x00,0x00,0x00, +0x00,0x00,0x00,0x01,0x01,0x02,0x03,0x03,0x06,0x08,0x0a,0x0c,0x0d,0x0f,0x12,0x14,0x17,0x19,0x1b,0x1e,0x21,0x23,0x26,0x2a,0x2c,0x31,0x34,0x36,0x39,0x3e,0x40,0x45,0x49,0x4c,0x51,0x55,0x57,0x5b,0x60,0x65,0x69,0x6d,0x6f,0x73,0x77,0x7a,0x7e,0x82,0x85,0x8a,0x8d,0x8f,0x92,0x95,0x97,0x98,0x9a,0x9c,0x9c,0x9b,0x9b,0x9c,0x9c,0x9a,0x99,0x98,0x97,0x94,0x91,0x8f,0x8c,0x87,0x85,0x80,0x7c,0x79,0x75,0x71,0x6f,0x6b,0x67,0x63,0x5e,0x5a,0x57,0x52,0x4e,0x4b,0x47,0x43,0x3f,0x3b,0x38,0x36,0x33,0x2e,0x2c,0x28,0x25,0x22,0x1f,0x1c,0x1b,0x17,0x15,0x13,0x10,0x0e,0x0d,0x0c,0x09,0x07,0x04,0x03,0x03,0x02,0x01,0x00,0x00,0x00, +0x00,0x00,0x00,0x01,0x01,0x02,0x03,0x04,0x07,0x09,0x0b,0x0c,0x0d,0x0f,0x12,0x15,0x18,0x1a,0x1c,0x1f,0x22,0x24,0x27,0x2a,0x2e,0x32,0x35,0x37,0x3b,0x40,0x42,0x47,0x4a,0x4f,0x54,0x59,0x5b,0x60,0x63,0x68,0x6e,0x72,0x72,0x78,0x7c,0x7f,0x84,0x88,0x8b,0x90,0x93,0x95,0x98,0x9b,0x9d,0x9e,0x9f,0xa2,0xa3,0xa2,0xa2,0xa3,0xa3,0xa0,0x9f,0x9e,0x9d,0x9a,0x97,0x95,0x92,0x8d,0x8b,0x87,0x82,0x7e,0x79,0x76,0x72,0x6f,0x6b,0x67,0x62,0x5e,0x5b,0x56,0x52,0x4e,0x49,0x44,0x42,0x3e,0x3a,0x37,0x34,0x30,0x2d,0x2a,0x27,0x23,0x20,0x1d,0x1c,0x19,0x16,0x14,0x11,0x0f,0x0d,0x0c,0x0a,0x08,0x05,0x04,0x03,0x02,0x01,0x00,0x00,0x00, +0x00,0x00,0x00,0x02,0x02,0x02,0x03,0x05,0x07,0x09,0x0b,0x0d,0x0f,0x10,0x14,0x17,0x19,0x1c,0x1d,0x21,0x24,0x26,0x29,0x2c,0x30,0x35,0x38,0x3a,0x3e,0x43,0x45,0x49,0x4d,0x52,0x57,0x5c,0x5e,0x63,0x66,0x6b,0x71,0x75,0x77,0x7b,0x80,0x84,0x89,0x8e,0x90,0x93,0x99,0x9c,0x9d,0xa1,0xa3,0xa4,0xa5,0xa7,0xa9,0xa9,0xa9,0xa9,0xa9,0xa7,0xa6,0xa4,0xa3,0xa0,0x9b,0x9a,0x97,0x92,0x90,0x8c,0x87,0x82,0x7e,0x7a,0x77,0x73,0x6f,0x6a,0x65,0x60,0x5e,0x59,0x55,0x51,0x4d,0x47,0x43,0x41,0x3d,0x3a,0x37,0x33,0x30,0x2b,0x29,0x25,0x21,0x1e,0x1d,0x1b,0x18,0x15,0x12,0x10,0x0e,0x0d,0x0b,0x07,0x05,0x04,0x03,0x02,0x02,0x00,0x00,0x00, +0x00,0x00,0x00,0x02,0x03,0x03,0x04,0x06,0x07,0x0a,0x0d,0x0f,0x10,0x12,0x15,0x18,0x1b,0x1d,0x1f,0x21,0x25,0x28,0x2b,0x2e,0x30,0x37,0x3a,0x3c,0x40,0x45,0x47,0x4c,0x4f,0x54,0x59,0x5e,0x60,0x65,0x6a,0x6f,0x74,0x77,0x7b,0x80,0x84,0x8a,0x8f,0x93,0x96,0x99,0x9d,0xa1,0xa4,0xa7,0xa9,0xab,0xaf,0xaf,0xb0,0xb0,0xb1,0xb0,0xb0,0xae,0xad,0xaa,0xa9,0xa6,0xa1,0x9f,0x9c,0x97,0x96,0x91,0x8d,0x87,0x82,0x7d,0x7a,0x75,0x71,0x6c,0x67,0x63,0x60,0x5b,0x57,0x53,0x4c,0x4a,0x47,0x43,0x3f,0x3c,0x39,0x34,0x30,0x2d,0x29,0x27,0x23,0x1f,0x1f,0x1c,0x19,0x17,0x14,0x12,0x10,0x0c,0x0a,0x09,0x07,0x05,0x04,0x03,0x02,0x00,0x00,0x00, +0x00,0x00,0x00,0x01,0x03,0x04,0x05,0x06,0x09,0x0b,0x0e,0x0f,0x10,0x13,0x16,0x18,0x1b,0x1e,0x1f,0x22,0x26,0x29,0x2c,0x31,0x33,0x37,0x3b,0x3e,0x42,0x47,0x4a,0x4d,0x52,0x57,0x5c,0x61,0x63,0x67,0x6d,0x72,0x77,0x7a,0x7e,0x83,0x8a,0x8f,0x93,0x97,0x9a,0xa0,0xa4,0xa5,0xa8,0xad,0xb0,0xb2,0xb5,0xb6,0xb7,0xb6,0xb7,0xb6,0xb7,0xb4,0xb2,0xb1,0xb0,0xad,0xa7,0xa5,0xa3,0x9d,0x9a,0x95,0x91,0x8c,0x87,0x81,0x7d,0x78,0x74,0x70,0x6b,0x66,0x63,0x5e,0x5a,0x54,0x4f,0x4c,0x4a,0x45,0x41,0x3e,0x3a,0x35,0x32,0x2e,0x2a,0x29,0x24,0x21,0x1f,0x1d,0x1a,0x18,0x15,0x12,0x10,0x0d,0x0b,0x0a,0x07,0x06,0x05,0x04,0x01,0x00,0x00,0x00, +0x00,0x00,0x00,0x02,0x03,0x04,0x05,0x06,0x09,0x0a,0x0c,0x10,0x11,0x14,0x17,0x19,0x1c,0x1e,0x20,0x23,0x26,0x29,0x2d,0x32,0x34,0x37,0x3c,0x3f,0x43,0x48,0x4b,0x50,0x54,0x59,0x5e,0x63,0x66,0x6b,0x70,0x76,0x7a,0x7e,0x81,0x88,0x8e,0x93,0x97,0x9c,0x9f,0xa4,0xa9,0xab,0xae,0xb3,0xb6,0xb8,0xba,0xbd,0xbe,0xbd,0xbe,0xbd,0xbe,0xbb,0xb8,0xb7,0xb6,0xb1,0xad,0xab,0xa6,0xa2,0x9f,0x9a,0x95,0x91,0x8c,0x86,0x82,0x7d,0x79,0x73,0x6e,0x69,0x65,0x60,0x5d,0x57,0x52,0x4d,0x4b,0x46,0x42,0x3e,0x3a,0x36,0x34,0x2f,0x2c,0x29,0x26,0x22,0x20,0x1d,0x1a,0x18,0x15,0x12,0x11,0x0e,0x0b,0x09,0x07,0x06,0x05,0x04,0x03,0x01,0x00,0x00, +0x00,0x00,0x00,0x02,0x03,0x04,0x05,0x06,0x0a,0x0b,0x0c,0x10,0x11,0x15,0x17,0x18,0x1b,0x1f,0x20,0x25,0x28,0x2a,0x2d,0x32,0x35,0x38,0x3d,0x40,0x44,0x49,0x4c,0x51,0x56,0x5b,0x5f,0x64,0x68,0x6d,0x72,0x78,0x7b,0x81,0x85,0x8b,0x90,0x96,0x9a,0x9f,0xa2,0xa7,0xac,0xaf,0xb3,0xb8,0xba,0xbd,0xc1,0xc2,0xc3,0xc3,0xc3,0xc3,0xc3,0xc1,0xbf,0xbc,0xba,0xb6,0xb3,0xaf,0xa9,0xa5,0xa1,0x9c,0x99,0x93,0x8e,0x89,0x84,0x7e,0x7a,0x75,0x70,0x6a,0x67,0x62,0x5d,0x59,0x54,0x4f,0x4c,0x47,0x43,0x3f,0x3b,0x37,0x35,0x30,0x2c,0x2a,0x26,0x22,0x20,0x1d,0x1a,0x18,0x15,0x13,0x11,0x0e,0x0b,0x09,0x07,0x06,0x05,0x04,0x03,0x01,0x00,0x00, +0x00,0x00,0x00,0x01,0x03,0x04,0x05,0x08,0x0b,0x0c,0x0e,0x10,0x11,0x14,0x17,0x19,0x1c,0x1f,0x21,0x25,0x28,0x2b,0x2f,0x33,0x35,0x3a,0x3e,0x42,0x47,0x4a,0x4d,0x52,0x57,0x5d,0x62,0x66,0x69,0x6f,0x74,0x7a,0x7f,0x85,0x8a,0x90,0x95,0x9b,0x9f,0xa4,0xa7,0xad,0xb2,0xb5,0xb9,0xbe,0xc0,0xc4,0xc7,0xc8,0xc9,0xc9,0xc9,0xc9,0xc9,0xc8,0xc6,0xc2,0xc0,0xbd,0xb8,0xb4,0xaf,0xaa,0xa6,0xa1,0x9e,0x98,0x93,0x8e,0x88,0x82,0x7e,0x78,0x73,0x6d,0x69,0x65,0x60,0x5a,0x55,0x51,0x4d,0x48,0x44,0x40,0x3b,0x37,0x35,0x32,0x2e,0x2a,0x26,0x23,0x21,0x1e,0x1b,0x18,0x16,0x13,0x11,0x0e,0x0c,0x0b,0x08,0x06,0x05,0x04,0x03,0x01,0x00,0x00, +0x00,0x00,0x00,0x03,0x04,0x05,0x06,0x07,0x08,0x0b,0x0e,0x11,0x13,0x16,0x18,0x1b,0x1e,0x20,0x23,0x26,0x29,0x2c,0x31,0x34,0x37,0x3b,0x40,0x43,0x48,0x4d,0x50,0x55,0x5a,0x5e,0x65,0x69,0x6c,0x73,0x77,0x7c,0x82,0x88,0x8d,0x93,0x99,0x9f,0xa3,0xa8,0xac,0xb2,0xb7,0xbc,0xc0,0xc4,0xc6,0xca,0xcd,0xcf,0xd1,0xd1,0xd1,0xd1,0xd1,0xcf,0xcc,0xc8,0xc6,0xc1,0xbd,0xb9,0xb4,0xaf,0xab,0xa6,0xa2,0x9c,0x96,0x90,0x8b,0x85,0x81,0x7b,0x76,0x70,0x6c,0x68,0x63,0x5d,0x58,0x52,0x50,0x4b,0x45,0x42,0x3e,0x39,0x37,0x33,0x2f,0x2b,0x29,0x24,0x23,0x1e,0x1b,0x19,0x16,0x13,0x13,0x11,0x0e,0x0a,0x08,0x07,0x06,0x05,0x02,0x00,0x00,0x00, +0x00,0x00,0x01,0x03,0x04,0x05,0x06,0x08,0x0a,0x0c,0x0f,0x12,0x13,0x16,0x18,0x1b,0x1e,0x21,0x23,0x27,0x2a,0x2e,0x33,0x36,0x39,0x3d,0x42,0x45,0x49,0x4f,0x52,0x57,0x5c,0x62,0x67,0x6c,0x6f,0x74,0x79,0x7f,0x84,0x8a,0x8f,0x95,0x9b,0xa1,0xa6,0xab,0xb1,0xb6,0xbb,0xc1,0xc6,0xca,0xcd,0xd0,0xd3,0xd7,0xd9,0xd9,0xd9,0xd9,0xd9,0xd5,0xd2,0xce,0xcc,0xc7,0xc3,0xbf,0xb9,0xb4,0xae,0xa9,0xa5,0x9f,0x99,0x93,0x8d,0x87,0x83,0x7d,0x78,0x73,0x6f,0x6a,0x65,0x5f,0x5a,0x54,0x50,0x4d,0x48,0x44,0x3f,0x3b,0x38,0x33,0x30,0x2d,0x2a,0x26,0x23,0x20,0x1d,0x1b,0x18,0x15,0x13,0x11,0x0e,0x0b,0x09,0x07,0x06,0x05,0x02,0x01,0x00,0x00, +0x00,0x00,0x00,0x02,0x05,0x06,0x07,0x09,0x0b,0x0c,0x0f,0x12,0x14,0x17,0x1a,0x1c,0x1f,0x22,0x24,0x26,0x2b,0x2e,0x32,0x37,0x39,0x3d,0x42,0x47,0x4a,0x4f,0x53,0x59,0x5e,0x64,0x68,0x6e,0x71,0x75,0x7b,0x83,0x87,0x8d,0x92,0x98,0x9e,0xa5,0xaa,0xae,0xb3,0xba,0xbf,0xc5,0xca,0xcf,0xd2,0xd7,0xda,0xdd,0xde,0xde,0xe0,0xde,0xde,0xdb,0xd8,0xd4,0xd1,0xcc,0xc8,0xc3,0xbd,0xb6,0xb2,0xad,0xa8,0xa2,0x9c,0x96,0x90,0x8a,0x86,0x80,0x7a,0x74,0x70,0x6b,0x67,0x61,0x5c,0x57,0x51,0x4d,0x49,0x45,0x40,0x3c,0x39,0x34,0x31,0x2d,0x29,0x26,0x24,0x20,0x1d,0x1b,0x18,0x15,0x14,0x11,0x0e,0x0c,0x0a,0x08,0x07,0x06,0x04,0x02,0x00,0x00, +0x00,0x00,0x01,0x02,0x05,0x06,0x07,0x08,0x0b,0x0d,0x10,0x13,0x14,0x17,0x1a,0x1c,0x1f,0x22,0x24,0x27,0x2b,0x2f,0x33,0x37,0x3a,0x3e,0x42,0x47,0x4c,0x51,0x54,0x59,0x5e,0x64,0x68,0x6e,0x72,0x78,0x7e,0x84,0x89,0x8f,0x95,0x9b,0xa1,0xa7,0xad,0xb3,0xb8,0xbe,0xc3,0xc9,0xcf,0xd4,0xd7,0xdd,0xe1,0xe3,0xe4,0xe4,0xe6,0xe4,0xe3,0xe2,0xdf,0xda,0xd7,0xd2,0xcd,0xc7,0xc2,0xbc,0xb6,0xb0,0xab,0xa5,0x9f,0x99,0x93,0x8d,0x87,0x81,0x7b,0x75,0x71,0x6c,0x67,0x61,0x5c,0x56,0x53,0x4e,0x4a,0x45,0x40,0x3c,0x39,0x34,0x31,0x2e,0x29,0x26,0x24,0x21,0x1e,0x1b,0x18,0x15,0x14,0x12,0x0f,0x0c,0x09,0x08,0x07,0x06,0x04,0x02,0x01,0x00, +0x00,0x00,0x01,0x02,0x05,0x06,0x07,0x08,0x0b,0x0d,0x10,0x13,0x14,0x17,0x1a,0x1c,0x1f,0x23,0x25,0x28,0x2c,0x30,0x33,0x38,0x3a,0x3e,0x43,0x47,0x4c,0x51,0x54,0x5a,0x5f,0x65,0x69,0x6f,0x73,0x79,0x7f,0x85,0x8b,0x91,0x96,0x9d,0xa3,0xa9,0xae,0xb4,0xba,0xc0,0xc5,0xcc,0xd2,0xd8,0xdc,0xe1,0xe5,0xe7,0xea,0xea,0xea,0xea,0xe8,0xe6,0xe4,0xdf,0xdb,0xd6,0xd0,0xc9,0xc5,0xbe,0xb8,0xb2,0xac,0xa6,0xa0,0x9a,0x95,0x8e,0x88,0x82,0x7c,0x76,0x72,0x6c,0x68,0x62,0x5d,0x57,0x54,0x4f,0x4a,0x45,0x41,0x3d,0x3a,0x35,0x31,0x2e,0x2b,0x27,0x25,0x21,0x1e,0x1c,0x19,0x16,0x14,0x12,0x0f,0x0c,0x09,0x08,0x07,0x06,0x03,0x01,0x01,0x00, +0x00,0x00,0x01,0x02,0x05,0x06,0x07,0x08,0x0b,0x0d,0x10,0x13,0x14,0x17,0x1a,0x1c,0x1f,0x23,0x25,0x2a,0x2d,0x30,0x35,0x38,0x3a,0x3f,0x43,0x48,0x4d,0x52,0x55,0x5b,0x60,0x66,0x6a,0x70,0x74,0x7a,0x80,0x86,0x8c,0x93,0x99,0x9f,0xa4,0xaa,0xb2,0xb8,0xbd,0xc2,0xca,0xd1,0xd7,0xdd,0xe1,0xe6,0xea,0xec,0xef,0xf0,0xf0,0xf0,0xee,0xeb,0xe7,0xe3,0xe0,0xda,0xd5,0xcd,0xc7,0xc0,0xba,0xb5,0xb0,0xa8,0xa2,0x9d,0x96,0x8f,0x8b,0x83,0x7e,0x78,0x73,0x6d,0x69,0x63,0x5e,0x58,0x54,0x4f,0x4b,0x46,0x41,0x3d,0x3a,0x36,0x32,0x2f,0x2b,0x27,0x25,0x21,0x1e,0x1c,0x19,0x16,0x14,0x12,0x0f,0x0c,0x09,0x08,0x07,0x06,0x03,0x01,0x01,0x00, +0x00,0x00,0x01,0x02,0x05,0x06,0x07,0x08,0x0b,0x0e,0x11,0x13,0x14,0x17,0x1a,0x1c,0x21,0x23,0x25,0x2a,0x2d,0x30,0x34,0x39,0x3c,0x3f,0x45,0x48,0x4d,0x52,0x55,0x5c,0x62,0x67,0x6b,0x71,0x75,0x7b,0x81,0x88,0x8d,0x94,0x9b,0xa1,0xa7,0xad,0xb6,0xbb,0xc0,0xc5,0xcd,0xd4,0xda,0xe0,0xe4,0xe9,0xed,0xf1,0xf4,0xf5,0xf5,0xf5,0xf3,0xf0,0xea,0xe6,0xe4,0xdf,0xd8,0xd0,0xc8,0xc2,0xbe,0xb8,0xb3,0xaa,0xa3,0x9f,0x99,0x92,0x8d,0x86,0x80,0x7a,0x75,0x6e,0x6a,0x64,0x5f,0x59,0x55,0x51,0x4b,0x46,0x43,0x3d,0x3c,0x38,0x34,0x2f,0x2a,0x27,0x25,0x21,0x1e,0x1c,0x19,0x16,0x14,0x12,0x0f,0x0c,0x09,0x08,0x07,0x06,0x03,0x01,0x01,0x00, +0x00,0x00,0x01,0x02,0x05,0x06,0x07,0x09,0x0b,0x0d,0x10,0x13,0x15,0x18,0x1b,0x1d,0x21,0x24,0x26,0x27,0x2d,0x31,0x35,0x3a,0x3c,0x40,0x45,0x4a,0x4e,0x53,0x57,0x5d,0x62,0x68,0x6c,0x71,0x77,0x7d,0x83,0x89,0x90,0x96,0x9a,0xa1,0xa8,0xaf,0xb5,0xbd,0xc2,0xc7,0xcf,0xd7,0xdc,0xe2,0xe7,0xec,0xf0,0xf5,0xf9,0xfb,0xfc,0xfa,0xf6,0xf3,0xef,0xea,0xe6,0xe1,0xdb,0xd3,0xcd,0xc7,0xc1,0xba,0xb4,0xac,0xa5,0x9e,0x9b,0x94,0x8d,0x85,0x80,0x7a,0x75,0x70,0x6b,0x65,0x60,0x5b,0x56,0x51,0x4c,0x48,0x43,0x3e,0x3c,0x38,0x34,0x30,0x2b,0x27,0x26,0x22,0x1f,0x1c,0x19,0x16,0x15,0x12,0x0f,0x0d,0x0a,0x09,0x07,0x06,0x03,0x01,0x01,0x00, +0x00,0x00,0x01,0x02,0x05,0x06,0x07,0x09,0x0c,0x0e,0x11,0x13,0x15,0x18,0x1b,0x1d,0x20,0x24,0x26,0x29,0x2e,0x31,0x36,0x3a,0x3c,0x41,0x46,0x4a,0x4e,0x53,0x58,0x5d,0x61,0x67,0x6d,0x73,0x78,0x7e,0x84,0x8a,0x91,0x97,0x9b,0xa2,0xa9,0xb0,0xb6,0xbd,0xc3,0xc9,0xd0,0xd8,0xdf,0xe5,0xe9,0xef,0xf4,0xf9,0xfd,0xfe,0xfe,0xfe,0xfa,0xf6,0xf2,0xed,0xe8,0xe3,0xdc,0xd6,0xcd,0xc7,0xc3,0xbb,0xb4,0xad,0xa6,0x9f,0x9b,0x95,0x8e,0x86,0x81,0x7b,0x76,0x70,0x6b,0x65,0x60,0x5b,0x56,0x51,0x4c,0x48,0x43,0x3f,0x3c,0x37,0x33,0x30,0x2d,0x28,0x25,0x22,0x1f,0x1c,0x19,0x16,0x15,0x13,0x10,0x0d,0x0a,0x09,0x07,0x06,0x03,0x01,0x01,0x00, +0x00,0x00,0x01,0x02,0x05,0x06,0x07,0x09,0x0c,0x0e,0x11,0x13,0x15,0x18,0x1b,0x1d,0x20,0x24,0x26,0x2b,0x2e,0x31,0x34,0x39,0x3c,0x41,0x45,0x4a,0x4f,0x54,0x57,0x5d,0x61,0x67,0x6d,0x73,0x78,0x7e,0x84,0x8a,0x91,0x97,0x9b,0xa2,0xaa,0xb1,0xb6,0xbc,0xc3,0xc9,0xd1,0xd9,0xe0,0xe6,0xea,0xf0,0xf5,0xfb,0xfd,0xfe,0xfe,0xfe,0xfc,0xf8,0xf3,0xed,0xe9,0xe3,0xdd,0xd6,0xcd,0xc6,0xc0,0xba,0xb4,0xad,0xa6,0x9f,0x9b,0x95,0x8e,0x87,0x81,0x7b,0x76,0x70,0x6b,0x65,0x60,0x5b,0x56,0x51,0x4d,0x48,0x43,0x3f,0x3c,0x37,0x33,0x30,0x2c,0x28,0x26,0x22,0x1f,0x1c,0x19,0x16,0x15,0x13,0x10,0x0d,0x0a,0x09,0x07,0x06,0x03,0x01,0x01,0x00, +0x00,0x00,0x01,0x02,0x05,0x06,0x07,0x09,0x0c,0x0e,0x11,0x13,0x15,0x18,0x1b,0x1d,0x20,0x24,0x26,0x2b,0x2e,0x31,0x34,0x39,0x3c,0x41,0x45,0x4a,0x4f,0x54,0x57,0x5d,0x61,0x67,0x6d,0x73,0x78,0x7e,0x84,0x8a,0x91,0x97,0x9b,0xa2,0xa9,0xb1,0xb8,0xbe,0xc2,0xc9,0xd1,0xd9,0xe0,0xe6,0xea,0xf0,0xf5,0xfb,0xfe,0xfe,0xff,0xfe,0xfc,0xf8,0xf3,0xee,0xe9,0xe3,0xdd,0xd5,0xcd,0xc6,0xc0,0xba,0xb5,0xae,0xa6,0x9f,0x9b,0x95,0x8e,0x87,0x81,0x7b,0x76,0x70,0x6b,0x65,0x60,0x5b,0x56,0x51,0x4d,0x48,0x43,0x3f,0x3c,0x37,0x33,0x30,0x2b,0x28,0x26,0x22,0x1f,0x1c,0x19,0x16,0x15,0x13,0x10,0x0d,0x0a,0x09,0x07,0x06,0x03,0x01,0x01,0x00, +0x00,0x00,0x01,0x02,0x05,0x06,0x07,0x09,0x0c,0x0e,0x11,0x13,0x15,0x18,0x1b,0x1d,0x20,0x24,0x26,0x29,0x2e,0x32,0x35,0x3a,0x3c,0x41,0x45,0x4a,0x4f,0x54,0x57,0x5d,0x61,0x67,0x6d,0x73,0x78,0x7e,0x84,0x8a,0x91,0x97,0x9b,0xa2,0xaa,0xb1,0xb6,0xbc,0xc3,0xc9,0xd1,0xd9,0xe0,0xe6,0xea,0xf0,0xf5,0xfb,0xfd,0xfe,0xfe,0xfe,0xfc,0xf8,0xf3,0xee,0xe8,0xe2,0xdc,0xd6,0xcd,0xc6,0xc1,0xba,0xb3,0xad,0xa7,0xa0,0x9b,0x95,0x8e,0x87,0x81,0x7b,0x76,0x70,0x6b,0x65,0x60,0x5b,0x56,0x51,0x4d,0x48,0x43,0x3f,0x3c,0x37,0x33,0x30,0x2c,0x28,0x26,0x22,0x1f,0x1c,0x19,0x16,0x15,0x13,0x10,0x0d,0x0a,0x09,0x07,0x06,0x03,0x01,0x01,0x00, +0x00,0x00,0x01,0x02,0x05,0x06,0x07,0x0a,0x0b,0x0d,0x10,0x13,0x15,0x18,0x1b,0x1d,0x20,0x24,0x26,0x27,0x2d,0x31,0x36,0x3a,0x3c,0x41,0x46,0x4a,0x4e,0x53,0x58,0x5d,0x62,0x68,0x6d,0x72,0x78,0x7e,0x83,0x89,0x91,0x97,0x9b,0xa1,0xa9,0xb0,0xb5,0xbd,0xc3,0xc9,0xd0,0xd7,0xdf,0xe5,0xe8,0xed,0xf3,0xf8,0xfb,0xfc,0xfc,0xfc,0xf8,0xf5,0xf0,0xeb,0xe7,0xe2,0xdc,0xd6,0xcd,0xc6,0xc2,0xbb,0xb3,0xac,0xa6,0x9f,0x9b,0x95,0x8d,0x86,0x81,0x7b,0x76,0x70,0x6a,0x64,0x60,0x5b,0x56,0x51,0x4c,0x48,0x43,0x3f,0x3c,0x37,0x34,0x30,0x2b,0x28,0x25,0x23,0x1f,0x1c,0x19,0x16,0x15,0x13,0x10,0x0d,0x0a,0x09,0x07,0x06,0x03,0x01,0x01,0x00, +0x00,0x00,0x01,0x02,0x05,0x06,0x07,0x08,0x0b,0x0e,0x11,0x13,0x14,0x16,0x19,0x1c,0x20,0x23,0x25,0x2a,0x2d,0x30,0x35,0x3a,0x3b,0x40,0x45,0x4a,0x4d,0x52,0x57,0x5d,0x62,0x68,0x6c,0x71,0x76,0x7c,0x82,0x88,0x90,0x95,0x9b,0xa2,0xa7,0xae,0xb6,0xbc,0xc0,0xc7,0xce,0xd5,0xdb,0xe1,0xe6,0xeb,0xf0,0xf4,0xf7,0xf8,0xf8,0xf7,0xf5,0xf2,0xed,0xe9,0xe5,0xe1,0xda,0xd2,0xcb,0xc5,0xbf,0xb9,0xb4,0xab,0xa6,0x9f,0x99,0x93,0x8b,0x85,0x80,0x79,0x74,0x70,0x6b,0x65,0x60,0x5a,0x55,0x50,0x4b,0x48,0x42,0x3e,0x3b,0x38,0x34,0x2f,0x2a,0x27,0x26,0x23,0x1e,0x1c,0x19,0x16,0x14,0x12,0x0f,0x0d,0x0a,0x08,0x07,0x06,0x03,0x01,0x01,0x00, +0x00,0x00,0x01,0x02,0x05,0x06,0x07,0x08,0x0b,0x0d,0x10,0x13,0x14,0x17,0x1a,0x1c,0x1f,0x23,0x25,0x2a,0x2d,0x30,0x34,0x38,0x3b,0x3f,0x44,0x48,0x4d,0x52,0x55,0x5b,0x60,0x66,0x6b,0x70,0x75,0x7b,0x81,0x87,0x8d,0x93,0x99,0x9f,0xa5,0xad,0xb4,0xb9,0xbc,0xc4,0xcb,0xd2,0xd7,0xde,0xe3,0xe8,0xec,0xef,0xf2,0xf3,0xf4,0xf3,0xf2,0xef,0xea,0xe5,0xe2,0xde,0xd7,0xcf,0xc8,0xc2,0xbb,0xb6,0xb1,0xa9,0xa4,0x9d,0x98,0x90,0x8b,0x84,0x7e,0x78,0x73,0x6e,0x6a,0x63,0x5e,0x58,0x55,0x50,0x4b,0x46,0x42,0x3d,0x3b,0x37,0x33,0x2f,0x2a,0x27,0x25,0x21,0x1e,0x1c,0x19,0x16,0x14,0x12,0x0f,0x0c,0x09,0x08,0x07,0x06,0x03,0x01,0x01,0x00, +0x00,0x00,0x01,0x02,0x05,0x06,0x07,0x08,0x0b,0x0d,0x10,0x13,0x14,0x17,0x1a,0x1c,0x1f,0x23,0x25,0x2a,0x2d,0x30,0x34,0x38,0x3a,0x3f,0x43,0x48,0x4d,0x52,0x55,0x5b,0x60,0x66,0x6a,0x6f,0x74,0x7a,0x80,0x86,0x8c,0x93,0x98,0x9e,0xa4,0xaa,0xb0,0xb6,0xbc,0xc2,0xc7,0xce,0xd5,0xda,0xde,0xe3,0xe7,0xe9,0xed,0xee,0xee,0xee,0xeb,0xea,0xe6,0xe1,0xde,0xd9,0xd2,0xcb,0xc6,0xc0,0xb9,0xb3,0xae,0xa8,0xa2,0x9c,0x95,0x8f,0x8a,0x83,0x7d,0x77,0x73,0x6d,0x69,0x63,0x5e,0x58,0x54,0x4f,0x4b,0x46,0x41,0x3d,0x3a,0x35,0x32,0x2f,0x2c,0x27,0x25,0x21,0x1e,0x1c,0x19,0x16,0x14,0x12,0x0f,0x0c,0x09,0x08,0x07,0x06,0x03,0x01,0x01,0x00, +0x00,0x00,0x01,0x02,0x05,0x06,0x07,0x08,0x0b,0x0d,0x10,0x13,0x14,0x17,0x1a,0x1c,0x1f,0x23,0x25,0x27,0x2c,0x2f,0x32,0x37,0x3a,0x3e,0x43,0x47,0x4c,0x51,0x54,0x5a,0x5f,0x65,0x69,0x6f,0x73,0x79,0x7f,0x85,0x8a,0x90,0x97,0x9d,0xa3,0xa9,0xae,0xb4,0xba,0xc0,0xc5,0xcb,0xd1,0xd7,0xdb,0xe0,0xe3,0xe5,0xe8,0xe8,0xea,0xe8,0xe7,0xe5,0xe2,0xde,0xdb,0xd4,0xcf,0xc9,0xc4,0xbe,0xb8,0xb2,0xac,0xa6,0xa0,0x9a,0x95,0x8e,0x88,0x82,0x7c,0x76,0x72,0x6c,0x68,0x62,0x5d,0x57,0x54,0x4f,0x4a,0x45,0x41,0x3d,0x3a,0x35,0x31,0x2e,0x29,0x27,0x25,0x21,0x1e,0x1c,0x19,0x16,0x14,0x12,0x0f,0x0c,0x09,0x08,0x07,0x06,0x03,0x01,0x01,0x00, +0x00,0x00,0x01,0x02,0x05,0x06,0x07,0x08,0x0b,0x0d,0x10,0x13,0x14,0x17,0x1a,0x1c,0x1f,0x22,0x24,0x27,0x2c,0x2f,0x32,0x37,0x3a,0x3e,0x42,0x47,0x4b,0x50,0x54,0x59,0x5e,0x64,0x68,0x6e,0x72,0x78,0x7e,0x83,0x89,0x8f,0x94,0x9a,0xa0,0xa6,0xab,0xb1,0xb7,0xbd,0xc2,0xc8,0xcc,0xd2,0xd6,0xda,0xdd,0xdf,0xe2,0xe2,0xe4,0xe2,0xe1,0xdf,0xdd,0xd8,0xd5,0xcf,0xcb,0xc5,0xc0,0xba,0xb4,0xaf,0xa9,0xa3,0x9d,0x97,0x93,0x8c,0x85,0x80,0x7b,0x75,0x71,0x6c,0x67,0x61,0x5c,0x56,0x53,0x4e,0x4a,0x45,0x40,0x3c,0x39,0x35,0x31,0x2d,0x28,0x26,0x24,0x21,0x1e,0x1b,0x18,0x15,0x14,0x12,0x0f,0x0b,0x09,0x08,0x07,0x06,0x04,0x02,0x01,0x00, +0x00,0x00,0x00,0x02,0x05,0x06,0x07,0x09,0x0c,0x0e,0x0f,0x12,0x14,0x17,0x18,0x1c,0x1f,0x22,0x23,0x27,0x2b,0x2e,0x33,0x37,0x39,0x3d,0x42,0x47,0x4a,0x4f,0x52,0x58,0x5d,0x63,0x67,0x6d,0x72,0x76,0x7a,0x80,0x86,0x8c,0x91,0x97,0x9d,0xa3,0xa7,0xad,0xb3,0xb8,0xbe,0xc4,0xc8,0xcc,0xd0,0xd5,0xd8,0xda,0xdc,0xdc,0xdd,0xdc,0xdc,0xd9,0xd7,0xd2,0xcf,0xcb,0xc7,0xc1,0xbb,0xb5,0xb1,0xac,0xa6,0xa0,0x9a,0x94,0x90,0x8a,0x83,0x7e,0x7a,0x75,0x70,0x6b,0x66,0x60,0x5b,0x55,0x51,0x4d,0x49,0x45,0x3f,0x3a,0x39,0x36,0x31,0x2c,0x2a,0x26,0x23,0x20,0x1d,0x1b,0x18,0x15,0x14,0x12,0x0e,0x0a,0x09,0x08,0x07,0x04,0x02,0x02,0x00,0x00, +0x00,0x00,0x01,0x03,0x04,0x05,0x06,0x07,0x09,0x0d,0x0f,0x11,0x12,0x15,0x18,0x1a,0x1d,0x21,0x22,0x26,0x2a,0x2e,0x32,0x35,0x38,0x3b,0x40,0x45,0x49,0x4d,0x50,0x56,0x5b,0x61,0x65,0x6b,0x70,0x74,0x78,0x7e,0x84,0x8a,0x8f,0x95,0x9a,0xa0,0xa5,0xaa,0xae,0xb4,0xb8,0xbe,0xc3,0xc7,0xca,0xce,0xcf,0xd3,0xd6,0xd6,0xd6,0xd6,0xd6,0xd2,0xcd,0xcb,0xc9,0xc5,0xc1,0xbc,0xb7,0xb1,0xad,0xa8,0xa3,0x9e,0x98,0x92,0x8d,0x87,0x82,0x7a,0x77,0x72,0x6f,0x69,0x63,0x5e,0x59,0x53,0x4f,0x4c,0x47,0x43,0x3e,0x39,0x37,0x33,0x30,0x2d,0x2a,0x24,0x22,0x20,0x1d,0x1b,0x18,0x15,0x12,0x11,0x0f,0x0b,0x08,0x07,0x06,0x04,0x01,0x01,0x00,0x00, +0x00,0x00,0x00,0x02,0x04,0x05,0x06,0x07,0x09,0x0b,0x0e,0x11,0x12,0x15,0x18,0x1a,0x1d,0x20,0x21,0x26,0x29,0x2b,0x2f,0x34,0x36,0x3a,0x3f,0x43,0x47,0x4b,0x4e,0x53,0x58,0x5e,0x62,0x68,0x6d,0x72,0x76,0x7b,0x81,0x87,0x8c,0x92,0x98,0x9e,0xa2,0xa6,0xa9,0xaf,0xb3,0xb9,0xbe,0xc1,0xc3,0xc7,0xc9,0xcd,0xcd,0xcd,0xcf,0xcd,0xcd,0xcd,0xc8,0xc4,0xc2,0xbd,0xbc,0xb7,0xb2,0xac,0xa9,0xa4,0x9f,0x9b,0x95,0x8f,0x8a,0x84,0x7f,0x79,0x74,0x6f,0x6c,0x66,0x60,0x5b,0x56,0x51,0x4e,0x49,0x44,0x41,0x3d,0x38,0x36,0x33,0x2e,0x2b,0x28,0x23,0x21,0x1e,0x1b,0x19,0x16,0x13,0x12,0x0f,0x0c,0x0a,0x08,0x07,0x06,0x05,0x02,0x00,0x00,0x00, +0x00,0x00,0x00,0x01,0x03,0x04,0x05,0x08,0x0b,0x0c,0x0e,0x10,0x11,0x14,0x17,0x19,0x1c,0x1f,0x21,0x25,0x28,0x2b,0x2f,0x33,0x35,0x3a,0x3e,0x41,0x45,0x4a,0x4d,0x52,0x57,0x5d,0x60,0x65,0x69,0x6e,0x73,0x79,0x7d,0x83,0x88,0x8d,0x92,0x99,0x9d,0xa2,0xa5,0xaa,0xaf,0xb3,0xb7,0xbb,0xbd,0xc1,0xc4,0xc6,0xc6,0xc6,0xc7,0xc6,0xc6,0xc6,0xc3,0xbe,0xbd,0xb9,0xb6,0xb2,0xac,0xa8,0xa5,0x9f,0x9b,0x96,0x90,0x8b,0x86,0x80,0x7c,0x76,0x71,0x6c,0x69,0x63,0x5f,0x5a,0x55,0x50,0x4d,0x48,0x44,0x40,0x3b,0x37,0x35,0x32,0x2e,0x2a,0x26,0x23,0x21,0x1e,0x1b,0x18,0x16,0x13,0x11,0x0e,0x0c,0x0b,0x08,0x06,0x05,0x04,0x03,0x01,0x00,0x00, +0x00,0x00,0x00,0x02,0x03,0x04,0x05,0x06,0x09,0x0a,0x0c,0x10,0x11,0x15,0x17,0x18,0x1b,0x1f,0x20,0x25,0x28,0x2a,0x2d,0x32,0x35,0x38,0x3d,0x40,0x44,0x49,0x4c,0x51,0x56,0x5b,0x5f,0x64,0x68,0x6d,0x72,0x78,0x7b,0x80,0x84,0x8b,0x90,0x96,0x9a,0x9f,0xa2,0xa7,0xac,0xaf,0xb2,0xb6,0xb8,0xba,0xbd,0xc1,0xc1,0xc1,0xc2,0xc1,0xc2,0xbe,0xbb,0xb9,0xb8,0xb4,0xb1,0xad,0xa9,0xa5,0xa1,0x9c,0x99,0x93,0x8e,0x87,0x84,0x7e,0x7a,0x75,0x70,0x6a,0x67,0x62,0x5d,0x59,0x54,0x4f,0x4c,0x47,0x43,0x3f,0x3b,0x37,0x34,0x2f,0x2c,0x2a,0x27,0x22,0x20,0x1d,0x1a,0x18,0x15,0x13,0x11,0x0e,0x0b,0x09,0x07,0x06,0x05,0x04,0x03,0x01,0x00,0x00, +0x00,0x00,0x00,0x02,0x03,0x04,0x05,0x06,0x09,0x0a,0x0d,0x10,0x11,0x14,0x17,0x19,0x1c,0x1e,0x20,0x22,0x26,0x29,0x2d,0x32,0x34,0x37,0x3c,0x3f,0x43,0x48,0x4b,0x50,0x53,0x57,0x5e,0x62,0x65,0x6a,0x6f,0x73,0x78,0x7c,0x7f,0x86,0x8e,0x91,0x95,0x9a,0x9d,0xa2,0xa6,0xab,0xae,0xb0,0xb2,0xb5,0xb7,0xba,0xbb,0xba,0xbb,0xbb,0xbc,0xb7,0xb5,0xb4,0xb2,0xaf,0xac,0xa8,0xa5,0xa0,0x9c,0x98,0x93,0x8f,0x89,0x82,0x7f,0x7b,0x76,0x72,0x6c,0x67,0x65,0x60,0x5a,0x57,0x52,0x4d,0x4b,0x46,0x42,0x3e,0x3a,0x36,0x34,0x2f,0x2c,0x29,0x26,0x22,0x20,0x1d,0x1a,0x18,0x15,0x12,0x11,0x0e,0x0b,0x0a,0x07,0x06,0x05,0x03,0x02,0x01,0x00,0x00, +0x00,0x00,0x00,0x01,0x03,0x04,0x05,0x06,0x09,0x0c,0x0d,0x0f,0x10,0x13,0x16,0x18,0x1b,0x1e,0x1f,0x20,0x25,0x28,0x2b,0x30,0x31,0x36,0x3b,0x3e,0x42,0x46,0x48,0x4d,0x52,0x56,0x5a,0x5f,0x62,0x67,0x6c,0x71,0x75,0x79,0x7d,0x82,0x87,0x8d,0x91,0x95,0x99,0x9d,0xa2,0xa4,0xa7,0xab,0xad,0xb0,0xb2,0xb1,0xb4,0xb4,0xb4,0xb5,0xb4,0xb3,0xb2,0xaf,0xad,0xaa,0xa6,0xa3,0xa0,0x9b,0x99,0x93,0x8f,0x8a,0x84,0x7f,0x7c,0x77,0x73,0x6f,0x69,0x64,0x62,0x5d,0x59,0x54,0x4f,0x4c,0x48,0x45,0x40,0x3d,0x3a,0x35,0x31,0x2e,0x2a,0x27,0x25,0x21,0x1f,0x1d,0x1a,0x18,0x15,0x12,0x10,0x0d,0x0a,0x0a,0x07,0x06,0x05,0x03,0x01,0x00,0x00,0x00, +0x00,0x00,0x00,0x02,0x02,0x03,0x03,0x04,0x07,0x0a,0x0c,0x0d,0x10,0x11,0x14,0x17,0x1a,0x1c,0x1d,0x23,0x25,0x26,0x29,0x2d,0x30,0x36,0x39,0x3b,0x40,0x44,0x46,0x4a,0x4f,0x53,0x58,0x5d,0x60,0x64,0x68,0x6e,0x73,0x77,0x7a,0x7e,0x82,0x87,0x8c,0x91,0x93,0x96,0x9b,0x9e,0xa1,0xa5,0xa6,0xa7,0xa9,0xab,0xad,0xad,0xad,0xad,0xad,0xac,0xa9,0xa7,0xa6,0xa3,0x9f,0x9d,0x9a,0x95,0x93,0x8f,0x8a,0x84,0x80,0x7c,0x79,0x75,0x70,0x6c,0x67,0x62,0x60,0x5b,0x56,0x51,0x4c,0x4a,0x46,0x43,0x3e,0x3b,0x38,0x33,0x2f,0x2b,0x29,0x27,0x23,0x1f,0x1d,0x1b,0x18,0x16,0x12,0x10,0x10,0x0d,0x0b,0x08,0x05,0x04,0x03,0x02,0x02,0x00,0x00,0x00, +0x00,0x00,0x00,0x01,0x02,0x02,0x03,0x04,0x07,0x09,0x0b,0x0c,0x0e,0x10,0x13,0x15,0x18,0x1a,0x1c,0x20,0x22,0x25,0x28,0x2b,0x2e,0x33,0x36,0x38,0x3d,0x41,0x43,0x47,0x4c,0x50,0x55,0x5a,0x5d,0x62,0x65,0x69,0x6e,0x73,0x75,0x79,0x7e,0x82,0x87,0x8c,0x8e,0x93,0x96,0x99,0x9c,0x9f,0xa0,0xa0,0xa3,0xa6,0xa7,0xa6,0xa6,0xa6,0xa7,0xa4,0xa2,0xa1,0xa0,0x9d,0x9a,0x98,0x95,0x90,0x8e,0x8a,0x85,0x80,0x7c,0x77,0x75,0x72,0x6e,0x69,0x64,0x5f,0x5d,0x58,0x53,0x50,0x4b,0x47,0x43,0x40,0x3b,0x38,0x35,0x30,0x2e,0x29,0x27,0x25,0x21,0x1e,0x1c,0x18,0x16,0x14,0x11,0x0f,0x0e,0x0c,0x0a,0x08,0x05,0x04,0x03,0x02,0x01,0x00,0x00,0x00, +0x00,0x00,0x00,0x01,0x01,0x02,0x03,0x04,0x07,0x09,0x0b,0x0c,0x0d,0x0f,0x12,0x15,0x18,0x1a,0x1c,0x1f,0x22,0x24,0x27,0x2a,0x2d,0x32,0x35,0x37,0x3a,0x3f,0x42,0x47,0x4a,0x4d,0x51,0x56,0x59,0x5d,0x62,0x66,0x6b,0x6f,0x71,0x76,0x7a,0x7d,0x81,0x85,0x88,0x8e,0x90,0x93,0x96,0x99,0x9a,0x9b,0x9e,0xa0,0xa0,0x9f,0x9f,0x9f,0xa0,0x9e,0x9d,0x9b,0x9a,0x97,0x94,0x92,0x8f,0x8a,0x88,0x83,0x7f,0x7c,0x77,0x73,0x71,0x6d,0x69,0x65,0x60,0x5b,0x59,0x54,0x50,0x4c,0x48,0x44,0x41,0x3c,0x39,0x37,0x34,0x2f,0x2d,0x28,0x25,0x23,0x20,0x1d,0x1c,0x19,0x16,0x14,0x11,0x0f,0x0d,0x0c,0x0a,0x08,0x05,0x04,0x03,0x02,0x01,0x00,0x00,0x00, +0x00,0x00,0x00,0x01,0x01,0x02,0x03,0x03,0x06,0x08,0x0a,0x0c,0x0d,0x0f,0x12,0x14,0x17,0x19,0x1b,0x1e,0x21,0x23,0x26,0x2a,0x2c,0x31,0x34,0x36,0x39,0x3e,0x40,0x45,0x49,0x4c,0x51,0x55,0x57,0x5a,0x60,0x64,0x68,0x6d,0x6f,0x72,0x77,0x7a,0x7d,0x81,0x84,0x88,0x8b,0x8d,0x90,0x93,0x94,0x97,0x99,0x9b,0x9b,0x9b,0x9b,0x9b,0x9b,0x99,0x98,0x97,0x94,0x92,0x8f,0x8d,0x8a,0x86,0x83,0x7f,0x7c,0x79,0x75,0x71,0x6f,0x6b,0x67,0x63,0x5e,0x5a,0x57,0x52,0x4e,0x4b,0x47,0x43,0x3f,0x3b,0x38,0x36,0x33,0x2e,0x2c,0x28,0x25,0x22,0x1f,0x1c,0x1b,0x17,0x15,0x13,0x10,0x0e,0x0d,0x0c,0x09,0x07,0x04,0x03,0x03,0x02,0x01,0x00,0x00,0x00, +0x00,0x00,0x00,0x01,0x01,0x02,0x02,0x03,0x06,0x08,0x0a,0x0b,0x0c,0x0e,0x11,0x13,0x15,0x19,0x1a,0x1d,0x20,0x22,0x25,0x29,0x2b,0x2e,0x32,0x33,0x38,0x3b,0x3d,0x42,0x45,0x49,0x4d,0x51,0x53,0x56,0x5b,0x5f,0x63,0x69,0x6b,0x6f,0x73,0x75,0x79,0x7c,0x7e,0x82,0x85,0x87,0x8a,0x8d,0x8e,0x91,0x93,0x95,0x95,0x95,0x95,0x95,0x95,0x95,0x91,0x91,0x8e,0x8c,0x89,0x87,0x84,0x80,0x7e,0x7b,0x78,0x75,0x72,0x6d,0x6b,0x66,0x62,0x5e,0x59,0x55,0x53,0x50,0x4c,0x48,0x43,0x3f,0x3d,0x38,0x35,0x33,0x30,0x2d,0x2b,0x27,0x24,0x22,0x1f,0x1c,0x1a,0x17,0x14,0x12,0x10,0x0e,0x0c,0x0b,0x09,0x07,0x04,0x03,0x02,0x02,0x01,0x00,0x00,0x00, +0x00,0x00,0x00,0x01,0x01,0x01,0x02,0x03,0x05,0x08,0x0a,0x0b,0x0c,0x0e,0x11,0x12,0x15,0x18,0x18,0x1c,0x1f,0x21,0x23,0x27,0x29,0x2b,0x2e,0x32,0x35,0x39,0x3b,0x41,0x44,0x46,0x49,0x4e,0x51,0x55,0x58,0x5c,0x5e,0x63,0x67,0x6b,0x6f,0x72,0x75,0x78,0x79,0x7d,0x80,0x82,0x85,0x87,0x89,0x8b,0x8c,0x8e,0x8e,0x8e,0x8e,0x8e,0x8e,0x8c,0x8a,0x8a,0x89,0x87,0x84,0x81,0x7e,0x7c,0x79,0x76,0x73,0x71,0x6e,0x69,0x66,0x61,0x5e,0x5b,0x56,0x52,0x50,0x4c,0x48,0x46,0x41,0x3d,0x3b,0x36,0x33,0x31,0x2d,0x2b,0x29,0x25,0x23,0x20,0x1d,0x1b,0x19,0x16,0x13,0x11,0x0f,0x0d,0x0c,0x0b,0x09,0x06,0x03,0x03,0x02,0x01,0x01,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x03,0x06,0x08,0x09,0x0a,0x0b,0x0f,0x11,0x13,0x16,0x16,0x1a,0x1d,0x1f,0x21,0x24,0x27,0x28,0x2c,0x31,0x33,0x38,0x3a,0x3f,0x42,0x44,0x46,0x4b,0x4f,0x52,0x55,0x59,0x5d,0x61,0x63,0x67,0x6a,0x6d,0x71,0x73,0x75,0x77,0x7a,0x7c,0x7f,0x81,0x82,0x83,0x85,0x87,0x87,0x87,0x87,0x87,0x87,0x85,0x84,0x83,0x82,0x81,0x7e,0x7b,0x79,0x76,0x75,0x71,0x6f,0x6c,0x69,0x65,0x63,0x5e,0x5b,0x57,0x52,0x50,0x4e,0x49,0x45,0x43,0x40,0x3c,0x3a,0x35,0x32,0x30,0x2b,0x29,0x27,0x24,0x21,0x1e,0x1b,0x19,0x17,0x16,0x12,0x12,0x0e,0x0b,0x0a,0x09,0x07,0x05,0x02,0x01,0x01,0x01,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x03,0x05,0x07,0x08,0x09,0x0a,0x0e,0x10,0x12,0x14,0x15,0x17,0x1a,0x1d,0x20,0x22,0x24,0x27,0x2b,0x2d,0x30,0x33,0x37,0x3c,0x3f,0x41,0x43,0x48,0x4c,0x4f,0x50,0x54,0x58,0x5d,0x5f,0x62,0x65,0x66,0x6b,0x6e,0x70,0x72,0x75,0x78,0x7a,0x7b,0x7c,0x7d,0x7f,0x81,0x81,0x81,0x81,0x81,0x81,0x7f,0x7e,0x7d,0x7c,0x7b,0x77,0x76,0x75,0x71,0x70,0x6d,0x6a,0x67,0x64,0x60,0x5f,0x5b,0x57,0x54,0x50,0x4d,0x4b,0x46,0x42,0x40,0x3d,0x39,0x37,0x32,0x2f,0x2d,0x29,0x26,0x24,0x23,0x20,0x1c,0x19,0x17,0x15,0x13,0x11,0x0f,0x0b,0x0a,0x09,0x08,0x06,0x04,0x02,0x01,0x01,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x03,0x05,0x07,0x08,0x08,0x09,0x0c,0x0f,0x12,0x13,0x15,0x17,0x1a,0x1c,0x1f,0x21,0x23,0x26,0x29,0x2c,0x2f,0x32,0x34,0x38,0x3b,0x3d,0x40,0x45,0x47,0x4b,0x4e,0x50,0x53,0x58,0x5a,0x5e,0x60,0x63,0x66,0x69,0x6a,0x6c,0x6f,0x72,0x75,0x75,0x76,0x77,0x79,0x7b,0x7b,0x7b,0x7b,0x7b,0x7a,0x79,0x78,0x77,0x76,0x75,0x74,0x72,0x70,0x6c,0x6a,0x68,0x65,0x62,0x5f,0x5b,0x5a,0x56,0x52,0x50,0x4e,0x49,0x46,0x42,0x3f,0x3d,0x3a,0x36,0x34,0x30,0x2d,0x2b,0x28,0x24,0x23,0x1f,0x1d,0x1c,0x19,0x16,0x15,0x13,0x10,0x0e,0x0b,0x09,0x08,0x08,0x07,0x03,0x02,0x01,0x01,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x03,0x06,0x07,0x08,0x09,0x0a,0x0e,0x11,0x13,0x14,0x16,0x19,0x1b,0x1e,0x20,0x22,0x25,0x28,0x2a,0x2d,0x31,0x33,0x37,0x3a,0x3c,0x3f,0x43,0x45,0x48,0x4b,0x4e,0x51,0x55,0x57,0x5b,0x5e,0x60,0x63,0x65,0x67,0x69,0x6c,0x6f,0x70,0x71,0x72,0x73,0x75,0x76,0x76,0x76,0x76,0x76,0x76,0x75,0x73,0x73,0x72,0x71,0x71,0x6e,0x6b,0x69,0x67,0x65,0x62,0x5f,0x5c,0x59,0x57,0x53,0x50,0x4d,0x4b,0x47,0x44,0x41,0x3e,0x3c,0x39,0x34,0x33,0x2f,0x2c,0x2a,0x27,0x23,0x22,0x1e,0x1c,0x1a,0x17,0x15,0x14,0x12,0x0f,0x0d,0x0a,0x09,0x08,0x07,0x05,0x03,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x05,0x07,0x08,0x08,0x0b,0x0d,0x0f,0x12,0x13,0x15,0x18,0x19,0x1b,0x1f,0x21,0x24,0x27,0x29,0x2c,0x2f,0x30,0x35,0x37,0x39,0x3c,0x3f,0x41,0x44,0x47,0x49,0x4d,0x50,0x53,0x56,0x59,0x5b,0x5e,0x60,0x62,0x65,0x69,0x6a,0x6b,0x6c,0x6c,0x6d,0x6e,0x70,0x70,0x70,0x70,0x70,0x71,0x70,0x6e,0x6d,0x6c,0x6c,0x6a,0x68,0x65,0x63,0x62,0x60,0x5d,0x5a,0x57,0x54,0x52,0x4f,0x4d,0x48,0x46,0x42,0x41,0x3e,0x3b,0x39,0x36,0x32,0x30,0x2d,0x2b,0x28,0x25,0x22,0x21,0x1f,0x1b,0x19,0x16,0x14,0x13,0x12,0x0f,0x0b,0x0a,0x08,0x08,0x06,0x03,0x02,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x02,0x02,0x04,0x06,0x07,0x08,0x0b,0x0d,0x0d,0x11,0x11,0x15,0x16,0x16,0x19,0x1d,0x1f,0x21,0x24,0x26,0x29,0x2c,0x2d,0x32,0x34,0x36,0x39,0x3c,0x3e,0x41,0x44,0x46,0x49,0x4c,0x4e,0x52,0x55,0x57,0x5a,0x5d,0x5e,0x5f,0x62,0x65,0x67,0x67,0x68,0x68,0x6b,0x6a,0x6b,0x6b,0x6b,0x6b,0x6b,0x6a,0x69,0x69,0x68,0x67,0x66,0x64,0x61,0x5f,0x5e,0x5b,0x58,0x57,0x53,0x50,0x4e,0x4c,0x49,0x45,0x42,0x3f,0x3e,0x3b,0x38,0x36,0x33,0x2f,0x2d,0x29,0x29,0x26,0x24,0x20,0x1f,0x1d,0x18,0x16,0x17,0x13,0x11,0x10,0x0e,0x0a,0x09,0x08,0x07,0x06,0x03,0x02,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x04,0x04,0x05,0x06,0x09,0x0c,0x0d,0x0f,0x0f,0x11,0x13,0x15,0x19,0x1a,0x1d,0x1e,0x21,0x24,0x27,0x29,0x2b,0x2d,0x31,0x34,0x37,0x3a,0x3c,0x3e,0x42,0x44,0x47,0x49,0x4b,0x4e,0x51,0x53,0x54,0x57,0x58,0x5a,0x5c,0x5f,0x61,0x61,0x62,0x62,0x64,0x66,0x64,0x65,0x65,0x65,0x65,0x65,0x63,0x63,0x62,0x61,0x60,0x5e,0x5b,0x5a,0x58,0x55,0x52,0x52,0x50,0x4c,0x4b,0x48,0x46,0x43,0x40,0x3c,0x3c,0x39,0x36,0x33,0x2f,0x2c,0x2b,0x28,0x27,0x25,0x20,0x1e,0x1d,0x1a,0x18,0x14,0x14,0x11,0x0f,0x0e,0x0c,0x0a,0x07,0x06,0x05,0x04,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x02,0x03,0x04,0x05,0x07,0x0a,0x0c,0x0c,0x0e,0x0f,0x12,0x15,0x17,0x19,0x1a,0x1d,0x1f,0x21,0x24,0x26,0x28,0x2a,0x2e,0x31,0x34,0x37,0x39,0x3b,0x3f,0x41,0x44,0x45,0x48,0x4a,0x4d,0x4f,0x4f,0x52,0x53,0x55,0x58,0x5a,0x5c,0x5c,0x5d,0x5e,0x5f,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x5e,0x5e,0x5d,0x5c,0x5b,0x59,0x56,0x55,0x53,0x51,0x4f,0x4c,0x4a,0x47,0x47,0x43,0x41,0x40,0x3d,0x39,0x39,0x36,0x34,0x30,0x2a,0x29,0x28,0x25,0x24,0x21,0x1c,0x1b,0x1a,0x19,0x17,0x15,0x12,0x0f,0x0e,0x0c,0x0a,0x08,0x06,0x05,0x04,0x03,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x02,0x03,0x04,0x04,0x06,0x08,0x0b,0x0c,0x0d,0x10,0x13,0x15,0x16,0x18,0x19,0x1a,0x1d,0x1f,0x21,0x25,0x26,0x28,0x2b,0x2d,0x30,0x33,0x35,0x37,0x3a,0x3c,0x3f,0x41,0x43,0x44,0x47,0x4a,0x4c,0x4d,0x4e,0x50,0x52,0x54,0x57,0x56,0x57,0x58,0x59,0x5a,0x5b,0x5b,0x5b,0x5b,0x5b,0x5a,0x58,0x58,0x57,0x56,0x55,0x53,0x51,0x50,0x4e,0x4d,0x4c,0x4a,0x47,0x44,0x42,0x3f,0x3d,0x3c,0x39,0x36,0x35,0x32,0x2f,0x2c,0x29,0x27,0x26,0x23,0x20,0x1f,0x1d,0x1a,0x19,0x18,0x15,0x13,0x10,0x0e,0x0d,0x0c,0x0a,0x08,0x05,0x04,0x04,0x03,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x02,0x02,0x03,0x04,0x05,0x07,0x0a,0x0b,0x0c,0x0f,0x12,0x14,0x15,0x17,0x18,0x19,0x1c,0x1e,0x20,0x23,0x25,0x28,0x2a,0x2b,0x2e,0x31,0x33,0x35,0x37,0x3a,0x3d,0x3f,0x3f,0x41,0x44,0x47,0x4a,0x4b,0x4c,0x4d,0x4f,0x51,0x52,0x53,0x54,0x54,0x55,0x56,0x56,0x56,0x56,0x56,0x56,0x56,0x55,0x54,0x54,0x53,0x52,0x50,0x4e,0x4d,0x4c,0x4b,0x48,0x46,0x43,0x41,0x40,0x3d,0x3b,0x3a,0x37,0x34,0x32,0x30,0x2d,0x2b,0x28,0x26,0x25,0x22,0x1f,0x1e,0x1c,0x19,0x18,0x17,0x14,0x12,0x0f,0x0d,0x0c,0x0b,0x09,0x07,0x05,0x04,0x03,0x02,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x02,0x03,0x03,0x05,0x07,0x09,0x0a,0x0b,0x0d,0x10,0x12,0x14,0x16,0x17,0x18,0x19,0x1d,0x20,0x20,0x23,0x25,0x28,0x29,0x2b,0x2e,0x2f,0x31,0x33,0x37,0x39,0x3a,0x3b,0x3e,0x41,0x43,0x45,0x46,0x47,0x48,0x4a,0x4c,0x4d,0x4e,0x4f,0x4f,0x52,0x51,0x51,0x51,0x51,0x51,0x51,0x50,0x50,0x4f,0x4f,0x4e,0x4d,0x4b,0x49,0x48,0x47,0x46,0x45,0x43,0x40,0x3c,0x3b,0x38,0x36,0x36,0x34,0x31,0x2f,0x2c,0x2b,0x29,0x26,0x23,0x23,0x21,0x1e,0x1b,0x19,0x18,0x17,0x14,0x12,0x0f,0x0d,0x0c,0x0b,0x09,0x07,0x05,0x04,0x03,0x03,0x02,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x02,0x03,0x04,0x06,0x08,0x09,0x09,0x0a,0x0d,0x0f,0x11,0x14,0x15,0x16,0x18,0x19,0x1b,0x1e,0x20,0x22,0x26,0x27,0x28,0x2b,0x2c,0x2f,0x32,0x34,0x36,0x37,0x38,0x3a,0x3d,0x3f,0x41,0x42,0x43,0x43,0x45,0x48,0x49,0x4a,0x4a,0x4b,0x4b,0x4c,0x4c,0x4d,0x4d,0x4d,0x4c,0x4c,0x4b,0x4b,0x4a,0x49,0x48,0x47,0x45,0x44,0x43,0x42,0x40,0x3e,0x3b,0x39,0x38,0x35,0x33,0x33,0x30,0x2e,0x2c,0x2b,0x28,0x26,0x23,0x20,0x20,0x1e,0x1b,0x18,0x17,0x16,0x15,0x13,0x0e,0x0e,0x0c,0x0a,0x09,0x08,0x05,0x04,0x04,0x02,0x02,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x02,0x04,0x06,0x07,0x07,0x09,0x0b,0x0c,0x0f,0x12,0x13,0x14,0x17,0x18,0x19,0x1e,0x1e,0x1f,0x21,0x24,0x26,0x28,0x29,0x2d,0x30,0x31,0x34,0x35,0x36,0x37,0x3a,0x3c,0x3d,0x3e,0x3f,0x40,0x41,0x44,0x45,0x45,0x46,0x46,0x46,0x48,0x48,0x48,0x48,0x48,0x48,0x47,0x46,0x46,0x46,0x45,0x44,0x43,0x41,0x40,0x3f,0x3e,0x3d,0x3b,0x38,0x37,0x36,0x33,0x31,0x30,0x2d,0x2b,0x29,0x28,0x26,0x24,0x21,0x1f,0x1e,0x1b,0x18,0x16,0x15,0x14,0x13,0x12,0x0e,0x0b,0x0a,0x08,0x07,0x08,0x06,0x03,0x02,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x02,0x04,0x05,0x06,0x06,0x08,0x0b,0x0c,0x0e,0x0f,0x10,0x11,0x14,0x16,0x18,0x1b,0x1c,0x1c,0x1e,0x20,0x24,0x25,0x26,0x27,0x2a,0x2e,0x31,0x32,0x33,0x34,0x37,0x38,0x39,0x3a,0x3b,0x3d,0x3e,0x3e,0x40,0x40,0x41,0x41,0x43,0x43,0x43,0x43,0x43,0x43,0x43,0x42,0x42,0x41,0x41,0x40,0x40,0x3e,0x3d,0x3b,0x3b,0x3a,0x39,0x37,0x35,0x34,0x33,0x30,0x2d,0x2d,0x2a,0x28,0x26,0x25,0x23,0x21,0x1e,0x1d,0x1c,0x19,0x17,0x15,0x12,0x11,0x10,0x0f,0x0d,0x0a,0x08,0x07,0x06,0x06,0x05,0x03,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x02,0x04,0x05,0x06,0x06,0x09,0x0c,0x0d,0x0e,0x0f,0x10,0x13,0x15,0x17,0x18,0x19,0x1a,0x1d,0x1f,0x21,0x22,0x23,0x24,0x27,0x29,0x2c,0x2d,0x2e,0x2f,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3b,0x3b,0x3c,0x3d,0x3d,0x3e,0x3e,0x3f,0x3f,0x3f,0x3f,0x3f,0x3e,0x3d,0x3d,0x3d,0x3c,0x3b,0x39,0x38,0x37,0x37,0x36,0x35,0x33,0x30,0x2f,0x2e,0x2c,0x29,0x29,0x26,0x24,0x23,0x22,0x20,0x1e,0x1b,0x1a,0x19,0x18,0x16,0x14,0x11,0x10,0x0f,0x0e,0x0c,0x0a,0x07,0x06,0x06,0x05,0x04,0x02,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x03,0x04,0x04,0x05,0x06,0x08,0x0a,0x0c,0x0d,0x0e,0x0f,0x12,0x14,0x16,0x17,0x18,0x19,0x1c,0x1e,0x20,0x21,0x22,0x23,0x26,0x28,0x2a,0x2b,0x2c,0x2c,0x2f,0x32,0x33,0x34,0x34,0x35,0x36,0x39,0x39,0x39,0x3a,0x3a,0x3c,0x3c,0x3c,0x3c,0x3c,0x3c,0x3c,0x3b,0x3b,0x3a,0x3a,0x39,0x39,0x37,0x36,0x35,0x34,0x34,0x32,0x30,0x2e,0x2d,0x2c,0x2b,0x29,0x27,0x24,0x23,0x22,0x21,0x1f,0x1d,0x1a,0x19,0x18,0x17,0x15,0x13,0x10,0x0f,0x0e,0x0d,0x0b,0x08,0x07,0x06,0x05,0x04,0x02,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x03,0x04,0x04,0x05,0x06,0x08,0x0b,0x0c,0x0d,0x0e,0x11,0x13,0x15,0x16,0x17,0x18,0x19,0x1c,0x1e,0x1d,0x1e,0x20,0x23,0x25,0x26,0x27,0x28,0x29,0x2b,0x2e,0x2e,0x2f,0x2f,0x31,0x33,0x35,0x35,0x34,0x35,0x35,0x38,0x38,0x37,0x37,0x37,0x37,0x38,0x38,0x37,0x35,0x35,0x34,0x36,0x33,0x32,0x31,0x2f,0x2f,0x2d,0x2b,0x29,0x28,0x28,0x27,0x25,0x23,0x21,0x20,0x1e,0x1d,0x1d,0x1b,0x18,0x18,0x17,0x16,0x14,0x12,0x0f,0x0e,0x0d,0x0c,0x0a,0x08,0x06,0x05,0x04,0x04,0x03,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x02,0x02,0x02,0x04,0x05,0x06,0x08,0x0a,0x0b,0x0c,0x0e,0x0f,0x12,0x13,0x14,0x15,0x18,0x19,0x1a,0x1b,0x1c,0x1e,0x21,0x22,0x23,0x24,0x25,0x26,0x2a,0x29,0x2b,0x2b,0x2c,0x2d,0x2f,0x30,0x31,0x31,0x31,0x32,0x33,0x34,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x32,0x31,0x31,0x30,0x30,0x2e,0x2d,0x2c,0x2b,0x2c,0x29,0x27,0x25,0x25,0x24,0x22,0x20,0x1e,0x1d,0x1c,0x1b,0x1a,0x18,0x16,0x15,0x14,0x13,0x11,0x0f,0x0d,0x0c,0x0b,0x09,0x08,0x06,0x04,0x03,0x02,0x03,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x01,0x01,0x03,0x05,0x05,0x06,0x08,0x08,0x0a,0x0a,0x0b,0x0f,0x11,0x12,0x13,0x13,0x15,0x18,0x19,0x1a,0x1b,0x1e,0x20,0x21,0x22,0x22,0x23,0x25,0x25,0x27,0x29,0x2a,0x29,0x2c,0x2c,0x2d,0x2e,0x2e,0x2f,0x2f,0x30,0x30,0x30,0x30,0x30,0x30,0x2f,0x2f,0x2f,0x2e,0x2e,0x2c,0x2d,0x2b,0x29,0x2a,0x28,0x27,0x27,0x25,0x23,0x22,0x22,0x20,0x1e,0x1c,0x1b,0x1a,0x19,0x17,0x15,0x13,0x13,0x12,0x11,0x0e,0x0c,0x0b,0x0a,0x08,0x07,0x06,0x05,0x04,0x02,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x02,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0c,0x0e,0x0f,0x10,0x12,0x14,0x17,0x16,0x17,0x17,0x1b,0x1d,0x1e,0x1f,0x1f,0x20,0x21,0x23,0x24,0x26,0x27,0x26,0x27,0x29,0x28,0x29,0x2b,0x2b,0x2a,0x2b,0x2d,0x2b,0x2b,0x2c,0x2b,0x2a,0x2a,0x2c,0x29,0x28,0x29,0x2a,0x28,0x26,0x27,0x25,0x22,0x22,0x21,0x20,0x1f,0x1f,0x1d,0x1b,0x19,0x18,0x17,0x16,0x16,0x13,0x10,0x10,0x0f,0x0e,0x0b,0x09,0x08,0x07,0x07,0x06,0x05,0x04,0x03,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x02,0x03,0x05,0x05,0x06,0x07,0x09,0x09,0x0b,0x0c,0x0d,0x0f,0x11,0x11,0x13,0x14,0x15,0x16,0x18,0x1a,0x1b,0x1c,0x1c,0x1d,0x1e,0x20,0x21,0x22,0x22,0x23,0x25,0x25,0x26,0x26,0x27,0x27,0x27,0x27,0x28,0x28,0x28,0x28,0x28,0x27,0x27,0x27,0x27,0x26,0x25,0x25,0x23,0x23,0x22,0x22,0x21,0x1f,0x1e,0x1d,0x1c,0x1c,0x1b,0x19,0x17,0x16,0x15,0x14,0x12,0x10,0x0f,0x0e,0x0d,0x0c,0x0a,0x08,0x07,0x06,0x06,0x05,0x03,0x02,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x02,0x04,0x05,0x05,0x06,0x08,0x08,0x0a,0x0b,0x0c,0x0d,0x0e,0x10,0x13,0x13,0x14,0x15,0x17,0x17,0x19,0x1a,0x1b,0x1c,0x1d,0x1f,0x1f,0x20,0x20,0x21,0x23,0x23,0x24,0x24,0x25,0x25,0x25,0x26,0x25,0x26,0x26,0x25,0x26,0x25,0x25,0x25,0x25,0x24,0x23,0x21,0x21,0x21,0x20,0x20,0x1f,0x1d,0x1c,0x1c,0x1b,0x1a,0x18,0x16,0x15,0x15,0x14,0x13,0x12,0x10,0x0e,0x0d,0x0c,0x0b,0x09,0x07,0x06,0x06,0x05,0x05,0x02,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x03,0x04,0x04,0x05,0x07,0x09,0x0a,0x0a,0x0b,0x0c,0x0d,0x0e,0x10,0x12,0x12,0x12,0x14,0x17,0x17,0x17,0x17,0x1a,0x1b,0x1c,0x1d,0x1d,0x1d,0x1e,0x1f,0x20,0x20,0x21,0x21,0x21,0x22,0x23,0x22,0x22,0x22,0x22,0x22,0x21,0x21,0x21,0x21,0x21,0x20,0x1f,0x1e,0x1e,0x1d,0x1d,0x1d,0x1b,0x18,0x19,0x17,0x17,0x16,0x15,0x12,0x13,0x12,0x12,0x0f,0x0d,0x0c,0x0c,0x0b,0x0a,0x09,0x07,0x05,0x05,0x04,0x04,0x02,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x02,0x03,0x03,0x04,0x05,0x06,0x07,0x09,0x09,0x0b,0x0c,0x0c,0x0d,0x0f,0x0f,0x11,0x12,0x13,0x14,0x14,0x15,0x17,0x19,0x19,0x1a,0x1a,0x1a,0x1b,0x1b,0x1d,0x1d,0x1e,0x1e,0x1e,0x1e,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1e,0x1e,0x1e,0x1e,0x1e,0x1d,0x1d,0x1b,0x1b,0x1a,0x1a,0x1a,0x18,0x16,0x16,0x15,0x14,0x13,0x12,0x10,0x10,0x0f,0x0f,0x0d,0x0c,0x0a,0x0a,0x09,0x09,0x08,0x06,0x03,0x04,0x03,0x03,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x01,0x01,0x02,0x02,0x04,0x05,0x07,0x07,0x08,0x0a,0x0c,0x0b,0x0c,0x0d,0x0e,0x0f,0x10,0x12,0x12,0x13,0x14,0x14,0x17,0x18,0x18,0x18,0x18,0x19,0x1a,0x1b,0x1b,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1d,0x1c,0x1c,0x1c,0x1c,0x1b,0x1b,0x1b,0x19,0x18,0x18,0x18,0x18,0x16,0x14,0x14,0x13,0x12,0x11,0x10,0x0e,0x0e,0x0d,0x0c,0x0b,0x0b,0x08,0x08,0x07,0x07,0x06,0x04,0x03,0x02,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x03,0x04,0x04,0x05,0x05,0x07,0x09,0x09,0x0b,0x0a,0x0a,0x0c,0x0f,0x0f,0x0f,0x10,0x11,0x12,0x14,0x15,0x15,0x15,0x16,0x16,0x18,0x18,0x18,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x1a,0x19,0x19,0x19,0x19,0x18,0x18,0x18,0x16,0x16,0x15,0x15,0x15,0x13,0x11,0x11,0x10,0x0f,0x10,0x0d,0x0b,0x0b,0x0a,0x0a,0x09,0x08,0x06,0x05,0x05,0x04,0x03,0x01,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x02,0x03,0x03,0x04,0x04,0x05,0x07,0x08,0x08,0x09,0x09,0x0a,0x0b,0x0d,0x0e,0x0e,0x0f,0x10,0x12,0x12,0x12,0x13,0x13,0x13,0x15,0x15,0x15,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x15,0x15,0x15,0x13,0x13,0x13,0x12,0x12,0x10,0x0f,0x0f,0x0e,0x0e,0x0d,0x0b,0x0a,0x09,0x09,0x08,0x08,0x06,0x05,0x04,0x04,0x03,0x02,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x02,0x02,0x03,0x03,0x06,0x06,0x07,0x07,0x08,0x08,0x09,0x0b,0x0c,0x0c,0x0d,0x0d,0x0e,0x10,0x11,0x11,0x11,0x11,0x13,0x13,0x14,0x14,0x14,0x14,0x14,0x15,0x15,0x15,0x15,0x15,0x15,0x14,0x14,0x14,0x14,0x14,0x14,0x12,0x12,0x11,0x11,0x11,0x11,0x0f,0x0e,0x0d,0x0d,0x0c,0x0c,0x0a,0x09,0x08,0x08,0x07,0x06,0x05,0x04,0x03,0x03,0x02,0x02,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x02,0x02,0x03,0x03,0x05,0x05,0x07,0x07,0x07,0x08,0x0a,0x09,0x0a,0x0c,0x0c,0x0c,0x0d,0x0d,0x0e,0x0e,0x0e,0x10,0x12,0x11,0x12,0x12,0x12,0x12,0x12,0x13,0x13,0x13,0x13,0x13,0x12,0x12,0x12,0x12,0x12,0x11,0x11,0x0f,0x0e,0x0e,0x0e,0x0d,0x0c,0x0c,0x0c,0x0c,0x0a,0x09,0x0a,0x08,0x07,0x07,0x06,0x06,0x04,0x03,0x03,0x02,0x02,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x01,0x02,0x02,0x03,0x03,0x05,0x05,0x06,0x07,0x09,0x08,0x07,0x09,0x0a,0x0a,0x0b,0x0b,0x0b,0x0b,0x0c,0x0e,0x0e,0x0e,0x0f,0x0f,0x0f,0x0f,0x0f,0x10,0x10,0x10,0x10,0x10,0x0f,0x0f,0x0f,0x0f,0x0f,0x0e,0x0e,0x0c,0x0c,0x0b,0x0d,0x0b,0x09,0x0a,0x0a,0x09,0x06,0x08,0x08,0x06,0x06,0x05,0x03,0x03,0x03,0x02,0x01,0x01,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x02,0x03,0x03,0x03,0x03,0x04,0x06,0x06,0x06,0x07,0x08,0x07,0x09,0x0a,0x09,0x09,0x0b,0x0a,0x0b,0x0c,0x0c,0x0c,0x0c,0x0c,0x0d,0x0d,0x0d,0x0d,0x0d,0x0d,0x0d,0x0c,0x0c,0x0c,0x0c,0x0c,0x0c,0x0a,0x0b,0x09,0x0a,0x0b,0x09,0x08,0x08,0x07,0x05,0x06,0x05,0x04,0x03,0x03,0x02,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x01,0x02,0x02,0x03,0x04,0x04,0x04,0x05,0x05,0x06,0x07,0x07,0x07,0x08,0x08,0x0a,0x09,0x09,0x09,0x09,0x09,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x09,0x09,0x09,0x09,0x09,0x09,0x08,0x08,0x07,0x07,0x08,0x06,0x05,0x05,0x04,0x04,0x03,0x02,0x02,0x02,0x01,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x01,0x01,0x02,0x03,0x03,0x03,0x04,0x04,0x05,0x06,0x06,0x06,0x06,0x07,0x07,0x08,0x08,0x08,0x08,0x08,0x09,0x09,0x09,0x09,0x09,0x09,0x08,0x08,0x08,0x08,0x08,0x08,0x07,0x07,0x06,0x06,0x06,0x06,0x04,0x04,0x04,0x03,0x03,0x03,0x02,0x01,0x01,0x01,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x02,0x02,0x02,0x02,0x03,0x03,0x04,0x05,0x05,0x05,0x05,0x06,0x06,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x06,0x06,0x05,0x05,0x05,0x05,0x03,0x03,0x03,0x02,0x02,0x02,0x01,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x02,0x02,0x02,0x02,0x02,0x02,0x03,0x04,0x04,0x04,0x05,0x05,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x05,0x04,0x05,0x04,0x04,0x03,0x04,0x03,0x02,0x02,0x02,0x02,0x02,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x01,0x01,0x01,0x02,0x01,0x03,0x03,0x03,0x02,0x03,0x04,0x04,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x04,0x03,0x01,0x02,0x03,0x03,0x02,0x02,0x02,0x01,0x01,0x01,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x00,0x01,0x02,0x02,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x02,0x02,0x01,0x00,0x01,0x01,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 +}; +unsigned char data140[19600] = { +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x00,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x00,0x00,0x00,0x01,0x01,0x00,0x01,0x02,0x02,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x02,0x02,0x00,0x00,0x01,0x01,0x00,0x00,0x01,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x01,0x01,0x02,0x02,0x02,0x02,0x02,0x02,0x01,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x02,0x02,0x02,0x02,0x02,0x02,0x01,0x01,0x01,0x01,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x01,0x01,0x01,0x02,0x02,0x03,0x03,0x03,0x03,0x03,0x04,0x04,0x04,0x05,0x05,0x05,0x05,0x05,0x05,0x05,0x05,0x05,0x05,0x05,0x05,0x05,0x05,0x05,0x05,0x05,0x05,0x05,0x04,0x04,0x04,0x03,0x03,0x03,0x03,0x03,0x02,0x02,0x01,0x01,0x01,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x02,0x02,0x02,0x02,0x02,0x02,0x04,0x04,0x04,0x04,0x04,0x05,0x05,0x05,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x05,0x05,0x05,0x04,0x04,0x04,0x04,0x04,0x02,0x02,0x02,0x02,0x02,0x02,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x02,0x02,0x02,0x02,0x02,0x03,0x03,0x04,0x04,0x05,0x05,0x05,0x05,0x06,0x06,0x06,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x06,0x06,0x06,0x05,0x05,0x05,0x05,0x04,0x03,0x03,0x03,0x02,0x02,0x02,0x02,0x01,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x01,0x01,0x02,0x02,0x03,0x03,0x03,0x04,0x04,0x05,0x05,0x06,0x06,0x06,0x07,0x07,0x07,0x08,0x08,0x08,0x08,0x08,0x08,0x09,0x09,0x09,0x09,0x09,0x09,0x09,0x09,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x07,0x07,0x07,0x06,0x06,0x06,0x05,0x04,0x04,0x04,0x03,0x03,0x03,0x02,0x02,0x01,0x01,0x01,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x01,0x01,0x02,0x02,0x04,0x04,0x06,0x05,0x05,0x06,0x06,0x06,0x07,0x08,0x08,0x08,0x0a,0x08,0x09,0x0b,0x09,0x0a,0x0a,0x0a,0x0a,0x0b,0x0a,0x0b,0x0b,0x0b,0x0b,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0b,0x08,0x09,0x0a,0x08,0x08,0x08,0x07,0x06,0x06,0x06,0x05,0x05,0x05,0x02,0x02,0x02,0x02,0x01,0x01,0x02,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x00,0x01,0x01,0x02,0x02,0x02,0x04,0x04,0x06,0x06,0x06,0x07,0x07,0x08,0x08,0x08,0x0a,0x0a,0x0a,0x0a,0x0c,0x0a,0x0b,0x0c,0x0b,0x0c,0x0c,0x0c,0x0d,0x0d,0x0c,0x0d,0x0d,0x0d,0x0d,0x0c,0x0c,0x0d,0x0c,0x0c,0x0c,0x0c,0x0b,0x0c,0x0a,0x0b,0x0c,0x0a,0x0a,0x0a,0x0a,0x08,0x08,0x08,0x07,0x07,0x06,0x06,0x05,0x04,0x04,0x02,0x03,0x01,0x00,0x01,0x00,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x01,0x02,0x03,0x02,0x03,0x04,0x04,0x06,0x06,0x07,0x08,0x06,0x09,0x09,0x0a,0x0a,0x0a,0x0c,0x0c,0x0a,0x0a,0x0d,0x0c,0x0d,0x0c,0x0d,0x0e,0x0e,0x0e,0x0f,0x0f,0x0e,0x0f,0x0f,0x0f,0x0f,0x0f,0x0e,0x0f,0x0e,0x0e,0x0e,0x0e,0x0d,0x0d,0x0c,0x0b,0x0d,0x0a,0x0a,0x0c,0x0c,0x0a,0x0a,0x0a,0x09,0x08,0x06,0x08,0x06,0x06,0x06,0x04,0x04,0x02,0x02,0x02,0x02,0x01,0x01,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x02,0x02,0x03,0x04,0x05,0x05,0x06,0x06,0x06,0x07,0x08,0x09,0x09,0x0a,0x0a,0x0b,0x0b,0x0c,0x0d,0x0e,0x0d,0x0d,0x0f,0x0f,0x10,0x10,0x10,0x11,0x11,0x11,0x11,0x11,0x11,0x12,0x12,0x12,0x12,0x12,0x11,0x11,0x11,0x11,0x11,0x11,0x10,0x10,0x0f,0x0e,0x0f,0x0d,0x0d,0x0e,0x0d,0x0c,0x0b,0x0b,0x0a,0x0a,0x09,0x09,0x07,0x07,0x06,0x06,0x06,0x05,0x04,0x03,0x02,0x02,0x02,0x01,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x02,0x02,0x03,0x04,0x05,0x06,0x06,0x07,0x07,0x07,0x08,0x09,0x0a,0x0b,0x0b,0x0c,0x0c,0x0d,0x0e,0x0f,0x0f,0x10,0x10,0x10,0x11,0x11,0x12,0x12,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x12,0x12,0x11,0x11,0x10,0x10,0x10,0x0f,0x0e,0x0d,0x0c,0x0c,0x0c,0x0b,0x0b,0x0a,0x09,0x08,0x07,0x07,0x07,0x06,0x05,0x04,0x03,0x03,0x02,0x02,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x02,0x02,0x03,0x03,0x05,0x06,0x06,0x07,0x07,0x08,0x08,0x09,0x0a,0x0b,0x0c,0x0c,0x0d,0x0d,0x0e,0x10,0x10,0x11,0x11,0x11,0x11,0x12,0x13,0x13,0x14,0x14,0x14,0x14,0x14,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x14,0x14,0x14,0x14,0x14,0x14,0x13,0x12,0x12,0x11,0x11,0x11,0x11,0x10,0x0f,0x0e,0x0d,0x0d,0x0c,0x0c,0x0b,0x0a,0x09,0x08,0x08,0x07,0x07,0x05,0x05,0x04,0x03,0x03,0x02,0x02,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x02,0x02,0x03,0x03,0x04,0x04,0x05,0x06,0x07,0x08,0x08,0x09,0x0a,0x0a,0x0b,0x0d,0x0d,0x0e,0x0f,0x10,0x10,0x11,0x12,0x12,0x13,0x14,0x13,0x14,0x15,0x15,0x16,0x16,0x16,0x16,0x16,0x16,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x16,0x16,0x16,0x16,0x16,0x16,0x15,0x14,0x14,0x13,0x14,0x13,0x12,0x12,0x10,0x0f,0x10,0x0e,0x0e,0x0d,0x0d,0x0b,0x0a,0x0a,0x09,0x08,0x08,0x07,0x06,0x05,0x04,0x04,0x03,0x03,0x01,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x02,0x03,0x04,0x05,0x05,0x05,0x07,0x08,0x08,0x09,0x0a,0x0a,0x0d,0x0b,0x0d,0x10,0x10,0x11,0x11,0x13,0x12,0x14,0x14,0x15,0x16,0x17,0x16,0x17,0x18,0x18,0x19,0x19,0x19,0x19,0x18,0x18,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x19,0x19,0x19,0x19,0x19,0x19,0x18,0x17,0x17,0x16,0x17,0x16,0x15,0x13,0x12,0x12,0x13,0x11,0x11,0x10,0x10,0x0d,0x0c,0x0d,0x0a,0x0a,0x09,0x09,0x08,0x06,0x06,0x05,0x05,0x04,0x03,0x01,0x01,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x01,0x02,0x02,0x02,0x03,0x05,0x06,0x07,0x06,0x07,0x09,0x0b,0x0a,0x0a,0x0d,0x0c,0x0d,0x0f,0x10,0x10,0x12,0x13,0x13,0x13,0x15,0x16,0x17,0x17,0x18,0x17,0x18,0x19,0x19,0x1a,0x1b,0x1b,0x1b,0x1b,0x1b,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x19,0x19,0x19,0x18,0x17,0x18,0x17,0x16,0x15,0x14,0x13,0x13,0x13,0x12,0x10,0x0f,0x0e,0x0d,0x0c,0x0c,0x0a,0x0b,0x0a,0x07,0x08,0x06,0x07,0x06,0x05,0x04,0x03,0x01,0x02,0x01,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x02,0x02,0x03,0x03,0x04,0x05,0x06,0x07,0x08,0x08,0x09,0x0c,0x0b,0x0c,0x0c,0x0d,0x0f,0x10,0x12,0x12,0x12,0x14,0x13,0x15,0x16,0x17,0x18,0x19,0x19,0x1a,0x19,0x1a,0x1b,0x1c,0x1c,0x1d,0x1d,0x1d,0x1d,0x1d,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1c,0x1b,0x1b,0x1a,0x19,0x1a,0x19,0x19,0x17,0x16,0x15,0x15,0x13,0x13,0x12,0x11,0x10,0x10,0x0f,0x0d,0x0c,0x0c,0x0b,0x09,0x0a,0x08,0x08,0x07,0x06,0x05,0x04,0x03,0x03,0x02,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x02,0x03,0x03,0x04,0x05,0x07,0x08,0x09,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,0x10,0x11,0x12,0x13,0x14,0x15,0x17,0x16,0x18,0x19,0x1a,0x1b,0x1b,0x1c,0x1c,0x1c,0x1d,0x1e,0x1f,0x1f,0x1f,0x20,0x20,0x20,0x20,0x20,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x20,0x20,0x20,0x20,0x20,0x1f,0x1f,0x1e,0x1d,0x1d,0x1c,0x1c,0x1c,0x1a,0x19,0x19,0x18,0x18,0x16,0x16,0x16,0x13,0x13,0x12,0x11,0x10,0x0e,0x0e,0x0d,0x0b,0x0b,0x0a,0x09,0x08,0x06,0x06,0x05,0x04,0x03,0x03,0x02,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x02,0x03,0x04,0x04,0x05,0x06,0x08,0x09,0x0a,0x0a,0x0b,0x0c,0x0c,0x0f,0x11,0x11,0x12,0x13,0x13,0x15,0x17,0x17,0x18,0x19,0x19,0x1a,0x1b,0x1d,0x1d,0x1e,0x1e,0x1f,0x1f,0x20,0x20,0x22,0x22,0x22,0x23,0x23,0x23,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x23,0x23,0x23,0x23,0x22,0x22,0x22,0x20,0x20,0x1f,0x1f,0x1e,0x1e,0x1d,0x1c,0x1a,0x1a,0x19,0x19,0x18,0x17,0x16,0x14,0x13,0x13,0x12,0x11,0x10,0x0e,0x0c,0x0c,0x0b,0x0a,0x09,0x08,0x07,0x06,0x05,0x04,0x04,0x03,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x03,0x04,0x05,0x05,0x06,0x07,0x08,0x08,0x0b,0x0b,0x0c,0x0d,0x0e,0x0f,0x11,0x13,0x13,0x14,0x15,0x16,0x17,0x17,0x1a,0x1a,0x1b,0x1c,0x1d,0x1e,0x1f,0x1f,0x20,0x20,0x21,0x22,0x23,0x23,0x24,0x24,0x25,0x25,0x25,0x25,0x26,0x26,0x26,0x26,0x26,0x26,0x26,0x25,0x25,0x25,0x25,0x24,0x24,0x22,0x22,0x21,0x21,0x20,0x20,0x1f,0x1e,0x1d,0x1c,0x1c,0x1b,0x1a,0x19,0x17,0x16,0x15,0x15,0x14,0x13,0x13,0x11,0x0f,0x0e,0x0d,0x0c,0x0b,0x0a,0x08,0x07,0x06,0x06,0x05,0x05,0x03,0x01,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x02,0x03,0x04,0x05,0x05,0x06,0x06,0x09,0x09,0x09,0x0c,0x0d,0x0e,0x0f,0x11,0x12,0x12,0x14,0x14,0x15,0x17,0x18,0x1a,0x1a,0x1b,0x1c,0x1d,0x1e,0x1f,0x21,0x20,0x23,0x22,0x24,0x24,0x24,0x25,0x27,0x26,0x27,0x27,0x29,0x29,0x29,0x27,0x2a,0x2a,0x2a,0x2a,0x27,0x27,0x29,0x29,0x29,0x27,0x26,0x26,0x27,0x24,0x24,0x24,0x24,0x22,0x21,0x20,0x20,0x1e,0x1e,0x1d,0x1c,0x1b,0x1a,0x18,0x17,0x17,0x15,0x14,0x13,0x12,0x12,0x0f,0x0f,0x0e,0x0d,0x0b,0x09,0x08,0x07,0x06,0x06,0x05,0x04,0x03,0x02,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x02,0x02,0x04,0x05,0x06,0x06,0x07,0x08,0x09,0x0c,0x0d,0x0e,0x10,0x11,0x12,0x10,0x15,0x16,0x16,0x17,0x18,0x1a,0x1a,0x1b,0x1d,0x1e,0x1f,0x20,0x21,0x21,0x23,0x24,0x26,0x25,0x27,0x27,0x27,0x28,0x2a,0x29,0x2a,0x2a,0x2c,0x2c,0x2c,0x2b,0x2d,0x2d,0x2d,0x2d,0x2b,0x2b,0x2c,0x2c,0x2c,0x2a,0x2a,0x29,0x2a,0x28,0x27,0x27,0x27,0x25,0x24,0x23,0x23,0x21,0x21,0x20,0x1f,0x1e,0x1d,0x1b,0x1a,0x1a,0x18,0x17,0x16,0x15,0x13,0x11,0x12,0x11,0x0f,0x0d,0x0c,0x0a,0x09,0x08,0x07,0x06,0x05,0x05,0x03,0x02,0x02,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x02,0x01,0x03,0x03,0x05,0x05,0x06,0x07,0x09,0x0a,0x0b,0x0c,0x0e,0x10,0x12,0x13,0x14,0x14,0x15,0x17,0x19,0x19,0x1a,0x1a,0x1d,0x1e,0x20,0x20,0x21,0x22,0x23,0x24,0x25,0x27,0x28,0x28,0x29,0x29,0x2a,0x2b,0x2c,0x2d,0x2e,0x2e,0x2e,0x2f,0x2e,0x2f,0x2f,0x30,0x30,0x30,0x30,0x2f,0x2e,0x2f,0x2e,0x2e,0x2e,0x2d,0x2c,0x2b,0x2a,0x29,0x29,0x28,0x27,0x26,0x25,0x24,0x23,0x22,0x21,0x20,0x1f,0x1d,0x1c,0x1a,0x1a,0x19,0x18,0x16,0x14,0x13,0x14,0x13,0x11,0x0f,0x0e,0x0c,0x0b,0x0a,0x09,0x07,0x07,0x05,0x05,0x03,0x03,0x01,0x02,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x02,0x02,0x03,0x04,0x05,0x05,0x07,0x08,0x09,0x0b,0x0c,0x0d,0x0d,0x0f,0x12,0x13,0x14,0x15,0x17,0x17,0x18,0x19,0x1b,0x1c,0x1c,0x1f,0x21,0x22,0x23,0x23,0x24,0x25,0x28,0x29,0x29,0x2a,0x2a,0x2b,0x2b,0x2e,0x2f,0x30,0x2f,0x30,0x31,0x32,0x31,0x32,0x32,0x33,0x32,0x32,0x32,0x33,0x32,0x32,0x31,0x32,0x30,0x30,0x2f,0x30,0x2e,0x2c,0x2b,0x2b,0x2a,0x2b,0x28,0x27,0x26,0x25,0x24,0x23,0x23,0x21,0x1f,0x1e,0x1c,0x1c,0x1b,0x19,0x18,0x16,0x15,0x15,0x14,0x13,0x11,0x0e,0x0c,0x0d,0x0c,0x0b,0x08,0x08,0x06,0x05,0x04,0x04,0x03,0x02,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x02,0x03,0x04,0x05,0x06,0x07,0x09,0x0a,0x0b,0x0c,0x0d,0x0f,0x10,0x12,0x13,0x14,0x15,0x16,0x18,0x1a,0x1b,0x1c,0x1e,0x1f,0x1f,0x21,0x23,0x24,0x26,0x26,0x27,0x27,0x2a,0x2b,0x2c,0x2d,0x2d,0x2e,0x30,0x32,0x33,0x34,0x33,0x34,0x34,0x36,0x35,0x36,0x36,0x37,0x35,0x35,0x35,0x37,0x36,0x36,0x35,0x36,0x33,0x33,0x33,0x34,0x32,0x30,0x2f,0x2e,0x2d,0x2e,0x2c,0x2a,0x28,0x27,0x27,0x26,0x25,0x23,0x21,0x20,0x1f,0x1f,0x1e,0x1c,0x1b,0x19,0x17,0x16,0x15,0x14,0x13,0x11,0x0f,0x0e,0x0d,0x0c,0x0b,0x08,0x08,0x07,0x05,0x05,0x04,0x03,0x02,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x02,0x03,0x04,0x04,0x05,0x06,0x07,0x09,0x0b,0x0c,0x0d,0x0e,0x10,0x12,0x14,0x15,0x16,0x17,0x18,0x18,0x1b,0x1d,0x1e,0x1f,0x20,0x21,0x23,0x25,0x27,0x28,0x29,0x2a,0x2b,0x2c,0x2d,0x2f,0x31,0x32,0x32,0x33,0x34,0x35,0x36,0x37,0x37,0x38,0x38,0x38,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x39,0x38,0x38,0x38,0x37,0x37,0x36,0x35,0x34,0x33,0x32,0x32,0x31,0x2f,0x2d,0x2c,0x2b,0x2a,0x29,0x28,0x26,0x24,0x22,0x21,0x20,0x1f,0x1e,0x1c,0x1a,0x18,0x18,0x17,0x16,0x15,0x13,0x11,0x0f,0x0e,0x0d,0x0c,0x0b,0x09,0x07,0x06,0x05,0x04,0x04,0x03,0x02,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x02,0x03,0x04,0x04,0x05,0x06,0x07,0x09,0x0b,0x0c,0x0d,0x0e,0x0f,0x11,0x13,0x15,0x16,0x17,0x18,0x19,0x1b,0x1d,0x1f,0x20,0x21,0x22,0x23,0x25,0x27,0x29,0x2a,0x2b,0x2c,0x2d,0x2f,0x31,0x32,0x33,0x34,0x35,0x35,0x36,0x38,0x39,0x39,0x3a,0x3a,0x3a,0x3b,0x3c,0x3c,0x3c,0x3c,0x3c,0x3c,0x3c,0x3c,0x3b,0x3b,0x3a,0x3a,0x3a,0x39,0x39,0x37,0x36,0x35,0x35,0x34,0x33,0x32,0x30,0x2e,0x2d,0x2c,0x2b,0x2a,0x28,0x26,0x24,0x23,0x22,0x21,0x20,0x1e,0x1c,0x1a,0x19,0x18,0x17,0x16,0x14,0x12,0x10,0x0f,0x0e,0x0d,0x0c,0x0a,0x07,0x07,0x06,0x05,0x04,0x03,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x06,0x09,0x0a,0x0c,0x0d,0x0e,0x0f,0x10,0x12,0x14,0x16,0x17,0x18,0x19,0x1a,0x1c,0x1e,0x20,0x22,0x23,0x24,0x25,0x26,0x2a,0x2c,0x2e,0x2f,0x30,0x31,0x33,0x35,0x36,0x35,0x36,0x37,0x39,0x3a,0x3c,0x3b,0x3c,0x3d,0x3d,0x3e,0x3e,0x3f,0x3f,0x40,0x40,0x40,0x40,0x40,0x3f,0x3f,0x3e,0x3e,0x3d,0x3d,0x3c,0x3c,0x3b,0x39,0x39,0x37,0x36,0x35,0x36,0x34,0x32,0x31,0x30,0x2e,0x2a,0x29,0x28,0x26,0x25,0x24,0x23,0x21,0x1f,0x1d,0x1c,0x1a,0x19,0x19,0x17,0x15,0x13,0x11,0x10,0x0f,0x0e,0x0d,0x0b,0x09,0x07,0x06,0x06,0x05,0x04,0x03,0x02,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x03,0x04,0x05,0x06,0x07,0x09,0x0b,0x0b,0x0c,0x0e,0x10,0x11,0x12,0x14,0x16,0x18,0x19,0x1a,0x1b,0x1d,0x1f,0x20,0x22,0x25,0x26,0x27,0x27,0x2a,0x2d,0x2f,0x31,0x32,0x33,0x34,0x36,0x38,0x39,0x39,0x3a,0x3b,0x3d,0x3d,0x3e,0x40,0x40,0x41,0x41,0x42,0x42,0x43,0x43,0x44,0x44,0x44,0x44,0x44,0x43,0x43,0x42,0x42,0x41,0x41,0x40,0x40,0x3d,0x3d,0x3d,0x3b,0x39,0x38,0x39,0x37,0x35,0x34,0x33,0x31,0x2e,0x2c,0x2b,0x28,0x28,0x27,0x26,0x24,0x22,0x1e,0x1f,0x1c,0x1b,0x1a,0x18,0x17,0x15,0x13,0x12,0x11,0x10,0x0e,0x0c,0x09,0x09,0x09,0x07,0x06,0x05,0x04,0x02,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x02,0x03,0x04,0x06,0x07,0x08,0x08,0x09,0x0a,0x0d,0x0c,0x10,0x12,0x13,0x14,0x16,0x18,0x19,0x1b,0x1d,0x1e,0x1f,0x20,0x23,0x25,0x26,0x28,0x29,0x2b,0x2e,0x30,0x31,0x33,0x34,0x35,0x36,0x38,0x3a,0x3c,0x3d,0x3e,0x3f,0x40,0x41,0x42,0x44,0x44,0x44,0x45,0x45,0x46,0x47,0x48,0x48,0x47,0x47,0x47,0x48,0x48,0x47,0x46,0x45,0x45,0x44,0x44,0x43,0x41,0x41,0x40,0x3f,0x3e,0x3d,0x3b,0x39,0x37,0x36,0x35,0x33,0x30,0x30,0x2f,0x2b,0x2a,0x29,0x28,0x26,0x24,0x22,0x21,0x1f,0x1e,0x1b,0x19,0x19,0x17,0x15,0x14,0x13,0x12,0x0e,0x0c,0x0b,0x0b,0x09,0x08,0x07,0x05,0x04,0x02,0x02,0x02,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x02,0x02,0x03,0x05,0x06,0x08,0x09,0x08,0x09,0x0c,0x0e,0x0e,0x12,0x14,0x15,0x16,0x17,0x19,0x19,0x1b,0x1f,0x1e,0x20,0x23,0x25,0x27,0x29,0x2a,0x2b,0x2d,0x31,0x33,0x33,0x35,0x36,0x37,0x38,0x3a,0x3c,0x3e,0x3f,0x40,0x41,0x42,0x44,0x46,0x47,0x48,0x49,0x49,0x4a,0x4a,0x4b,0x4b,0x4b,0x4c,0x4c,0x4c,0x4b,0x4b,0x4a,0x4a,0x4a,0x49,0x49,0x48,0x47,0x46,0x44,0x42,0x41,0x40,0x3f,0x3e,0x3b,0x39,0x38,0x37,0x35,0x32,0x33,0x32,0x2f,0x2c,0x2b,0x2a,0x28,0x26,0x25,0x22,0x1f,0x1e,0x1e,0x1b,0x19,0x18,0x17,0x16,0x15,0x14,0x10,0x0d,0x0d,0x0b,0x09,0x08,0x09,0x07,0x05,0x04,0x03,0x02,0x02,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x02,0x03,0x04,0x06,0x07,0x09,0x0a,0x0b,0x0c,0x0e,0x10,0x11,0x14,0x15,0x16,0x17,0x18,0x1a,0x1c,0x1e,0x21,0x21,0x23,0x27,0x27,0x29,0x2c,0x2d,0x2e,0x2f,0x32,0x35,0x36,0x38,0x39,0x3a,0x3b,0x3e,0x40,0x42,0x43,0x44,0x45,0x46,0x48,0x4a,0x4b,0x4b,0x4d,0x4d,0x4e,0x4e,0x4f,0x4f,0x4f,0x50,0x50,0x50,0x4f,0x4f,0x4e,0x4e,0x4e,0x4d,0x4d,0x4b,0x4b,0x4a,0x48,0x46,0x45,0x44,0x43,0x42,0x3f,0x3c,0x3b,0x3a,0x38,0x35,0x36,0x34,0x32,0x2f,0x2e,0x2d,0x2a,0x29,0x27,0x24,0x22,0x21,0x21,0x1f,0x1c,0x19,0x18,0x17,0x16,0x14,0x11,0x10,0x0f,0x0c,0x0c,0x0b,0x0a,0x08,0x06,0x04,0x04,0x03,0x02,0x01,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x02,0x03,0x03,0x05,0x07,0x08,0x09,0x0a,0x0b,0x0d,0x10,0x12,0x13,0x14,0x16,0x17,0x18,0x1a,0x1d,0x1f,0x21,0x22,0x23,0x25,0x27,0x29,0x2b,0x2e,0x2f,0x31,0x32,0x35,0x37,0x39,0x3c,0x3d,0x3e,0x40,0x43,0x45,0x46,0x47,0x48,0x49,0x4a,0x4c,0x4e,0x4f,0x50,0x51,0x51,0x52,0x52,0x52,0x54,0x54,0x54,0x54,0x54,0x54,0x54,0x52,0x52,0x52,0x51,0x51,0x50,0x4f,0x4d,0x4b,0x4a,0x49,0x48,0x47,0x45,0x43,0x40,0x3f,0x3e,0x3c,0x39,0x39,0x36,0x34,0x32,0x31,0x2e,0x2b,0x2b,0x28,0x26,0x25,0x23,0x21,0x1e,0x1e,0x1d,0x1a,0x18,0x17,0x16,0x14,0x12,0x10,0x0d,0x0c,0x0b,0x0a,0x09,0x08,0x06,0x04,0x03,0x03,0x02,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x02,0x02,0x03,0x04,0x05,0x06,0x08,0x0a,0x0b,0x0c,0x0e,0x11,0x13,0x14,0x15,0x17,0x18,0x19,0x1b,0x1e,0x1e,0x21,0x23,0x25,0x27,0x2a,0x2a,0x2c,0x2f,0x31,0x33,0x34,0x37,0x39,0x3b,0x3e,0x3f,0x40,0x41,0x45,0x46,0x48,0x4a,0x4b,0x4c,0x4d,0x4e,0x50,0x52,0x53,0x53,0x54,0x54,0x55,0x55,0x57,0x57,0x57,0x57,0x57,0x57,0x57,0x55,0x55,0x54,0x54,0x53,0x52,0x51,0x50,0x4e,0x4d,0x4c,0x4b,0x49,0x47,0x45,0x43,0x41,0x40,0x3e,0x3b,0x3b,0x39,0x36,0x34,0x33,0x31,0x2e,0x2c,0x2a,0x27,0x26,0x25,0x23,0x21,0x1e,0x1e,0x1b,0x19,0x18,0x17,0x15,0x13,0x11,0x0e,0x0d,0x0c,0x0b,0x0a,0x08,0x06,0x05,0x04,0x03,0x02,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x02,0x03,0x04,0x04,0x06,0x08,0x09,0x0b,0x0c,0x0d,0x0f,0x12,0x14,0x15,0x16,0x18,0x19,0x1a,0x1e,0x1f,0x1f,0x23,0x25,0x26,0x28,0x2b,0x2c,0x30,0x32,0x34,0x35,0x38,0x3b,0x3d,0x3f,0x42,0x41,0x44,0x46,0x48,0x4a,0x4b,0x4d,0x4e,0x4f,0x51,0x53,0x55,0x57,0x58,0x58,0x59,0x5a,0x5a,0x5c,0x5c,0x5c,0x5c,0x5c,0x5c,0x5c,0x5c,0x5b,0x5a,0x5a,0x59,0x58,0x58,0x56,0x54,0x52,0x51,0x4f,0x4e,0x4c,0x4b,0x49,0x47,0x46,0x44,0x40,0x3d,0x3d,0x3c,0x39,0x37,0x35,0x34,0x32,0x2f,0x2c,0x29,0x27,0x26,0x24,0x22,0x20,0x1f,0x1c,0x1a,0x19,0x18,0x16,0x14,0x13,0x10,0x0e,0x0d,0x0c,0x0b,0x09,0x07,0x05,0x04,0x04,0x03,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x03,0x04,0x05,0x05,0x06,0x09,0x0c,0x0c,0x0c,0x10,0x10,0x11,0x14,0x16,0x18,0x19,0x1b,0x1c,0x1f,0x20,0x23,0x26,0x27,0x28,0x2a,0x2d,0x2f,0x32,0x35,0x37,0x38,0x3b,0x3e,0x40,0x42,0x45,0x45,0x48,0x48,0x4b,0x4c,0x4e,0x51,0x52,0x53,0x55,0x57,0x59,0x5b,0x5c,0x5c,0x5d,0x5e,0x5f,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x5f,0x5e,0x5e,0x5d,0x5c,0x5c,0x5a,0x58,0x56,0x55,0x53,0x52,0x50,0x4e,0x4c,0x4a,0x49,0x48,0x44,0x41,0x41,0x3f,0x3c,0x3a,0x38,0x37,0x34,0x32,0x2f,0x2b,0x2a,0x28,0x27,0x24,0x23,0x1f,0x1d,0x1c,0x1b,0x19,0x18,0x17,0x14,0x11,0x11,0x10,0x0d,0x0d,0x0a,0x08,0x06,0x05,0x05,0x03,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x02,0x02,0x04,0x05,0x06,0x06,0x08,0x0b,0x0b,0x0d,0x0f,0x10,0x12,0x13,0x14,0x18,0x1a,0x1b,0x1d,0x1e,0x1f,0x23,0x25,0x25,0x29,0x2b,0x2c,0x2f,0x32,0x34,0x37,0x39,0x3b,0x3d,0x40,0x42,0x44,0x47,0x49,0x4a,0x4c,0x4f,0x51,0x53,0x55,0x57,0x58,0x5a,0x5c,0x5e,0x60,0x61,0x61,0x62,0x63,0x64,0x65,0x65,0x64,0x64,0x64,0x64,0x65,0x65,0x64,0x63,0x63,0x62,0x61,0x61,0x5f,0x5d,0x5b,0x5a,0x58,0x57,0x53,0x53,0x51,0x4e,0x4c,0x4a,0x48,0x45,0x44,0x41,0x3e,0x3c,0x3b,0x39,0x36,0x34,0x32,0x2f,0x2c,0x2b,0x29,0x26,0x25,0x22,0x1e,0x1e,0x1d,0x1b,0x1a,0x16,0x14,0x13,0x11,0x10,0x0e,0x0c,0x0b,0x09,0x07,0x06,0x06,0x05,0x01,0x01,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x03,0x05,0x06,0x07,0x07,0x09,0x0b,0x0c,0x0e,0x11,0x10,0x13,0x15,0x16,0x17,0x1b,0x1d,0x1f,0x20,0x22,0x26,0x27,0x29,0x2b,0x2d,0x2f,0x32,0x34,0x36,0x39,0x3c,0x3d,0x3f,0x42,0x44,0x46,0x49,0x4b,0x4d,0x50,0x53,0x55,0x57,0x59,0x5b,0x5c,0x5e,0x61,0x63,0x64,0x65,0x65,0x66,0x67,0x68,0x68,0x6a,0x69,0x69,0x69,0x69,0x6a,0x6a,0x68,0x68,0x67,0x66,0x65,0x65,0x63,0x61,0x5f,0x5e,0x5c,0x5b,0x57,0x56,0x54,0x51,0x4e,0x4d,0x4b,0x48,0x46,0x43,0x40,0x3e,0x3d,0x3b,0x38,0x36,0x35,0x32,0x2e,0x2d,0x2b,0x28,0x27,0x24,0x21,0x20,0x1f,0x1d,0x1b,0x17,0x16,0x14,0x11,0x10,0x0e,0x0c,0x0c,0x09,0x08,0x07,0x07,0x06,0x04,0x03,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x02,0x03,0x05,0x06,0x07,0x08,0x0a,0x0c,0x0d,0x10,0x11,0x13,0x14,0x16,0x19,0x18,0x1c,0x1e,0x20,0x22,0x25,0x26,0x29,0x2c,0x2e,0x2f,0x32,0x35,0x37,0x39,0x3c,0x3f,0x40,0x42,0x45,0x47,0x49,0x4c,0x4e,0x51,0x54,0x57,0x59,0x5b,0x5d,0x5f,0x60,0x62,0x65,0x67,0x68,0x69,0x69,0x6a,0x6b,0x6c,0x6c,0x6e,0x6e,0x6e,0x6e,0x6e,0x6e,0x6e,0x6c,0x6c,0x6b,0x6a,0x69,0x69,0x67,0x65,0x63,0x61,0x60,0x5f,0x5d,0x5a,0x58,0x55,0x52,0x51,0x4f,0x4c,0x49,0x46,0x43,0x41,0x40,0x3e,0x3b,0x39,0x37,0x34,0x31,0x2f,0x2d,0x2a,0x28,0x26,0x23,0x21,0x20,0x1e,0x1c,0x19,0x18,0x15,0x14,0x13,0x11,0x0f,0x0c,0x0a,0x09,0x08,0x07,0x06,0x03,0x03,0x02,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x02,0x04,0x06,0x07,0x08,0x08,0x0a,0x0d,0x0d,0x10,0x12,0x13,0x14,0x17,0x19,0x1b,0x1e,0x1f,0x21,0x23,0x26,0x28,0x2a,0x2d,0x2f,0x31,0x34,0x37,0x39,0x3c,0x3f,0x41,0x43,0x45,0x48,0x4b,0x4d,0x50,0x53,0x55,0x58,0x5b,0x5d,0x5f,0x61,0x63,0x65,0x67,0x6a,0x6c,0x6d,0x6e,0x6f,0x70,0x70,0x71,0x72,0x73,0x73,0x73,0x73,0x73,0x73,0x73,0x72,0x71,0x70,0x70,0x6f,0x6e,0x6c,0x6a,0x67,0x66,0x65,0x63,0x60,0x5e,0x5c,0x59,0x56,0x55,0x52,0x4f,0x4d,0x4b,0x48,0x45,0x43,0x40,0x3d,0x3b,0x39,0x36,0x33,0x31,0x2f,0x2c,0x2a,0x27,0x24,0x22,0x21,0x1f,0x1d,0x1b,0x18,0x16,0x14,0x13,0x12,0x10,0x0d,0x0d,0x0a,0x08,0x08,0x07,0x05,0x04,0x02,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x02,0x04,0x06,0x07,0x08,0x09,0x0a,0x0c,0x0f,0x11,0x13,0x14,0x15,0x18,0x1a,0x1c,0x1f,0x20,0x22,0x24,0x27,0x29,0x2b,0x2e,0x31,0x33,0x36,0x39,0x3b,0x3d,0x40,0x43,0x45,0x47,0x4a,0x4d,0x4f,0x52,0x55,0x57,0x5a,0x5d,0x5f,0x61,0x64,0x66,0x67,0x69,0x6b,0x6e,0x70,0x71,0x72,0x73,0x73,0x75,0x76,0x76,0x77,0x77,0x77,0x77,0x77,0x76,0x75,0x74,0x73,0x73,0x72,0x71,0x70,0x6e,0x6b,0x69,0x67,0x65,0x63,0x61,0x5f,0x5c,0x59,0x57,0x54,0x51,0x4f,0x4d,0x4a,0x47,0x45,0x41,0x3f,0x3d,0x3b,0x38,0x34,0x33,0x30,0x2d,0x2b,0x29,0x26,0x23,0x22,0x1f,0x1c,0x1c,0x19,0x17,0x15,0x14,0x13,0x10,0x0e,0x0c,0x0a,0x09,0x08,0x07,0x06,0x04,0x02,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x02,0x04,0x06,0x07,0x08,0x08,0x09,0x0b,0x0d,0x10,0x12,0x13,0x15,0x16,0x19,0x1c,0x1d,0x20,0x21,0x23,0x25,0x28,0x2b,0x2e,0x30,0x32,0x34,0x38,0x3b,0x3d,0x3f,0x42,0x45,0x47,0x4c,0x4f,0x51,0x52,0x54,0x59,0x5b,0x5e,0x61,0x63,0x65,0x68,0x6a,0x6c,0x6e,0x70,0x73,0x75,0x76,0x77,0x78,0x79,0x7a,0x7c,0x7b,0x7c,0x7d,0x7d,0x7d,0x7c,0x7c,0x7b,0x7a,0x79,0x78,0x77,0x75,0x75,0x73,0x70,0x6d,0x6c,0x69,0x66,0x65,0x62,0x5e,0x5c,0x5b,0x58,0x54,0x51,0x50,0x4e,0x4a,0x47,0x45,0x41,0x3f,0x3d,0x3a,0x36,0x34,0x31,0x2f,0x2d,0x2a,0x27,0x25,0x23,0x20,0x1d,0x1d,0x1b,0x18,0x16,0x15,0x13,0x11,0x10,0x0d,0x0b,0x09,0x08,0x08,0x07,0x05,0x02,0x02,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x02,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0f,0x11,0x13,0x15,0x16,0x18,0x1a,0x1d,0x1d,0x21,0x23,0x25,0x28,0x2a,0x2e,0x31,0x32,0x35,0x37,0x3b,0x3e,0x40,0x42,0x45,0x48,0x4a,0x4f,0x52,0x54,0x56,0x5a,0x5d,0x5f,0x62,0x65,0x67,0x69,0x6c,0x6e,0x70,0x72,0x75,0x77,0x78,0x7a,0x7c,0x7d,0x7e,0x7e,0x81,0x81,0x82,0x82,0x82,0x82,0x82,0x81,0x7f,0x7e,0x7e,0x7d,0x7c,0x79,0x78,0x77,0x74,0x71,0x70,0x6e,0x6b,0x69,0x66,0x63,0x60,0x5f,0x5c,0x58,0x55,0x53,0x50,0x4d,0x4a,0x47,0x44,0x42,0x40,0x3d,0x39,0x37,0x34,0x32,0x30,0x2d,0x29,0x28,0x25,0x23,0x21,0x1d,0x1b,0x19,0x17,0x16,0x14,0x11,0x11,0x0d,0x0c,0x0a,0x09,0x08,0x07,0x05,0x03,0x02,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x02,0x02,0x03,0x04,0x06,0x08,0x09,0x0a,0x0b,0x0e,0x11,0x11,0x13,0x17,0x17,0x1a,0x1b,0x1d,0x20,0x23,0x25,0x27,0x2a,0x2c,0x30,0x32,0x35,0x37,0x39,0x3d,0x40,0x42,0x44,0x47,0x4b,0x4d,0x51,0x54,0x56,0x5a,0x5f,0x60,0x62,0x65,0x68,0x6a,0x6d,0x71,0x73,0x75,0x76,0x79,0x7c,0x7c,0x80,0x81,0x82,0x83,0x85,0x86,0x87,0x87,0x87,0x87,0x87,0x87,0x87,0x84,0x83,0x83,0x82,0x81,0x7f,0x7c,0x7a,0x78,0x76,0x75,0x73,0x70,0x6d,0x6b,0x68,0x64,0x62,0x5f,0x5b,0x59,0x55,0x50,0x4f,0x4d,0x49,0x46,0x44,0x42,0x3f,0x3b,0x39,0x36,0x34,0x32,0x2f,0x2b,0x2a,0x27,0x25,0x22,0x20,0x1d,0x1a,0x19,0x17,0x16,0x13,0x10,0x10,0x0e,0x0a,0x0a,0x09,0x08,0x07,0x05,0x03,0x02,0x02,0x01,0x01,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x02,0x02,0x04,0x05,0x08,0x09,0x0a,0x0b,0x0d,0x0f,0x11,0x12,0x15,0x17,0x17,0x1b,0x1d,0x20,0x22,0x24,0x27,0x29,0x2a,0x2c,0x31,0x32,0x36,0x39,0x3b,0x3e,0x42,0x44,0x46,0x49,0x4d,0x4f,0x53,0x56,0x59,0x5c,0x5f,0x63,0x65,0x6a,0x6d,0x6f,0x71,0x75,0x77,0x78,0x7b,0x7e,0x80,0x82,0x85,0x86,0x87,0x88,0x8b,0x8b,0x8c,0x8c,0x8c,0x8c,0x8c,0x8c,0x8c,0x8a,0x8a,0x88,0x87,0x86,0x84,0x81,0x7f,0x7d,0x7a,0x78,0x76,0x72,0x71,0x6f,0x6c,0x68,0x65,0x61,0x5d,0x5c,0x59,0x55,0x51,0x4f,0x4b,0x48,0x46,0x44,0x41,0x3d,0x3b,0x38,0x35,0x33,0x30,0x2c,0x2b,0x29,0x26,0x23,0x21,0x1f,0x1b,0x1a,0x17,0x16,0x13,0x12,0x11,0x0e,0x0c,0x0b,0x0a,0x09,0x07,0x05,0x03,0x02,0x02,0x01,0x01,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x02,0x03,0x05,0x07,0x09,0x0a,0x0b,0x0c,0x0d,0x10,0x12,0x14,0x17,0x18,0x1a,0x1b,0x1e,0x20,0x23,0x26,0x28,0x2a,0x2d,0x30,0x33,0x35,0x38,0x3c,0x3e,0x3f,0x43,0x47,0x49,0x4c,0x50,0x52,0x55,0x59,0x5d,0x5e,0x62,0x67,0x69,0x6e,0x71,0x73,0x75,0x78,0x7a,0x7c,0x80,0x82,0x84,0x86,0x89,0x8a,0x8d,0x8e,0x8e,0x90,0x92,0x92,0x92,0x92,0x92,0x92,0x91,0x90,0x8e,0x8e,0x8d,0x8a,0x88,0x86,0x84,0x81,0x7e,0x7c,0x7a,0x77,0x74,0x73,0x70,0x6c,0x69,0x65,0x61,0x60,0x5d,0x59,0x54,0x52,0x4f,0x4b,0x49,0x47,0x44,0x40,0x3e,0x3a,0x37,0x35,0x31,0x2d,0x2c,0x2a,0x27,0x24,0x22,0x20,0x1d,0x1b,0x1a,0x17,0x14,0x14,0x11,0x0f,0x0d,0x0c,0x0b,0x0a,0x08,0x06,0x04,0x03,0x02,0x01,0x01,0x01,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x01,0x01,0x02,0x02,0x03,0x05,0x07,0x09,0x0a,0x0b,0x0c,0x0e,0x10,0x13,0x13,0x16,0x19,0x1a,0x1c,0x1f,0x21,0x23,0x26,0x29,0x2b,0x2f,0x32,0x34,0x36,0x39,0x3d,0x3f,0x41,0x45,0x49,0x4b,0x4f,0x53,0x55,0x58,0x5c,0x60,0x63,0x67,0x6a,0x6d,0x71,0x74,0x76,0x78,0x7b,0x7f,0x81,0x85,0x88,0x89,0x8c,0x8f,0x90,0x92,0x93,0x94,0x96,0x97,0x97,0x97,0x97,0x97,0x97,0x97,0x96,0x93,0x93,0x92,0x90,0x8e,0x8b,0x89,0x86,0x83,0x81,0x7d,0x7a,0x78,0x76,0x73,0x6f,0x6d,0x6a,0x66,0x63,0x5f,0x5b,0x58,0x55,0x52,0x4e,0x4b,0x48,0x44,0x41,0x3f,0x3b,0x38,0x36,0x34,0x31,0x2d,0x2b,0x28,0x25,0x23,0x21,0x1e,0x1c,0x1a,0x18,0x15,0x13,0x13,0x10,0x0e,0x0c,0x0b,0x0a,0x08,0x06,0x04,0x03,0x02,0x02,0x01,0x01,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x01,0x01,0x02,0x03,0x03,0x05,0x07,0x09,0x0a,0x0c,0x0d,0x0e,0x11,0x13,0x15,0x18,0x19,0x1b,0x1d,0x20,0x22,0x24,0x27,0x2a,0x2c,0x30,0x33,0x35,0x37,0x3a,0x3e,0x40,0x44,0x48,0x4a,0x4e,0x52,0x55,0x57,0x5a,0x5e,0x62,0x65,0x69,0x6d,0x6f,0x72,0x75,0x79,0x7b,0x7e,0x82,0x84,0x88,0x8b,0x8d,0x8f,0x92,0x94,0x96,0x97,0x99,0x9b,0x9b,0x9b,0x9b,0x9b,0x9b,0x9b,0x9b,0x99,0x98,0x97,0x96,0x94,0x91,0x8f,0x8d,0x8a,0x86,0x84,0x80,0x7d,0x7b,0x78,0x74,0x71,0x6f,0x6c,0x68,0x65,0x61,0x5d,0x5a,0x57,0x53,0x4f,0x4d,0x4a,0x47,0x42,0x40,0x3c,0x39,0x37,0x35,0x32,0x2e,0x2c,0x29,0x26,0x24,0x21,0x1e,0x1c,0x1b,0x18,0x15,0x15,0x12,0x10,0x0e,0x0d,0x0c,0x0a,0x08,0x06,0x04,0x03,0x03,0x02,0x01,0x01,0x00,0x00,0x00, +0x00,0x00,0x00,0x01,0x01,0x01,0x02,0x03,0x04,0x06,0x08,0x0a,0x0b,0x0c,0x0d,0x0f,0x11,0x14,0x16,0x18,0x1a,0x1c,0x1e,0x21,0x23,0x25,0x27,0x2b,0x2d,0x31,0x34,0x36,0x38,0x3c,0x3f,0x42,0x46,0x49,0x4c,0x50,0x54,0x58,0x5a,0x5e,0x62,0x65,0x6a,0x6e,0x71,0x71,0x77,0x7a,0x7c,0x80,0x84,0x87,0x8a,0x8e,0x91,0x93,0x95,0x98,0x9a,0x9c,0x9d,0x9e,0xa0,0xa2,0xa2,0xa1,0xa1,0xa1,0xa2,0xa0,0x9e,0x9e,0x9d,0x9c,0x9a,0x97,0x95,0x93,0x90,0x8c,0x8a,0x87,0x83,0x7f,0x7b,0x77,0x75,0x71,0x6f,0x6b,0x69,0x64,0x60,0x5d,0x5a,0x56,0x52,0x4f,0x4b,0x48,0x44,0x42,0x3e,0x3a,0x38,0x36,0x33,0x2f,0x2d,0x2a,0x27,0x24,0x22,0x1f,0x1d,0x1c,0x1a,0x17,0x15,0x13,0x10,0x0f,0x0d,0x0c,0x0b,0x09,0x07,0x05,0x04,0x03,0x02,0x01,0x01,0x00,0x00,0x00, +0x00,0x00,0x00,0x01,0x01,0x02,0x02,0x03,0x04,0x06,0x08,0x0a,0x0b,0x0d,0x0e,0x10,0x12,0x15,0x16,0x19,0x1b,0x1d,0x1f,0x22,0x24,0x27,0x2a,0x2c,0x30,0x33,0x36,0x38,0x3a,0x3e,0x42,0x44,0x48,0x4b,0x4f,0x53,0x57,0x5b,0x5d,0x61,0x65,0x67,0x6d,0x71,0x74,0x75,0x79,0x7d,0x81,0x84,0x88,0x8c,0x8e,0x91,0x95,0x98,0x99,0x9c,0x9f,0xa1,0xa2,0xa2,0xa4,0xa6,0xa7,0xa7,0xa7,0xa7,0xa7,0xa6,0xa4,0xa3,0xa2,0xa1,0x9f,0x9b,0x99,0x97,0x94,0x90,0x8e,0x8b,0x87,0x83,0x7f,0x7b,0x79,0x75,0x73,0x6f,0x6c,0x67,0x63,0x60,0x5d,0x59,0x55,0x52,0x4e,0x4b,0x46,0x43,0x41,0x3d,0x3a,0x38,0x35,0x31,0x30,0x2b,0x2a,0x27,0x23,0x20,0x1e,0x1d,0x1b,0x18,0x16,0x13,0x11,0x10,0x0e,0x0d,0x0b,0x09,0x06,0x05,0x04,0x03,0x02,0x02,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x01,0x02,0x02,0x02,0x04,0x05,0x07,0x08,0x0a,0x0d,0x0e,0x10,0x11,0x13,0x17,0x18,0x1b,0x1d,0x1e,0x20,0x24,0x26,0x28,0x2b,0x2d,0x30,0x35,0x38,0x3a,0x3c,0x40,0x44,0x45,0x4a,0x4d,0x51,0x55,0x59,0x5d,0x5f,0x63,0x67,0x6a,0x6f,0x73,0x76,0x79,0x7d,0x81,0x84,0x89,0x8d,0x91,0x93,0x95,0x99,0x9d,0x9f,0xa1,0xa4,0xa6,0xa7,0xa9,0xab,0xab,0xad,0xad,0xad,0xad,0xad,0xac,0xab,0xa9,0xa7,0xa6,0xa4,0xa0,0x9d,0x9d,0x98,0x95,0x93,0x90,0x8c,0x87,0x83,0x7f,0x7c,0x79,0x75,0x71,0x6e,0x69,0x65,0x61,0x5f,0x5b,0x57,0x54,0x50,0x4c,0x49,0x45,0x43,0x3f,0x3c,0x3a,0x37,0x33,0x30,0x2c,0x29,0x28,0x25,0x22,0x1e,0x1e,0x1c,0x1a,0x17,0x15,0x12,0x11,0x0f,0x0e,0x0b,0x0a,0x07,0x06,0x05,0x04,0x02,0x02,0x01,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x02,0x03,0x04,0x04,0x05,0x07,0x0a,0x0c,0x0d,0x0f,0x10,0x12,0x14,0x16,0x19,0x1b,0x1d,0x1f,0x20,0x24,0x27,0x29,0x2c,0x2f,0x30,0x36,0x39,0x3c,0x3e,0x42,0x46,0x48,0x4c,0x4f,0x53,0x57,0x5b,0x5f,0x61,0x65,0x69,0x6e,0x71,0x76,0x78,0x7b,0x81,0x84,0x89,0x8d,0x91,0x94,0x97,0x9a,0x9e,0xa1,0xa3,0xa6,0xa9,0xab,0xac,0xb0,0xb1,0xb1,0xb2,0xb2,0xb3,0xb2,0xb2,0xb1,0xb0,0xae,0xac,0xab,0xa9,0xa5,0xa2,0xa1,0x9d,0x99,0x97,0x93,0x8f,0x8c,0x87,0x83,0x7e,0x7b,0x77,0x73,0x70,0x6b,0x67,0x64,0x61,0x5d,0x59,0x56,0x50,0x4c,0x4b,0x48,0x45,0x41,0x3e,0x3c,0x38,0x34,0x30,0x2f,0x2a,0x29,0x26,0x22,0x20,0x1f,0x1d,0x1a,0x18,0x16,0x13,0x12,0x10,0x0d,0x0a,0x0b,0x09,0x06,0x05,0x04,0x04,0x02,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x02,0x03,0x04,0x05,0x06,0x08,0x0a,0x0c,0x0e,0x0f,0x10,0x12,0x15,0x17,0x19,0x1c,0x1e,0x1f,0x22,0x26,0x28,0x2a,0x2d,0x31,0x33,0x36,0x3a,0x3d,0x3f,0x43,0x47,0x4a,0x4d,0x51,0x56,0x59,0x5d,0x61,0x64,0x67,0x6b,0x71,0x74,0x79,0x7b,0x7e,0x83,0x89,0x8d,0x91,0x95,0x98,0x9b,0xa0,0xa4,0xa5,0xa7,0xaa,0xae,0xb1,0xb2,0xb5,0xb5,0xb8,0xb7,0xb7,0xb9,0xb7,0xb8,0xb7,0xb4,0xb3,0xb2,0xb1,0xaf,0xaa,0xa7,0xa5,0xa3,0x9d,0x9b,0x97,0x93,0x90,0x8b,0x87,0x81,0x7e,0x7a,0x76,0x73,0x6f,0x6b,0x67,0x64,0x60,0x5c,0x58,0x53,0x4f,0x4c,0x4a,0x46,0x42,0x3f,0x3d,0x39,0x35,0x33,0x2f,0x2c,0x2a,0x28,0x24,0x21,0x1f,0x1d,0x1b,0x19,0x17,0x14,0x12,0x10,0x0e,0x0b,0x0b,0x09,0x07,0x06,0x05,0x04,0x01,0x01,0x00,0x00,0x00, +0x00,0x00,0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x08,0x0a,0x0a,0x0d,0x10,0x11,0x13,0x16,0x18,0x1a,0x1c,0x1e,0x20,0x23,0x25,0x28,0x2a,0x2e,0x32,0x34,0x36,0x3a,0x3e,0x40,0x44,0x48,0x4b,0x4f,0x53,0x56,0x5b,0x5f,0x63,0x66,0x6a,0x6e,0x73,0x77,0x7b,0x7f,0x82,0x87,0x8c,0x91,0x94,0x98,0x9c,0x9f,0xa3,0xa7,0xab,0xad,0xb0,0xb4,0xb6,0xb7,0xba,0xbc,0xbe,0xbd,0xbd,0xbf,0xbd,0xbe,0xbd,0xba,0xb8,0xb7,0xb6,0xb2,0xaf,0xad,0xa9,0xa5,0xa2,0x9f,0x9b,0x97,0x93,0x8f,0x8b,0x85,0x82,0x7e,0x7a,0x76,0x71,0x6d,0x69,0x66,0x61,0x5e,0x5a,0x55,0x51,0x4d,0x4b,0x47,0x43,0x40,0x3d,0x39,0x36,0x34,0x30,0x2d,0x2a,0x28,0x25,0x22,0x20,0x1e,0x1b,0x19,0x17,0x14,0x12,0x11,0x0f,0x0c,0x0a,0x08,0x07,0x06,0x05,0x04,0x03,0x02,0x01,0x00,0x00, +0x00,0x00,0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x08,0x0a,0x0b,0x0d,0x10,0x11,0x14,0x17,0x17,0x19,0x1c,0x1f,0x20,0x24,0x27,0x29,0x2b,0x2e,0x32,0x35,0x37,0x3b,0x3f,0x41,0x45,0x49,0x4c,0x50,0x54,0x59,0x5c,0x60,0x65,0x67,0x6c,0x70,0x75,0x79,0x7c,0x81,0x84,0x8a,0x8e,0x93,0x97,0x9b,0x9f,0xa2,0xa6,0xaa,0xae,0xb0,0xb3,0xb7,0xb9,0xbc,0xbf,0xc1,0xc2,0xc3,0xc3,0xc3,0xc3,0xc3,0xc2,0xc0,0xbd,0xbb,0xb9,0xb6,0xb3,0xb0,0xac,0xa8,0xa5,0xa2,0x9d,0x9a,0x96,0x91,0x8d,0x88,0x84,0x7f,0x7b,0x78,0x73,0x6f,0x6a,0x67,0x63,0x5f,0x5b,0x57,0x53,0x4e,0x4c,0x48,0x44,0x41,0x3e,0x3a,0x37,0x35,0x31,0x2d,0x2b,0x29,0x26,0x22,0x20,0x1e,0x1b,0x19,0x17,0x14,0x13,0x11,0x0f,0x0c,0x0a,0x08,0x07,0x06,0x05,0x04,0x03,0x02,0x01,0x00,0x00, +0x00,0x00,0x00,0x00,0x02,0x03,0x04,0x05,0x07,0x0a,0x0c,0x0c,0x0f,0x10,0x11,0x13,0x16,0x18,0x1a,0x1d,0x1f,0x21,0x24,0x27,0x29,0x2c,0x30,0x33,0x35,0x39,0x3d,0x40,0x43,0x47,0x4a,0x4d,0x51,0x55,0x5a,0x5e,0x62,0x66,0x69,0x6d,0x72,0x76,0x7b,0x7f,0x85,0x88,0x8e,0x92,0x97,0x9b,0x9f,0xa3,0xa6,0xab,0xaf,0xb3,0xb5,0xb9,0xbd,0xbf,0xc2,0xc5,0xc7,0xc7,0xc8,0xc8,0xc8,0xc8,0xc8,0xc7,0xc7,0xc4,0xc1,0xbf,0xbd,0xb8,0xb5,0xb1,0xad,0xa9,0xa6,0xa1,0x9e,0x9a,0x95,0x91,0x8c,0x88,0x82,0x7e,0x7a,0x75,0x71,0x6c,0x69,0x65,0x61,0x5d,0x58,0x54,0x4f,0x4d,0x49,0x45,0x42,0x3f,0x3a,0x37,0x35,0x33,0x2f,0x2c,0x28,0x25,0x23,0x21,0x1f,0x1c,0x19,0x18,0x15,0x13,0x11,0x0f,0x0c,0x0c,0x0a,0x07,0x06,0x05,0x04,0x03,0x02,0x00,0x00,0x00, +0x00,0x00,0x00,0x01,0x02,0x04,0x05,0x06,0x07,0x08,0x0a,0x0c,0x0f,0x11,0x12,0x14,0x17,0x19,0x1b,0x1d,0x20,0x22,0x25,0x28,0x2a,0x2d,0x31,0x34,0x36,0x3a,0x3e,0x40,0x45,0x49,0x4c,0x4f,0x53,0x57,0x5c,0x60,0x65,0x68,0x6b,0x70,0x75,0x79,0x7e,0x82,0x88,0x8b,0x91,0x96,0x9b,0x9f,0xa3,0xa7,0xaa,0xaf,0xb3,0xb7,0xbb,0xbf,0xc2,0xc4,0xc7,0xca,0xcc,0xcd,0xce,0xce,0xcf,0xce,0xce,0xcd,0xcc,0xc9,0xc5,0xc4,0xc0,0xbc,0xba,0xb5,0xb1,0xad,0xaa,0xa5,0xa2,0x9e,0x99,0x94,0x8f,0x8b,0x85,0x81,0x7d,0x78,0x74,0x6e,0x6b,0x68,0x64,0x5f,0x5a,0x56,0x51,0x50,0x4b,0x46,0x43,0x41,0x3c,0x39,0x36,0x34,0x30,0x2c,0x2a,0x27,0x24,0x22,0x1f,0x1c,0x1a,0x18,0x15,0x13,0x12,0x10,0x0e,0x0c,0x09,0x08,0x07,0x06,0x05,0x03,0x01,0x00,0x00,0x00, +0x00,0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x0a,0x0d,0x10,0x11,0x13,0x15,0x18,0x19,0x1c,0x1f,0x20,0x23,0x25,0x28,0x2b,0x2f,0x33,0x35,0x38,0x3b,0x3f,0x43,0x45,0x49,0x4e,0x51,0x55,0x59,0x5e,0x62,0x67,0x6b,0x6e,0x73,0x77,0x7a,0x7f,0x84,0x8a,0x8d,0x93,0x98,0x9d,0xa1,0xa5,0xab,0xae,0xb3,0xb7,0xbc,0xc0,0xc4,0xc7,0xc9,0xcd,0xcf,0xd1,0xd4,0xd5,0xd5,0xd5,0xd5,0xd5,0xd4,0xd1,0xce,0xca,0xc9,0xc5,0xc1,0xbf,0xba,0xb6,0xb1,0xae,0xa9,0xa5,0xa0,0x9b,0x96,0x91,0x8d,0x87,0x83,0x7f,0x7a,0x76,0x71,0x6e,0x6a,0x66,0x61,0x5c,0x58,0x53,0x50,0x4d,0x48,0x45,0x42,0x3e,0x3a,0x38,0x34,0x31,0x2e,0x2b,0x28,0x25,0x23,0x20,0x1d,0x1b,0x19,0x16,0x14,0x13,0x11,0x0f,0x0d,0x0a,0x08,0x07,0x06,0x05,0x03,0x01,0x01,0x00,0x00, +0x00,0x00,0x00,0x02,0x03,0x04,0x05,0x06,0x08,0x0b,0x0b,0x0d,0x0f,0x12,0x13,0x15,0x18,0x1a,0x1c,0x1f,0x22,0x23,0x26,0x2a,0x2c,0x30,0x34,0x36,0x39,0x3c,0x40,0x44,0x47,0x4b,0x4f,0x51,0x57,0x5b,0x60,0x64,0x68,0x6d,0x70,0x74,0x77,0x7d,0x82,0x86,0x8c,0x8f,0x95,0x9a,0x9f,0xa4,0xa8,0xad,0xb0,0xb6,0xba,0xbf,0xc4,0xc8,0xcc,0xce,0xd2,0xd4,0xd7,0xda,0xdb,0xdb,0xdb,0xdb,0xdb,0xd9,0xd6,0xd3,0xd0,0xce,0xca,0xc6,0xc3,0xbe,0xb9,0xb3,0xb0,0xab,0xa7,0xa3,0x9e,0x99,0x93,0x8f,0x89,0x85,0x81,0x7c,0x78,0x73,0x70,0x6b,0x67,0x63,0x5e,0x5a,0x55,0x50,0x4e,0x4a,0x46,0x42,0x3e,0x3b,0x39,0x34,0x31,0x2f,0x2c,0x2a,0x25,0x23,0x20,0x1e,0x1c,0x1a,0x17,0x15,0x13,0x12,0x0f,0x0c,0x0b,0x09,0x07,0x06,0x05,0x04,0x02,0x01,0x00,0x00, +0x00,0x00,0x00,0x01,0x03,0x05,0x06,0x07,0x08,0x0a,0x0b,0x0d,0x10,0x12,0x14,0x16,0x19,0x1b,0x1d,0x1f,0x22,0x24,0x26,0x29,0x2d,0x2f,0x33,0x37,0x39,0x3c,0x40,0x44,0x48,0x4b,0x50,0x52,0x58,0x5c,0x61,0x65,0x69,0x6e,0x71,0x75,0x7a,0x80,0x85,0x89,0x8f,0x92,0x98,0x9c,0xa2,0xa8,0xac,0xaf,0xb4,0xba,0xbe,0xc3,0xc8,0xcc,0xd0,0xd2,0xd7,0xda,0xdd,0xde,0xdf,0xdf,0xe1,0xdf,0xdf,0xdd,0xdb,0xd8,0xd5,0xd2,0xce,0xca,0xc7,0xc2,0xbd,0xb7,0xb3,0xaf,0xaa,0xa6,0xa1,0x9c,0x96,0x92,0x8c,0x88,0x83,0x7e,0x79,0x74,0x71,0x6c,0x68,0x64,0x5f,0x5b,0x56,0x53,0x4e,0x4a,0x47,0x43,0x3f,0x3c,0x39,0x36,0x32,0x2f,0x2b,0x27,0x26,0x24,0x21,0x1e,0x1c,0x1a,0x17,0x15,0x14,0x12,0x0f,0x0d,0x0b,0x09,0x08,0x07,0x06,0x05,0x03,0x01,0x00,0x00, +0x00,0x00,0x01,0x01,0x03,0x05,0x06,0x07,0x08,0x0a,0x0c,0x0e,0x11,0x13,0x14,0x16,0x19,0x1b,0x1d,0x20,0x22,0x24,0x27,0x2a,0x2d,0x30,0x34,0x37,0x3a,0x3d,0x41,0x44,0x49,0x4d,0x51,0x53,0x58,0x5c,0x61,0x65,0x69,0x6f,0x72,0x77,0x7c,0x81,0x86,0x8a,0x90,0x95,0x9a,0x9f,0xa4,0xa9,0xae,0xb4,0xb7,0xbd,0xc1,0xc6,0xcb,0xd0,0xd5,0xd8,0xdc,0xe0,0xe2,0xe4,0xe5,0xe5,0xe6,0xe5,0xe5,0xe3,0xe1,0xde,0xda,0xd8,0xd3,0xcf,0xca,0xc5,0xc1,0xbb,0xb7,0xb1,0xad,0xa8,0xa3,0x9e,0x98,0x94,0x8e,0x89,0x84,0x7f,0x7a,0x75,0x72,0x6d,0x69,0x64,0x5f,0x5b,0x56,0x53,0x4f,0x4b,0x48,0x43,0x3f,0x3c,0x3a,0x35,0x32,0x30,0x2c,0x29,0x26,0x24,0x22,0x1f,0x1d,0x1a,0x17,0x15,0x14,0x12,0x10,0x0e,0x0b,0x09,0x08,0x07,0x06,0x05,0x03,0x01,0x01,0x00, +0x00,0x00,0x01,0x01,0x03,0x05,0x06,0x07,0x08,0x0a,0x0c,0x0e,0x11,0x13,0x14,0x16,0x19,0x1b,0x1d,0x20,0x23,0x25,0x27,0x2a,0x2e,0x31,0x34,0x38,0x3a,0x3d,0x41,0x45,0x49,0x4d,0x51,0x54,0x59,0x5d,0x62,0x66,0x6a,0x70,0x73,0x78,0x7d,0x82,0x87,0x8c,0x91,0x96,0x9c,0xa1,0xa6,0xab,0xaf,0xb5,0xb9,0xbf,0xc3,0xc8,0xcd,0xd2,0xd8,0xdb,0xdf,0xe3,0xe5,0xe7,0xea,0xea,0xea,0xea,0xe9,0xe7,0xe5,0xe2,0xdd,0xdb,0xd7,0xd1,0xcc,0xc7,0xc3,0xbd,0xb9,0xb3,0xae,0xa9,0xa4,0x9f,0x9a,0x95,0x8f,0x8a,0x85,0x80,0x7b,0x76,0x73,0x6d,0x69,0x65,0x60,0x5c,0x57,0x54,0x50,0x4c,0x47,0x44,0x40,0x3d,0x3a,0x36,0x32,0x30,0x2d,0x29,0x27,0x25,0x22,0x1f,0x1d,0x1b,0x18,0x16,0x14,0x12,0x10,0x0e,0x0b,0x09,0x08,0x07,0x06,0x04,0x02,0x01,0x01,0x00, +0x00,0x00,0x01,0x01,0x03,0x05,0x06,0x07,0x08,0x0a,0x0c,0x0e,0x11,0x13,0x14,0x16,0x19,0x1b,0x1d,0x20,0x23,0x25,0x29,0x2c,0x2e,0x32,0x36,0x38,0x3a,0x3e,0x42,0x45,0x4a,0x4e,0x52,0x54,0x5a,0x5e,0x63,0x67,0x6b,0x70,0x73,0x79,0x7e,0x83,0x88,0x8e,0x93,0x97,0x9d,0xa2,0xa7,0xac,0xb3,0xb7,0xbc,0xc1,0xc6,0xcd,0xd2,0xd7,0xdc,0xdf,0xe4,0xe8,0xea,0xec,0xef,0xef,0xef,0xef,0xee,0xeb,0xe9,0xe6,0xe2,0xdf,0xda,0xd6,0xd0,0xca,0xc6,0xbf,0xba,0xb5,0xb1,0xab,0xa6,0xa1,0x9b,0x96,0x90,0x8c,0x87,0x81,0x7c,0x77,0x73,0x6e,0x6a,0x66,0x61,0x5d,0x58,0x54,0x50,0x4c,0x49,0x44,0x40,0x3d,0x3a,0x36,0x33,0x31,0x2e,0x2b,0x27,0x25,0x22,0x1f,0x1d,0x1b,0x18,0x16,0x14,0x12,0x10,0x0e,0x0b,0x09,0x08,0x07,0x06,0x04,0x02,0x01,0x01,0x00, +0x00,0x00,0x01,0x01,0x03,0x05,0x06,0x07,0x08,0x0a,0x0d,0x0f,0x11,0x13,0x14,0x16,0x19,0x1b,0x1d,0x21,0x23,0x25,0x29,0x2c,0x2f,0x31,0x35,0x38,0x3b,0x3e,0x42,0x46,0x4a,0x4e,0x52,0x55,0x5a,0x5f,0x64,0x68,0x6c,0x71,0x75,0x7a,0x7f,0x84,0x89,0x8d,0x94,0x9a,0xa0,0xa4,0xa9,0xaf,0xb6,0xba,0xbf,0xc3,0xc9,0xd0,0xd5,0xda,0xe0,0xe3,0xe7,0xeb,0xee,0xf0,0xf3,0xf3,0xf3,0xf3,0xf3,0xf0,0xec,0xe8,0xe5,0xe3,0xdf,0xd9,0xd3,0xcd,0xc6,0xc1,0xbd,0xb8,0xb4,0xae,0xa6,0xa2,0x9e,0x98,0x92,0x8d,0x89,0x83,0x7f,0x79,0x74,0x6f,0x6b,0x66,0x61,0x5d,0x58,0x55,0x51,0x4d,0x48,0x45,0x41,0x3d,0x3b,0x39,0x34,0x31,0x2d,0x29,0x27,0x25,0x22,0x1f,0x1d,0x1b,0x18,0x16,0x14,0x12,0x10,0x0e,0x0b,0x09,0x08,0x07,0x06,0x04,0x02,0x01,0x01,0x00, +0x00,0x00,0x01,0x01,0x03,0x05,0x06,0x07,0x09,0x0a,0x0d,0x0f,0x11,0x13,0x15,0x16,0x19,0x1c,0x1e,0x22,0x24,0x25,0x28,0x2c,0x2e,0x32,0x36,0x3a,0x3c,0x3f,0x43,0x47,0x4b,0x4f,0x52,0x55,0x5c,0x60,0x65,0x68,0x6c,0x72,0x76,0x7b,0x80,0x86,0x8b,0x90,0x96,0x9a,0xa0,0xa6,0xab,0xb1,0xb7,0xbc,0xc1,0xc5,0xcb,0xd2,0xd8,0xdc,0xe2,0xe5,0xea,0xed,0xf0,0xf5,0xf7,0xf8,0xf8,0xf8,0xf5,0xf3,0xf0,0xeb,0xe8,0xe5,0xe1,0xdb,0xd5,0xcf,0xca,0xc5,0xbf,0xba,0xb5,0xaf,0xa9,0xa4,0x9f,0x9a,0x94,0x8f,0x89,0x84,0x7f,0x7a,0x76,0x70,0x6c,0x68,0x63,0x5f,0x5a,0x55,0x52,0x4e,0x49,0x46,0x42,0x3e,0x3c,0x39,0x35,0x32,0x2e,0x2a,0x27,0x25,0x23,0x20,0x1d,0x1b,0x18,0x16,0x15,0x13,0x10,0x0e,0x0c,0x0a,0x09,0x07,0x06,0x04,0x02,0x01,0x01,0x00, +0x00,0x00,0x01,0x01,0x03,0x05,0x06,0x07,0x09,0x0a,0x0c,0x0e,0x11,0x13,0x15,0x17,0x1a,0x1c,0x1e,0x21,0x24,0x26,0x26,0x2b,0x2f,0x32,0x36,0x3a,0x3c,0x3f,0x43,0x48,0x4b,0x4f,0x54,0x57,0x5c,0x60,0x65,0x6a,0x6e,0x73,0x76,0x7c,0x81,0x86,0x8b,0x92,0x97,0x9b,0xa0,0xa6,0xac,0xb1,0xb6,0xbe,0xc2,0xc7,0xcd,0xd4,0xd9,0xde,0xe3,0xe7,0xec,0xf0,0xf3,0xf8,0xfa,0xfc,0xfc,0xfc,0xf8,0xf6,0xf3,0xef,0xea,0xe7,0xe2,0xde,0xd8,0xd1,0xcc,0xc6,0xc2,0xbc,0xb6,0xb0,0xaa,0xa4,0x9e,0x9b,0x96,0x90,0x88,0x83,0x80,0x79,0x76,0x71,0x6d,0x67,0x63,0x5f,0x5a,0x57,0x52,0x4e,0x4a,0x46,0x42,0x3e,0x3c,0x39,0x35,0x32,0x2e,0x2a,0x27,0x26,0x23,0x20,0x1e,0x1b,0x18,0x16,0x15,0x13,0x10,0x0e,0x0c,0x0a,0x09,0x07,0x06,0x04,0x02,0x01,0x01,0x00, +0x00,0x00,0x01,0x01,0x03,0x05,0x06,0x07,0x09,0x0b,0x0d,0x0f,0x12,0x13,0x15,0x17,0x1a,0x1c,0x1e,0x21,0x24,0x26,0x29,0x2d,0x2f,0x33,0x37,0x3a,0x3c,0x40,0x44,0x48,0x4b,0x4f,0x54,0x57,0x5c,0x60,0x64,0x69,0x6e,0x73,0x77,0x7d,0x82,0x87,0x8c,0x92,0x97,0x9b,0xa1,0xa7,0xad,0xb2,0xb7,0xbd,0xc3,0xc8,0xce,0xd4,0xda,0xe0,0xe6,0xe9,0xee,0xf2,0xf7,0xfa,0xfd,0xfe,0xfe,0xfe,0xfc,0xf9,0xf5,0xf1,0xec,0xe9,0xe4,0xde,0xd9,0xd3,0xcc,0xc6,0xc2,0xbc,0xb6,0xb0,0xab,0xa5,0x9f,0x9b,0x96,0x90,0x8a,0x85,0x80,0x7a,0x77,0x71,0x6d,0x68,0x63,0x5f,0x5a,0x57,0x52,0x4e,0x4a,0x46,0x42,0x3f,0x3c,0x38,0x34,0x32,0x2f,0x2c,0x28,0x26,0x22,0x20,0x1e,0x1b,0x18,0x16,0x15,0x13,0x11,0x0f,0x0c,0x0a,0x09,0x07,0x06,0x04,0x02,0x01,0x01,0x00, +0x00,0x00,0x01,0x01,0x03,0x05,0x06,0x07,0x09,0x0b,0x0d,0x0f,0x12,0x13,0x15,0x17,0x1a,0x1c,0x1e,0x21,0x24,0x26,0x2a,0x2d,0x30,0x32,0x35,0x3a,0x3c,0x40,0x44,0x47,0x4c,0x50,0x54,0x57,0x5c,0x60,0x64,0x69,0x6e,0x73,0x77,0x7d,0x82,0x87,0x8c,0x92,0x97,0x9b,0xa1,0xa7,0xae,0xb3,0xb7,0xbd,0xc3,0xc8,0xce,0xd5,0xdb,0xe1,0xe6,0xe9,0xef,0xf3,0xf8,0xfc,0xfd,0xfe,0xfe,0xfe,0xfd,0xfa,0xf6,0xf2,0xed,0xe9,0xe4,0xdf,0xda,0xd3,0xcc,0xc6,0xc1,0xbb,0xb6,0xb1,0xab,0xa5,0x9f,0x9b,0x96,0x90,0x8a,0x85,0x80,0x7a,0x77,0x71,0x6d,0x68,0x63,0x5f,0x5a,0x57,0x52,0x4e,0x4b,0x46,0x42,0x3f,0x3c,0x38,0x34,0x32,0x2e,0x2a,0x28,0x26,0x22,0x20,0x1e,0x1b,0x18,0x16,0x15,0x13,0x11,0x0f,0x0c,0x0a,0x09,0x07,0x06,0x04,0x02,0x01,0x01,0x00, +0x00,0x00,0x01,0x01,0x03,0x05,0x06,0x07,0x09,0x0b,0x0d,0x0f,0x12,0x13,0x15,0x17,0x1a,0x1c,0x1e,0x21,0x24,0x26,0x2a,0x2d,0x30,0x32,0x35,0x3a,0x3c,0x40,0x44,0x47,0x4c,0x50,0x54,0x57,0x5c,0x60,0x64,0x69,0x6e,0x73,0x77,0x7d,0x82,0x87,0x8c,0x92,0x97,0x9b,0xa1,0xa7,0xad,0xb3,0xb9,0xbe,0xc2,0xc8,0xce,0xd5,0xdb,0xe1,0xe6,0xea,0xef,0xf3,0xf8,0xfb,0xfe,0xfe,0xff,0xfe,0xfd,0xfa,0xf6,0xf2,0xed,0xea,0xe4,0xdf,0xd9,0xd3,0xcc,0xc6,0xc1,0xbb,0xb7,0xb2,0xab,0xa5,0x9f,0x9b,0x96,0x90,0x8a,0x85,0x80,0x7a,0x77,0x71,0x6d,0x68,0x63,0x5f,0x5a,0x57,0x52,0x4e,0x4b,0x46,0x42,0x3f,0x3c,0x38,0x34,0x32,0x2e,0x2a,0x28,0x26,0x22,0x20,0x1e,0x1b,0x18,0x16,0x15,0x13,0x11,0x0f,0x0c,0x0a,0x09,0x07,0x06,0x04,0x02,0x01,0x01,0x00, +0x00,0x00,0x01,0x01,0x03,0x05,0x06,0x07,0x09,0x0b,0x0d,0x0f,0x12,0x13,0x15,0x17,0x1a,0x1c,0x1e,0x21,0x24,0x26,0x29,0x2d,0x30,0x32,0x36,0x3a,0x3c,0x40,0x44,0x47,0x4c,0x50,0x54,0x57,0x5c,0x60,0x64,0x69,0x6e,0x73,0x77,0x7d,0x82,0x87,0x8c,0x92,0x97,0x9b,0xa1,0xa7,0xae,0xb3,0xb7,0xbd,0xc3,0xc8,0xce,0xd5,0xdb,0xe1,0xe6,0xe9,0xef,0xf3,0xf8,0xfc,0xfd,0xfe,0xfe,0xfe,0xfd,0xfa,0xf6,0xf2,0xed,0xe9,0xe3,0xde,0xd9,0xd3,0xcc,0xc6,0xc1,0xbb,0xb6,0xb0,0xab,0xa6,0x9f,0x9b,0x96,0x90,0x8a,0x85,0x80,0x7a,0x77,0x71,0x6d,0x68,0x63,0x5f,0x5a,0x57,0x52,0x4e,0x4b,0x46,0x42,0x3f,0x3c,0x38,0x34,0x32,0x2e,0x2a,0x28,0x26,0x22,0x20,0x1e,0x1b,0x18,0x16,0x15,0x13,0x11,0x0f,0x0c,0x0a,0x09,0x07,0x06,0x04,0x02,0x01,0x01,0x00, +0x00,0x00,0x01,0x01,0x03,0x05,0x06,0x07,0x09,0x0b,0x0c,0x0e,0x12,0x13,0x15,0x17,0x1a,0x1c,0x1e,0x20,0x24,0x26,0x26,0x2b,0x30,0x33,0x37,0x3a,0x3c,0x40,0x44,0x48,0x4b,0x4f,0x54,0x57,0x5c,0x60,0x65,0x6a,0x6e,0x73,0x77,0x7d,0x82,0x87,0x8c,0x92,0x97,0x9b,0xa0,0xa7,0xad,0xb2,0xb6,0xbd,0xc3,0xc8,0xce,0xd4,0xda,0xe0,0xe6,0xe9,0xed,0xf2,0xf6,0xfa,0xfc,0xfd,0xfd,0xfd,0xfb,0xf8,0xf4,0xf0,0xec,0xe9,0xe3,0xde,0xd9,0xd3,0xcc,0xc6,0xc3,0xbc,0xb5,0xaf,0xab,0xa5,0x9f,0x9b,0x96,0x90,0x8a,0x85,0x80,0x7a,0x77,0x71,0x6c,0x67,0x63,0x5f,0x5a,0x57,0x52,0x4e,0x4a,0x46,0x42,0x3f,0x3c,0x38,0x34,0x32,0x2f,0x2b,0x28,0x26,0x22,0x20,0x1e,0x1b,0x18,0x16,0x15,0x13,0x11,0x0f,0x0c,0x0a,0x09,0x07,0x06,0x04,0x02,0x01,0x01,0x00, +0x00,0x00,0x01,0x01,0x03,0x05,0x06,0x07,0x09,0x0a,0x0c,0x0e,0x11,0x13,0x15,0x17,0x19,0x1c,0x1e,0x21,0x24,0x26,0x28,0x2c,0x2e,0x32,0x36,0x3a,0x3c,0x3f,0x43,0x48,0x4b,0x4f,0x54,0x57,0x5c,0x60,0x65,0x6a,0x6e,0x73,0x76,0x7c,0x81,0x85,0x8b,0x92,0x96,0x9b,0xa1,0xa6,0xac,0xb1,0xb7,0xbd,0xc2,0xc7,0xcd,0xd3,0xd8,0xde,0xe3,0xe6,0xeb,0xef,0xf3,0xf7,0xf9,0xfa,0xfa,0xfa,0xf7,0xf5,0xf2,0xee,0xea,0xe6,0xe2,0xdd,0xd8,0xd1,0xcb,0xc6,0xc1,0xbb,0xb6,0xb0,0xaa,0xa5,0x9f,0x9a,0x96,0x8f,0x88,0x84,0x80,0x79,0x75,0x71,0x6d,0x68,0x63,0x5f,0x5a,0x57,0x52,0x4e,0x4a,0x46,0x42,0x3e,0x3c,0x39,0x35,0x32,0x2d,0x29,0x27,0x26,0x24,0x20,0x1e,0x1b,0x18,0x16,0x15,0x13,0x10,0x0e,0x0c,0x0a,0x09,0x07,0x06,0x04,0x02,0x01,0x01,0x00, +0x00,0x00,0x01,0x01,0x03,0x05,0x06,0x07,0x08,0x0a,0x0d,0x0f,0x11,0x13,0x14,0x16,0x18,0x1b,0x1d,0x21,0x23,0x25,0x29,0x2c,0x2e,0x32,0x36,0x39,0x3b,0x3f,0x43,0x47,0x4a,0x4e,0x52,0x55,0x5b,0x5f,0x64,0x68,0x6c,0x71,0x75,0x7b,0x80,0x85,0x8a,0x90,0x95,0x99,0xa0,0xa5,0xaa,0xb1,0xb7,0xbb,0xbe,0xc5,0xcb,0xd1,0xd6,0xda,0xe1,0xe4,0xe9,0xed,0xf1,0xf4,0xf5,0xf6,0xf6,0xf6,0xf5,0xf3,0xef,0xeb,0xe8,0xe4,0xe1,0xdb,0xd5,0xcf,0xc9,0xc4,0xbd,0xb8,0xb5,0xaf,0xa8,0xa4,0x9d,0x99,0x94,0x8d,0x89,0x83,0x7e,0x78,0x75,0x70,0x6c,0x68,0x62,0x5e,0x59,0x55,0x51,0x4d,0x49,0x45,0x41,0x3e,0x3b,0x39,0x35,0x31,0x2d,0x29,0x27,0x25,0x23,0x1f,0x1d,0x1b,0x18,0x16,0x14,0x13,0x10,0x0e,0x0c,0x09,0x08,0x07,0x06,0x04,0x02,0x01,0x01,0x00, +0x00,0x00,0x01,0x01,0x03,0x05,0x06,0x07,0x08,0x0a,0x0c,0x0e,0x11,0x13,0x14,0x16,0x19,0x1b,0x1d,0x20,0x23,0x25,0x29,0x2c,0x2f,0x31,0x34,0x38,0x3b,0x3e,0x42,0x46,0x4a,0x4e,0x52,0x55,0x5a,0x5e,0x63,0x68,0x6c,0x71,0x74,0x7a,0x7f,0x84,0x89,0x8d,0x94,0x98,0x9e,0xa3,0xa8,0xae,0xb4,0xb9,0xbc,0xc2,0xc8,0xce,0xd3,0xd8,0xde,0xe1,0xe6,0xea,0xed,0xef,0xf1,0xf2,0xf2,0xf3,0xf0,0xef,0xec,0xe8,0xe4,0xe1,0xde,0xd8,0xd2,0xcc,0xc6,0xc1,0xbc,0xb6,0xb2,0xac,0xa7,0xa2,0x9c,0x98,0x91,0x8c,0x88,0x82,0x7d,0x77,0x74,0x6f,0x6b,0x66,0x61,0x5d,0x58,0x55,0x51,0x4d,0x48,0x45,0x41,0x3d,0x3b,0x37,0x34,0x31,0x2d,0x29,0x27,0x25,0x22,0x1f,0x1d,0x1b,0x18,0x16,0x14,0x12,0x10,0x0e,0x0b,0x09,0x08,0x07,0x06,0x04,0x02,0x01,0x01,0x00, +0x00,0x00,0x01,0x01,0x03,0x05,0x06,0x07,0x08,0x0a,0x0c,0x0e,0x11,0x13,0x14,0x16,0x19,0x1b,0x1d,0x20,0x23,0x25,0x29,0x2c,0x2e,0x32,0x35,0x38,0x3a,0x3e,0x42,0x45,0x4a,0x4e,0x52,0x54,0x5a,0x5e,0x63,0x67,0x6b,0x70,0x73,0x79,0x7e,0x83,0x88,0x8e,0x93,0x97,0x9d,0xa2,0xa7,0xac,0xb1,0xb7,0xbb,0xc1,0xc5,0xca,0xd0,0xd6,0xda,0xdd,0xe2,0xe6,0xe8,0xea,0xec,0xed,0xed,0xed,0xec,0xea,0xe8,0xe5,0xe0,0xdd,0xd9,0xd4,0xce,0xc9,0xc5,0xbf,0xba,0xb4,0xb0,0xab,0xa6,0xa1,0x9b,0x96,0x90,0x8c,0x87,0x81,0x7c,0x77,0x73,0x6e,0x6a,0x66,0x61,0x5d,0x58,0x54,0x50,0x4c,0x49,0x44,0x40,0x3d,0x3a,0x36,0x33,0x31,0x2e,0x2b,0x27,0x25,0x22,0x1f,0x1d,0x1b,0x18,0x16,0x14,0x12,0x10,0x0e,0x0b,0x09,0x08,0x07,0x06,0x04,0x02,0x01,0x01,0x00, +0x00,0x00,0x01,0x01,0x03,0x05,0x06,0x07,0x08,0x0a,0x0c,0x0e,0x11,0x13,0x14,0x16,0x19,0x1b,0x1d,0x20,0x23,0x25,0x27,0x2a,0x2e,0x30,0x33,0x38,0x3a,0x3d,0x41,0x45,0x49,0x4d,0x51,0x54,0x59,0x5d,0x62,0x66,0x6a,0x70,0x73,0x78,0x7d,0x82,0x87,0x8b,0x91,0x96,0x9c,0xa1,0xa6,0xab,0xaf,0xb5,0xb9,0xbf,0xc3,0xc8,0xcd,0xd2,0xd8,0xdb,0xdf,0xe3,0xe5,0xe7,0xe9,0xe9,0xea,0xe9,0xe9,0xe7,0xe5,0xe2,0xdd,0xdb,0xd6,0xd1,0xcc,0xc7,0xc3,0xbd,0xb9,0xb3,0xae,0xa9,0xa4,0x9f,0x9a,0x95,0x8f,0x8a,0x85,0x80,0x7b,0x76,0x73,0x6d,0x69,0x65,0x60,0x5c,0x57,0x54,0x50,0x4c,0x47,0x44,0x40,0x3d,0x3a,0x36,0x32,0x30,0x2c,0x28,0x27,0x25,0x22,0x1f,0x1d,0x1b,0x18,0x16,0x14,0x12,0x10,0x0e,0x0b,0x09,0x08,0x07,0x06,0x04,0x02,0x01,0x01,0x00, +0x00,0x00,0x01,0x01,0x03,0x05,0x06,0x07,0x08,0x0a,0x0c,0x0e,0x11,0x13,0x14,0x16,0x19,0x1b,0x1d,0x20,0x22,0x24,0x26,0x2a,0x2e,0x30,0x33,0x37,0x3a,0x3d,0x41,0x44,0x49,0x4c,0x51,0x53,0x58,0x5c,0x61,0x65,0x69,0x6f,0x72,0x77,0x7c,0x81,0x86,0x8a,0x90,0x94,0x99,0x9f,0xa4,0xa8,0xad,0xb2,0xb7,0xbd,0xc1,0xc6,0xca,0xce,0xd3,0xd7,0xda,0xdd,0xdf,0xe1,0xe3,0xe3,0xe5,0xe3,0xe3,0xe1,0xdf,0xdc,0xd8,0xd7,0xd1,0xcd,0xc9,0xc4,0xc0,0xba,0xb5,0xb1,0xac,0xa7,0xa2,0x9d,0x97,0x94,0x8e,0x88,0x83,0x7f,0x7a,0x75,0x72,0x6d,0x69,0x64,0x5f,0x5b,0x56,0x53,0x4f,0x4b,0x48,0x43,0x3f,0x3c,0x3a,0x35,0x32,0x30,0x2c,0x27,0x26,0x24,0x22,0x1f,0x1d,0x1a,0x17,0x15,0x14,0x12,0x10,0x0e,0x0b,0x09,0x08,0x07,0x06,0x05,0x03,0x01,0x01,0x00, +0x00,0x00,0x00,0x01,0x03,0x05,0x06,0x07,0x08,0x0b,0x0d,0x0d,0x10,0x12,0x14,0x16,0x19,0x1a,0x1d,0x1f,0x22,0x24,0x27,0x29,0x2d,0x2f,0x34,0x37,0x39,0x3c,0x40,0x44,0x48,0x4b,0x50,0x52,0x58,0x5c,0x61,0x65,0x69,0x6e,0x71,0x76,0x7a,0x7f,0x83,0x88,0x8e,0x91,0x97,0x9c,0xa1,0xa5,0xa9,0xaf,0xb3,0xb9,0xbd,0xc2,0xc6,0xca,0xcf,0xd1,0xd6,0xd9,0xdb,0xdd,0xde,0xde,0xdf,0xde,0xde,0xdc,0xdb,0xd8,0xd4,0xd1,0xcd,0xc9,0xc5,0xc0,0xbc,0xb6,0xb2,0xae,0xa9,0xa4,0x9f,0x9a,0x95,0x91,0x8c,0x85,0x81,0x7d,0x79,0x74,0x71,0x6c,0x68,0x64,0x5f,0x5b,0x56,0x52,0x4e,0x4a,0x47,0x43,0x3f,0x3b,0x39,0x37,0x32,0x2e,0x2b,0x28,0x26,0x24,0x21,0x1e,0x1c,0x1a,0x17,0x15,0x14,0x12,0x10,0x0c,0x0a,0x09,0x08,0x07,0x06,0x03,0x03,0x01,0x00,0x00, +0x00,0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x08,0x0a,0x0d,0x0e,0x10,0x12,0x13,0x15,0x18,0x19,0x1c,0x1f,0x22,0x22,0x26,0x2a,0x2c,0x30,0x34,0x36,0x39,0x3b,0x3f,0x44,0x47,0x4b,0x4f,0x50,0x56,0x5a,0x5f,0x63,0x67,0x6d,0x70,0x75,0x77,0x7b,0x81,0x86,0x8c,0x8f,0x95,0x99,0x9e,0xa3,0xa7,0xad,0xb0,0xb5,0xb9,0xbe,0xc3,0xc7,0xca,0xcc,0xd1,0xd3,0xd5,0xd8,0xd9,0xd9,0xd9,0xd9,0xd9,0xd7,0xd4,0xd2,0xcf,0xcc,0xc9,0xc5,0xc2,0xbd,0xb8,0xb3,0xb0,0xaa,0xa7,0xa2,0x9d,0x98,0x93,0x8f,0x8a,0x85,0x7f,0x7b,0x78,0x73,0x70,0x6b,0x66,0x62,0x5d,0x59,0x54,0x50,0x4e,0x4a,0x46,0x42,0x3d,0x39,0x39,0x34,0x32,0x2f,0x2c,0x2a,0x24,0x22,0x20,0x1e,0x1c,0x1a,0x17,0x15,0x13,0x12,0x10,0x0d,0x0a,0x09,0x07,0x06,0x05,0x02,0x01,0x01,0x00,0x00, +0x00,0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x07,0x0a,0x0d,0x0f,0x11,0x12,0x14,0x17,0x19,0x1b,0x1e,0x20,0x22,0x25,0x28,0x2b,0x2e,0x32,0x35,0x37,0x3a,0x3e,0x42,0x45,0x49,0x4d,0x4f,0x54,0x58,0x5d,0x61,0x65,0x6b,0x6e,0x73,0x77,0x7a,0x7f,0x84,0x8a,0x8d,0x93,0x98,0x9d,0xa1,0xa5,0xa9,0xac,0xb1,0xb5,0xb9,0xbe,0xc2,0xc5,0xc7,0xcb,0xcc,0xcf,0xd2,0xd3,0xd3,0xd4,0xd3,0xd3,0xd2,0xce,0xcb,0xc9,0xc7,0xc3,0xc0,0xbd,0xb8,0xb4,0xaf,0xac,0xa8,0xa3,0xa0,0x9b,0x96,0x91,0x8d,0x87,0x83,0x7d,0x79,0x75,0x71,0x6e,0x69,0x64,0x60,0x5b,0x57,0x52,0x4f,0x4c,0x48,0x44,0x41,0x3d,0x39,0x37,0x33,0x31,0x2d,0x2b,0x28,0x24,0x22,0x1f,0x1d,0x1b,0x19,0x16,0x14,0x12,0x11,0x0e,0x0d,0x0a,0x08,0x07,0x06,0x05,0x03,0x01,0x01,0x00,0x00, +0x00,0x00,0x00,0x00,0x02,0x04,0x05,0x06,0x07,0x09,0x0b,0x0b,0x0e,0x11,0x12,0x14,0x17,0x19,0x1b,0x1d,0x20,0x21,0x25,0x28,0x2a,0x2c,0x30,0x34,0x36,0x39,0x3d,0x41,0x44,0x48,0x4b,0x4e,0x52,0x56,0x5b,0x5f,0x63,0x68,0x6b,0x70,0x74,0x78,0x7d,0x81,0x87,0x8a,0x90,0x95,0x9a,0x9e,0xa2,0xa5,0xa8,0xad,0xb1,0xb5,0xba,0xbe,0xc0,0xc2,0xc5,0xc8,0xcb,0xcc,0xcc,0xcc,0xcd,0xcc,0xcb,0xcc,0xcb,0xc7,0xc3,0xc2,0xbd,0xbb,0xb9,0xb4,0xb0,0xab,0xa8,0xa5,0x9f,0x9d,0x98,0x93,0x8e,0x8a,0x84,0x80,0x7c,0x77,0x72,0x6e,0x6b,0x66,0x61,0x5e,0x59,0x55,0x50,0x4e,0x4a,0x46,0x42,0x40,0x3c,0x38,0x36,0x34,0x30,0x2c,0x2a,0x27,0x23,0x21,0x1f,0x1c,0x1a,0x18,0x15,0x13,0x12,0x10,0x0d,0x0b,0x09,0x08,0x07,0x06,0x05,0x03,0x01,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x02,0x03,0x04,0x05,0x07,0x0a,0x0c,0x0c,0x0f,0x10,0x11,0x13,0x16,0x18,0x1a,0x1d,0x1f,0x21,0x24,0x27,0x29,0x2c,0x30,0x33,0x35,0x39,0x3d,0x40,0x42,0x46,0x4a,0x4d,0x51,0x55,0x5a,0x5e,0x61,0x66,0x69,0x6d,0x71,0x76,0x7a,0x7e,0x83,0x87,0x8c,0x90,0x95,0x99,0x9d,0xa2,0xa5,0xa9,0xad,0xb1,0xb3,0xb7,0xbb,0xbd,0xc0,0xc3,0xc5,0xc5,0xc6,0xc6,0xc7,0xc6,0xc6,0xc5,0xc5,0xc2,0xbe,0xbd,0xba,0xb6,0xb3,0xaf,0xab,0xa8,0xa5,0xa0,0x9c,0x98,0x93,0x8f,0x8a,0x87,0x81,0x7d,0x79,0x74,0x70,0x6c,0x69,0x64,0x60,0x5d,0x58,0x54,0x4f,0x4d,0x49,0x45,0x42,0x3e,0x3a,0x37,0x35,0x33,0x2f,0x2c,0x28,0x25,0x23,0x21,0x1f,0x1c,0x19,0x18,0x15,0x13,0x11,0x0f,0x0c,0x0c,0x0a,0x07,0x06,0x05,0x04,0x03,0x02,0x00,0x00,0x00, +0x00,0x00,0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x08,0x0a,0x0a,0x0d,0x10,0x11,0x14,0x17,0x17,0x19,0x1c,0x1f,0x20,0x24,0x27,0x29,0x2b,0x2e,0x32,0x35,0x37,0x3b,0x3f,0x41,0x45,0x49,0x4c,0x50,0x54,0x59,0x5c,0x60,0x65,0x67,0x6c,0x70,0x75,0x79,0x7c,0x81,0x84,0x8a,0x8e,0x93,0x97,0x9b,0x9f,0xa2,0xa6,0xaa,0xae,0xb0,0xb3,0xb7,0xb9,0xba,0xbd,0xc0,0xc1,0xc1,0xc2,0xc3,0xc2,0xc2,0xc1,0xbe,0xbc,0xba,0xb9,0xb5,0xb2,0xb0,0xac,0xa8,0xa5,0xa2,0x9d,0x9a,0x96,0x91,0x8d,0x88,0x84,0x7f,0x7b,0x78,0x73,0x6f,0x6a,0x67,0x63,0x5f,0x5b,0x57,0x53,0x4e,0x4c,0x48,0x44,0x41,0x3e,0x3a,0x37,0x35,0x30,0x2d,0x2b,0x29,0x26,0x22,0x20,0x1e,0x1b,0x19,0x17,0x14,0x13,0x11,0x0f,0x0c,0x0a,0x08,0x07,0x06,0x05,0x04,0x03,0x02,0x01,0x00,0x00, +0x00,0x00,0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x08,0x0a,0x0a,0x0d,0x10,0x11,0x13,0x16,0x18,0x1a,0x1c,0x1e,0x20,0x22,0x25,0x28,0x2a,0x2e,0x32,0x34,0x36,0x3a,0x3e,0x40,0x44,0x48,0x4b,0x4f,0x53,0x55,0x5b,0x5f,0x63,0x65,0x6a,0x6e,0x72,0x75,0x7a,0x7d,0x80,0x85,0x8c,0x90,0x93,0x97,0x9b,0x9d,0xa2,0xa6,0xa9,0xad,0xaf,0xb1,0xb3,0xb5,0xb7,0xba,0xbc,0xbc,0xbb,0xbc,0xbb,0xbd,0xbb,0xb7,0xb6,0xb4,0xb3,0xb0,0xae,0xab,0xa8,0xa5,0xa0,0x9d,0x9a,0x96,0x92,0x8e,0x89,0x83,0x80,0x7d,0x79,0x75,0x71,0x6c,0x68,0x65,0x61,0x5d,0x59,0x55,0x51,0x4d,0x4b,0x47,0x43,0x40,0x3d,0x39,0x36,0x34,0x30,0x2d,0x2a,0x28,0x25,0x22,0x20,0x1e,0x1b,0x19,0x17,0x14,0x12,0x11,0x0f,0x0c,0x0b,0x09,0x07,0x06,0x05,0x04,0x02,0x02,0x01,0x00,0x00, +0x00,0x00,0x00,0x00,0x02,0x03,0x04,0x05,0x06,0x08,0x0a,0x0c,0x0e,0x0f,0x10,0x12,0x15,0x17,0x19,0x1c,0x1e,0x1f,0x20,0x23,0x27,0x29,0x2d,0x31,0x32,0x35,0x3a,0x3d,0x3f,0x43,0x47,0x49,0x4d,0x51,0x54,0x58,0x5c,0x60,0x63,0x67,0x6b,0x6f,0x72,0x77,0x7a,0x7d,0x82,0x88,0x8c,0x8f,0x93,0x97,0x9a,0x9e,0xa2,0xa5,0xa7,0xaa,0xad,0xaf,0xb1,0xb4,0xb3,0xb5,0xb6,0xb6,0xb6,0xb6,0xb7,0xb5,0xb3,0xb3,0xb0,0xaf,0xac,0xa9,0xa6,0xa4,0xa1,0x9c,0x9a,0x96,0x92,0x8e,0x8a,0x85,0x80,0x7d,0x79,0x75,0x72,0x6e,0x69,0x65,0x63,0x5f,0x5b,0x57,0x53,0x4f,0x4c,0x49,0x46,0x42,0x3f,0x3d,0x39,0x35,0x32,0x2f,0x2c,0x29,0x27,0x24,0x21,0x1f,0x1d,0x1b,0x19,0x17,0x14,0x12,0x10,0x0e,0x0a,0x0b,0x09,0x07,0x06,0x05,0x04,0x01,0x01,0x00,0x00,0x00, +0x00,0x00,0x00,0x01,0x02,0x03,0x04,0x04,0x05,0x07,0x0a,0x0c,0x0c,0x0e,0x10,0x12,0x14,0x16,0x19,0x1b,0x1d,0x1e,0x21,0x24,0x26,0x28,0x2b,0x2f,0x30,0x35,0x39,0x3b,0x3e,0x42,0x45,0x47,0x4b,0x4f,0x53,0x56,0x5a,0x5e,0x61,0x64,0x68,0x6d,0x71,0x75,0x78,0x7b,0x80,0x83,0x87,0x8c,0x90,0x93,0x96,0x98,0x9d,0xa0,0xa2,0xa5,0xa8,0xaa,0xab,0xae,0xae,0xaf,0xb0,0xb1,0xb1,0xb1,0xb0,0xb0,0xaf,0xad,0xab,0xaa,0xa8,0xa4,0xa1,0xa0,0x9c,0x98,0x96,0x92,0x8e,0x8a,0x85,0x81,0x7e,0x7b,0x77,0x73,0x6f,0x6b,0x67,0x63,0x61,0x5d,0x59,0x55,0x50,0x4c,0x4b,0x47,0x45,0x41,0x3d,0x3b,0x38,0x34,0x30,0x2e,0x2a,0x28,0x26,0x23,0x20,0x1e,0x1d,0x1a,0x18,0x16,0x13,0x11,0x10,0x0e,0x0b,0x0a,0x08,0x06,0x05,0x04,0x03,0x02,0x01,0x00,0x00,0x00, +0x00,0x00,0x00,0x01,0x01,0x02,0x02,0x03,0x04,0x06,0x08,0x0a,0x0c,0x0d,0x0f,0x10,0x12,0x15,0x17,0x19,0x1b,0x1d,0x21,0x24,0x25,0x27,0x2a,0x2d,0x2f,0x34,0x37,0x39,0x3b,0x40,0x43,0x45,0x49,0x4c,0x50,0x54,0x58,0x5c,0x5f,0x63,0x67,0x69,0x6f,0x72,0x76,0x78,0x7b,0x80,0x83,0x87,0x8b,0x8f,0x91,0x94,0x98,0x9b,0x9d,0xa0,0xa3,0xa4,0xa4,0xa6,0xa9,0xaa,0xab,0xab,0xab,0xab,0xab,0xaa,0xa8,0xa6,0xa5,0xa4,0xa2,0x9f,0x9c,0x9b,0x97,0x93,0x91,0x8e,0x8a,0x85,0x82,0x7e,0x7a,0x78,0x75,0x71,0x6e,0x69,0x65,0x61,0x5f,0x5b,0x57,0x53,0x4f,0x4b,0x49,0x45,0x43,0x3f,0x3b,0x39,0x36,0x32,0x2f,0x2b,0x29,0x28,0x25,0x21,0x1e,0x1d,0x1b,0x18,0x17,0x14,0x11,0x10,0x0f,0x0d,0x0c,0x09,0x07,0x05,0x04,0x03,0x02,0x02,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x01,0x01,0x02,0x02,0x03,0x04,0x06,0x08,0x0a,0x0b,0x0c,0x0e,0x0f,0x12,0x14,0x16,0x19,0x1a,0x1c,0x1e,0x21,0x24,0x26,0x28,0x2c,0x2e,0x32,0x35,0x37,0x39,0x3d,0x41,0x43,0x47,0x4a,0x4e,0x51,0x55,0x59,0x5c,0x60,0x64,0x67,0x6a,0x6e,0x73,0x74,0x77,0x7b,0x80,0x82,0x87,0x8b,0x8d,0x91,0x94,0x96,0x99,0x9c,0x9e,0x9f,0xa0,0xa2,0xa4,0xa5,0xa6,0xa5,0xa5,0xa5,0xa6,0xa5,0xa2,0xa2,0xa0,0x9f,0x9c,0x9a,0x98,0x96,0x93,0x8f,0x8d,0x8a,0x86,0x81,0x7e,0x7a,0x76,0x74,0x72,0x6e,0x6b,0x66,0x62,0x5e,0x5c,0x58,0x54,0x51,0x4d,0x49,0x46,0x43,0x40,0x3c,0x39,0x37,0x34,0x30,0x2e,0x2a,0x27,0x25,0x23,0x20,0x1e,0x1c,0x19,0x16,0x16,0x13,0x11,0x0f,0x0e,0x0c,0x0b,0x09,0x07,0x05,0x04,0x03,0x02,0x02,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x01,0x01,0x01,0x02,0x03,0x04,0x06,0x08,0x0a,0x0b,0x0c,0x0d,0x0f,0x11,0x14,0x16,0x18,0x1a,0x1c,0x1e,0x21,0x23,0x25,0x27,0x2b,0x2d,0x31,0x34,0x36,0x38,0x3b,0x3f,0x42,0x46,0x49,0x4c,0x4e,0x52,0x56,0x59,0x5c,0x60,0x64,0x68,0x6c,0x6f,0x71,0x75,0x79,0x7c,0x7e,0x81,0x85,0x87,0x8c,0x8f,0x90,0x93,0x96,0x98,0x9a,0x9a,0x9c,0x9e,0x9f,0x9f,0x9f,0x9f,0x9f,0x9f,0x9f,0x9d,0x9c,0x9a,0x9a,0x97,0x94,0x92,0x90,0x8d,0x8a,0x87,0x83,0x80,0x7e,0x7a,0x76,0x73,0x71,0x6d,0x69,0x67,0x63,0x5f,0x5b,0x59,0x55,0x51,0x4e,0x4a,0x47,0x44,0x42,0x3d,0x3a,0x38,0x36,0x33,0x2f,0x2d,0x29,0x26,0x24,0x22,0x1f,0x1d,0x1c,0x1a,0x17,0x15,0x13,0x10,0x0f,0x0d,0x0c,0x0b,0x09,0x07,0x05,0x04,0x03,0x02,0x01,0x01,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x01,0x01,0x02,0x03,0x03,0x05,0x07,0x09,0x0a,0x0c,0x0d,0x0e,0x11,0x13,0x15,0x18,0x19,0x1b,0x1d,0x20,0x22,0x24,0x27,0x2a,0x2c,0x30,0x33,0x35,0x37,0x3a,0x3e,0x40,0x44,0x48,0x4a,0x4e,0x52,0x55,0x57,0x5a,0x5e,0x62,0x65,0x69,0x6d,0x6f,0x71,0x75,0x79,0x7b,0x7e,0x82,0x84,0x88,0x8b,0x8d,0x8f,0x92,0x94,0x95,0x97,0x99,0x9a,0x9b,0x9b,0x9b,0x9b,0x9b,0x9b,0x9a,0x99,0x98,0x97,0x95,0x94,0x91,0x8f,0x8d,0x8a,0x86,0x84,0x80,0x7d,0x7b,0x78,0x74,0x71,0x6f,0x6c,0x68,0x65,0x61,0x5d,0x5a,0x57,0x53,0x4f,0x4d,0x4a,0x47,0x42,0x40,0x3c,0x39,0x37,0x35,0x32,0x2e,0x2c,0x29,0x26,0x24,0x21,0x1e,0x1c,0x1b,0x18,0x15,0x15,0x12,0x10,0x0e,0x0d,0x0c,0x0a,0x08,0x06,0x04,0x03,0x03,0x02,0x01,0x01,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x01,0x01,0x02,0x02,0x03,0x05,0x07,0x09,0x0a,0x0b,0x0c,0x0e,0x10,0x13,0x13,0x16,0x19,0x1a,0x1c,0x1f,0x21,0x23,0x26,0x29,0x2b,0x2e,0x32,0x33,0x35,0x39,0x3c,0x3e,0x41,0x45,0x48,0x4b,0x4f,0x52,0x54,0x56,0x5a,0x5e,0x61,0x65,0x6a,0x6c,0x6f,0x73,0x75,0x77,0x7b,0x7d,0x7f,0x82,0x85,0x87,0x89,0x8c,0x8e,0x8f,0x92,0x93,0x95,0x96,0x96,0x96,0x96,0x96,0x96,0x96,0x95,0x92,0x92,0x8f,0x8e,0x8b,0x89,0x87,0x84,0x81,0x7f,0x7d,0x7a,0x77,0x75,0x72,0x6d,0x6c,0x68,0x64,0x61,0x5e,0x59,0x56,0x54,0x52,0x4e,0x4b,0x47,0x43,0x40,0x3e,0x3a,0x37,0x35,0x33,0x30,0x2d,0x2b,0x28,0x25,0x23,0x21,0x1e,0x1c,0x1a,0x18,0x15,0x13,0x13,0x10,0x0e,0x0c,0x0b,0x0a,0x08,0x06,0x04,0x03,0x02,0x02,0x01,0x01,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x02,0x03,0x05,0x07,0x09,0x0a,0x0b,0x0c,0x0d,0x10,0x12,0x13,0x16,0x18,0x19,0x1b,0x1e,0x20,0x22,0x24,0x28,0x2a,0x2c,0x2e,0x30,0x32,0x37,0x39,0x3b,0x40,0x43,0x45,0x48,0x4b,0x4f,0x51,0x54,0x58,0x5b,0x5d,0x60,0x66,0x68,0x6b,0x6f,0x71,0x74,0x77,0x79,0x7b,0x7e,0x81,0x83,0x85,0x88,0x89,0x8b,0x8c,0x8e,0x8f,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x8e,0x8c,0x8c,0x8b,0x89,0x87,0x85,0x82,0x80,0x7d,0x7b,0x79,0x76,0x73,0x71,0x6e,0x69,0x68,0x64,0x60,0x5d,0x5b,0x56,0x53,0x51,0x4e,0x4a,0x48,0x44,0x40,0x3d,0x3b,0x37,0x34,0x32,0x30,0x2d,0x2c,0x2a,0x26,0x24,0x22,0x20,0x1d,0x1b,0x19,0x17,0x14,0x13,0x10,0x0f,0x0d,0x0c,0x0b,0x0a,0x08,0x06,0x04,0x03,0x02,0x01,0x01,0x01,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x02,0x02,0x03,0x05,0x08,0x09,0x0a,0x0b,0x0c,0x0f,0x11,0x11,0x15,0x17,0x17,0x1a,0x1d,0x1f,0x21,0x22,0x26,0x28,0x2a,0x2b,0x30,0x32,0x35,0x39,0x3b,0x3f,0x42,0x44,0x46,0x48,0x4d,0x4f,0x53,0x56,0x59,0x5c,0x5f,0x62,0x64,0x69,0x6c,0x6e,0x71,0x73,0x76,0x77,0x7a,0x7c,0x7e,0x80,0x83,0x84,0x86,0x86,0x89,0x89,0x8a,0x8a,0x8a,0x8a,0x8a,0x8a,0x89,0x88,0x87,0x86,0x86,0x84,0x82,0x80,0x7d,0x7b,0x79,0x77,0x74,0x71,0x70,0x6e,0x6b,0x67,0x64,0x60,0x5d,0x5b,0x57,0x54,0x51,0x4f,0x4b,0x47,0x46,0x44,0x40,0x3d,0x3b,0x37,0x34,0x32,0x30,0x2b,0x2a,0x28,0x25,0x22,0x21,0x1e,0x1b,0x1a,0x17,0x17,0x13,0x12,0x11,0x0e,0x0c,0x0b,0x0a,0x09,0x07,0x04,0x02,0x02,0x02,0x01,0x01,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x02,0x04,0x06,0x08,0x09,0x0a,0x0a,0x0d,0x11,0x11,0x13,0x16,0x16,0x18,0x1b,0x1d,0x1f,0x21,0x24,0x26,0x27,0x2a,0x2e,0x30,0x33,0x36,0x39,0x3d,0x40,0x42,0x44,0x46,0x4b,0x4d,0x51,0x53,0x55,0x59,0x5d,0x60,0x62,0x64,0x67,0x69,0x6c,0x70,0x71,0x73,0x75,0x78,0x7a,0x7b,0x7e,0x7f,0x80,0x81,0x83,0x84,0x85,0x85,0x85,0x85,0x85,0x85,0x84,0x83,0x82,0x81,0x80,0x7f,0x7d,0x7b,0x7a,0x77,0x74,0x73,0x71,0x6e,0x6b,0x69,0x66,0x63,0x62,0x5e,0x5b,0x58,0x54,0x50,0x4f,0x4d,0x49,0x45,0x43,0x41,0x3e,0x3b,0x39,0x35,0x32,0x30,0x2e,0x2a,0x28,0x26,0x24,0x22,0x1f,0x1c,0x19,0x18,0x16,0x15,0x13,0x11,0x10,0x0c,0x0a,0x0a,0x09,0x08,0x06,0x04,0x02,0x01,0x01,0x01,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x02,0x04,0x06,0x07,0x08,0x09,0x0a,0x0c,0x0e,0x10,0x13,0x14,0x15,0x17,0x19,0x1c,0x1e,0x20,0x22,0x24,0x27,0x2a,0x2c,0x2e,0x30,0x34,0x36,0x3a,0x3d,0x3f,0x41,0x43,0x48,0x4a,0x4e,0x4f,0x51,0x54,0x58,0x5c,0x5e,0x60,0x63,0x65,0x66,0x6b,0x6d,0x6f,0x70,0x73,0x76,0x77,0x79,0x7a,0x7b,0x7c,0x7e,0x7f,0x80,0x80,0x80,0x80,0x80,0x80,0x7f,0x7e,0x7d,0x7c,0x7b,0x7a,0x78,0x75,0x76,0x73,0x70,0x6f,0x6d,0x6a,0x67,0x65,0x62,0x5f,0x5e,0x5b,0x57,0x54,0x52,0x4f,0x4c,0x4a,0x46,0x43,0x40,0x3e,0x3b,0x38,0x36,0x32,0x2f,0x2d,0x2b,0x28,0x25,0x24,0x22,0x20,0x1d,0x1b,0x18,0x17,0x15,0x13,0x12,0x10,0x0d,0x0b,0x0a,0x09,0x08,0x07,0x05,0x03,0x02,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x02,0x04,0x06,0x07,0x08,0x08,0x09,0x0b,0x0d,0x10,0x12,0x13,0x15,0x16,0x19,0x1b,0x1d,0x20,0x21,0x23,0x25,0x28,0x2a,0x2d,0x30,0x32,0x34,0x37,0x3a,0x3c,0x3e,0x41,0x45,0x47,0x4a,0x4d,0x4f,0x51,0x54,0x58,0x5a,0x5d,0x60,0x61,0x64,0x67,0x69,0x6a,0x6c,0x6e,0x71,0x73,0x74,0x75,0x76,0x77,0x78,0x79,0x7a,0x7a,0x7a,0x7a,0x7a,0x7a,0x79,0x78,0x77,0x77,0x76,0x75,0x74,0x73,0x71,0x6e,0x6c,0x6a,0x68,0x65,0x63,0x61,0x5e,0x5b,0x5a,0x56,0x53,0x51,0x4f,0x4c,0x48,0x47,0x43,0x40,0x3e,0x3c,0x39,0x36,0x34,0x31,0x2e,0x2c,0x2a,0x27,0x24,0x23,0x20,0x1d,0x1d,0x1b,0x18,0x16,0x15,0x13,0x11,0x0f,0x0d,0x0b,0x09,0x08,0x08,0x07,0x05,0x02,0x02,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x02,0x04,0x06,0x07,0x08,0x09,0x0a,0x0c,0x0f,0x11,0x13,0x14,0x15,0x18,0x1a,0x1c,0x1f,0x20,0x22,0x24,0x27,0x29,0x2b,0x2e,0x31,0x33,0x36,0x39,0x3b,0x3d,0x40,0x43,0x45,0x47,0x4a,0x4d,0x4f,0x52,0x55,0x57,0x5a,0x5d,0x5f,0x61,0x64,0x66,0x67,0x69,0x6b,0x6e,0x70,0x71,0x72,0x73,0x73,0x75,0x76,0x76,0x77,0x77,0x77,0x77,0x77,0x75,0x75,0x74,0x73,0x73,0x72,0x71,0x70,0x6e,0x6b,0x69,0x67,0x65,0x63,0x61,0x5e,0x5b,0x59,0x57,0x54,0x51,0x4f,0x4d,0x4a,0x47,0x45,0x41,0x3f,0x3d,0x3b,0x38,0x34,0x33,0x30,0x2d,0x2b,0x29,0x26,0x23,0x22,0x1f,0x1c,0x1c,0x19,0x17,0x15,0x14,0x13,0x10,0x0e,0x0c,0x0a,0x09,0x08,0x07,0x06,0x04,0x02,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x02,0x03,0x06,0x07,0x08,0x08,0x0a,0x0d,0x0d,0x10,0x12,0x13,0x14,0x17,0x19,0x1a,0x1d,0x1f,0x21,0x23,0x26,0x28,0x2a,0x2d,0x2f,0x31,0x34,0x37,0x39,0x3b,0x3e,0x40,0x42,0x44,0x47,0x49,0x4b,0x4f,0x51,0x54,0x56,0x59,0x5b,0x5d,0x60,0x61,0x63,0x65,0x69,0x6a,0x6b,0x6c,0x6d,0x6d,0x6e,0x6f,0x70,0x71,0x71,0x71,0x71,0x71,0x71,0x72,0x70,0x6f,0x6e,0x6d,0x6d,0x6c,0x6a,0x68,0x65,0x64,0x63,0x61,0x5f,0x5d,0x5a,0x57,0x55,0x53,0x50,0x4f,0x4b,0x49,0x47,0x43,0x42,0x40,0x3c,0x3a,0x38,0x35,0x32,0x31,0x2e,0x2c,0x2a,0x27,0x24,0x22,0x21,0x1f,0x1d,0x1a,0x18,0x16,0x14,0x13,0x12,0x10,0x0d,0x0b,0x0a,0x08,0x08,0x07,0x04,0x03,0x02,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x02,0x01,0x02,0x05,0x06,0x07,0x08,0x0a,0x0c,0x0d,0x0f,0x11,0x12,0x14,0x16,0x17,0x17,0x1a,0x1e,0x20,0x21,0x24,0x26,0x28,0x2b,0x2d,0x2e,0x32,0x35,0x36,0x38,0x3b,0x3d,0x3f,0x41,0x44,0x46,0x48,0x4b,0x4d,0x50,0x52,0x55,0x57,0x59,0x5c,0x5e,0x5f,0x61,0x63,0x66,0x67,0x68,0x69,0x69,0x6a,0x6b,0x6c,0x6c,0x6d,0x6d,0x6d,0x6d,0x6d,0x6d,0x6b,0x6b,0x6a,0x69,0x69,0x68,0x66,0x64,0x61,0x60,0x5f,0x5d,0x5b,0x59,0x56,0x53,0x51,0x50,0x4d,0x4b,0x48,0x45,0x43,0x40,0x3f,0x3c,0x3a,0x38,0x36,0x33,0x30,0x2e,0x2b,0x29,0x28,0x26,0x23,0x21,0x20,0x1e,0x1a,0x17,0x18,0x16,0x13,0x12,0x11,0x10,0x0d,0x09,0x09,0x08,0x07,0x06,0x04,0x02,0x02,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x03,0x04,0x05,0x06,0x07,0x09,0x0b,0x0c,0x0d,0x10,0x10,0x12,0x14,0x15,0x17,0x1a,0x1c,0x1e,0x1f,0x22,0x24,0x26,0x29,0x2b,0x2c,0x2f,0x32,0x34,0x36,0x39,0x3b,0x3d,0x3f,0x42,0x44,0x46,0x49,0x4b,0x4c,0x4f,0x52,0x54,0x56,0x58,0x5a,0x5b,0x5d,0x5e,0x61,0x63,0x64,0x64,0x65,0x65,0x66,0x69,0x67,0x68,0x68,0x68,0x68,0x68,0x68,0x67,0x66,0x66,0x65,0x64,0x64,0x62,0x60,0x5e,0x5d,0x5b,0x59,0x56,0x55,0x54,0x51,0x4e,0x4c,0x4b,0x48,0x46,0x43,0x40,0x3e,0x3d,0x3a,0x38,0x36,0x34,0x30,0x2e,0x2c,0x2a,0x28,0x27,0x24,0x21,0x1f,0x1e,0x1c,0x1a,0x16,0x15,0x15,0x11,0x10,0x0f,0x0d,0x0c,0x0a,0x08,0x07,0x06,0x05,0x04,0x02,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x0b,0x0c,0x0d,0x0e,0x0f,0x10,0x12,0x14,0x16,0x19,0x19,0x1c,0x1d,0x1f,0x22,0x24,0x26,0x28,0x2a,0x2b,0x2f,0x32,0x34,0x37,0x39,0x3b,0x3c,0x40,0x42,0x44,0x47,0x48,0x4a,0x4b,0x4e,0x50,0x51,0x53,0x55,0x56,0x58,0x5a,0x5c,0x5e,0x5f,0x5f,0x60,0x61,0x61,0x64,0x63,0x63,0x63,0x63,0x63,0x63,0x63,0x62,0x61,0x61,0x60,0x5f,0x5f,0x5d,0x5b,0x59,0x58,0x56,0x55,0x52,0x50,0x4f,0x4d,0x4a,0x4a,0x47,0x45,0x44,0x41,0x3e,0x3b,0x3b,0x38,0x36,0x34,0x30,0x2c,0x2b,0x2a,0x28,0x26,0x25,0x22,0x1d,0x1d,0x1c,0x19,0x19,0x16,0x13,0x13,0x10,0x0f,0x0d,0x0c,0x0a,0x08,0x07,0x06,0x05,0x04,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x02,0x03,0x04,0x05,0x06,0x08,0x0a,0x0c,0x0c,0x0e,0x0f,0x11,0x14,0x16,0x17,0x19,0x1a,0x1c,0x1f,0x20,0x22,0x24,0x26,0x27,0x29,0x2c,0x2f,0x32,0x34,0x36,0x38,0x39,0x3d,0x3f,0x41,0x44,0x44,0x47,0x48,0x4b,0x4d,0x4e,0x4f,0x51,0x52,0x54,0x56,0x58,0x5a,0x5b,0x5b,0x5c,0x5d,0x5d,0x5f,0x5f,0x5f,0x5f,0x5f,0x5f,0x5f,0x5f,0x5e,0x5d,0x5d,0x5c,0x5b,0x5b,0x59,0x57,0x55,0x54,0x52,0x51,0x50,0x4d,0x4b,0x49,0x46,0x47,0x43,0x40,0x40,0x3e,0x3b,0x38,0x38,0x35,0x33,0x31,0x2d,0x2a,0x29,0x27,0x26,0x23,0x22,0x1f,0x1c,0x1b,0x1a,0x19,0x17,0x16,0x14,0x11,0x0f,0x0e,0x0c,0x0b,0x09,0x07,0x06,0x05,0x04,0x03,0x02,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x02,0x03,0x04,0x04,0x06,0x07,0x09,0x0b,0x0c,0x0d,0x0f,0x12,0x14,0x15,0x16,0x18,0x19,0x1a,0x1c,0x1f,0x1f,0x22,0x25,0x26,0x27,0x2a,0x2c,0x2e,0x31,0x33,0x35,0x36,0x39,0x3b,0x3d,0x40,0x41,0x42,0x44,0x46,0x49,0x4b,0x4c,0x4d,0x4e,0x4f,0x51,0x53,0x55,0x56,0x56,0x57,0x57,0x58,0x5a,0x5a,0x5a,0x5a,0x5a,0x5a,0x5a,0x5a,0x59,0x58,0x57,0x57,0x56,0x56,0x54,0x52,0x50,0x4f,0x4e,0x4d,0x4c,0x4b,0x49,0x46,0x44,0x42,0x40,0x3d,0x3d,0x3b,0x38,0x36,0x35,0x33,0x30,0x2e,0x2b,0x29,0x27,0x26,0x24,0x21,0x1f,0x1f,0x1c,0x1a,0x19,0x18,0x16,0x14,0x12,0x0f,0x0e,0x0d,0x0c,0x0b,0x09,0x07,0x05,0x04,0x04,0x03,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x02,0x02,0x03,0x04,0x05,0x06,0x08,0x0a,0x0b,0x0c,0x0e,0x11,0x13,0x14,0x15,0x17,0x18,0x19,0x1b,0x1e,0x1e,0x21,0x23,0x25,0x27,0x2a,0x2a,0x2c,0x2f,0x31,0x33,0x34,0x37,0x39,0x3b,0x3e,0x3f,0x40,0x41,0x43,0x45,0x48,0x4a,0x4b,0x4c,0x4d,0x4e,0x50,0x52,0x53,0x53,0x54,0x54,0x55,0x55,0x57,0x57,0x57,0x57,0x57,0x57,0x57,0x55,0x55,0x54,0x54,0x53,0x52,0x51,0x50,0x4e,0x4d,0x4c,0x4b,0x49,0x47,0x45,0x43,0x41,0x40,0x3e,0x3b,0x3b,0x39,0x36,0x34,0x33,0x31,0x2e,0x2c,0x2a,0x27,0x26,0x25,0x23,0x20,0x1e,0x1e,0x1b,0x19,0x18,0x17,0x15,0x13,0x11,0x0e,0x0d,0x0c,0x0b,0x0a,0x08,0x06,0x05,0x04,0x03,0x02,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x02,0x03,0x03,0x05,0x06,0x07,0x09,0x0a,0x0b,0x0d,0x10,0x12,0x13,0x14,0x16,0x17,0x18,0x19,0x1c,0x1f,0x21,0x21,0x23,0x25,0x27,0x29,0x2a,0x2d,0x2f,0x30,0x32,0x33,0x36,0x38,0x3a,0x3b,0x3c,0x3f,0x41,0x43,0x45,0x46,0x47,0x48,0x49,0x4a,0x4c,0x4e,0x4e,0x4f,0x50,0x50,0x51,0x52,0x52,0x52,0x52,0x52,0x52,0x52,0x52,0x51,0x51,0x50,0x50,0x4f,0x4e,0x4d,0x4b,0x4a,0x49,0x48,0x47,0x46,0x45,0x43,0x3f,0x3d,0x3c,0x3a,0x37,0x37,0x36,0x33,0x32,0x2f,0x2e,0x2b,0x2b,0x28,0x26,0x24,0x23,0x21,0x1f,0x1d,0x1b,0x19,0x18,0x17,0x15,0x13,0x12,0x0f,0x0d,0x0c,0x0b,0x0a,0x09,0x07,0x05,0x04,0x03,0x03,0x02,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x02,0x03,0x04,0x05,0x06,0x08,0x09,0x0a,0x0b,0x0d,0x0f,0x10,0x13,0x15,0x16,0x17,0x18,0x19,0x1b,0x1e,0x1e,0x21,0x22,0x26,0x27,0x28,0x2a,0x2c,0x2d,0x2f,0x30,0x34,0x35,0x37,0x38,0x39,0x3b,0x3d,0x3f,0x41,0x42,0x43,0x44,0x45,0x46,0x48,0x4a,0x4a,0x4b,0x4c,0x4c,0x4d,0x4e,0x4e,0x4e,0x4e,0x4e,0x4e,0x4e,0x4e,0x4d,0x4d,0x4c,0x4c,0x4b,0x4a,0x49,0x47,0x46,0x45,0x44,0x43,0x42,0x41,0x3f,0x3c,0x3a,0x39,0x37,0x34,0x34,0x34,0x31,0x2f,0x2d,0x2c,0x29,0x28,0x26,0x23,0x21,0x21,0x1f,0x1e,0x1a,0x19,0x18,0x17,0x16,0x14,0x10,0x0f,0x0e,0x0c,0x0b,0x0a,0x09,0x06,0x05,0x04,0x04,0x03,0x02,0x01,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x02,0x02,0x03,0x04,0x06,0x07,0x08,0x08,0x09,0x0b,0x0d,0x0e,0x11,0x13,0x14,0x15,0x17,0x19,0x19,0x1b,0x1e,0x1e,0x20,0x23,0x25,0x26,0x28,0x2a,0x2b,0x2d,0x30,0x32,0x33,0x35,0x36,0x37,0x38,0x3a,0x3c,0x3e,0x3f,0x40,0x41,0x41,0x42,0x45,0x46,0x47,0x48,0x47,0x49,0x48,0x49,0x4a,0x4a,0x4b,0x4b,0x4b,0x4a,0x4a,0x49,0x48,0x49,0x47,0x48,0x46,0x47,0x45,0x42,0x42,0x41,0x40,0x3f,0x3d,0x3b,0x39,0x38,0x37,0x35,0x32,0x32,0x30,0x2e,0x2c,0x2b,0x2a,0x28,0x26,0x24,0x21,0x1f,0x1e,0x1d,0x1a,0x18,0x17,0x16,0x15,0x14,0x13,0x10,0x0d,0x0d,0x0a,0x09,0x08,0x08,0x06,0x05,0x04,0x03,0x01,0x02,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x02,0x03,0x04,0x06,0x07,0x07,0x08,0x0b,0x0b,0x0c,0x0f,0x11,0x12,0x13,0x15,0x17,0x18,0x19,0x1d,0x1e,0x1e,0x1f,0x21,0x24,0x26,0x27,0x28,0x2a,0x2d,0x2f,0x31,0x33,0x34,0x35,0x36,0x38,0x3a,0x3b,0x3c,0x3d,0x3e,0x3f,0x3f,0x41,0x42,0x43,0x43,0x44,0x44,0x45,0x46,0x46,0x46,0x46,0x46,0x46,0x46,0x46,0x45,0x45,0x44,0x44,0x43,0x43,0x42,0x41,0x40,0x3e,0x3e,0x3d,0x3c,0x3b,0x39,0x37,0x36,0x35,0x33,0x30,0x30,0x2e,0x2b,0x2a,0x28,0x27,0x26,0x24,0x22,0x1f,0x1f,0x1e,0x1b,0x19,0x17,0x15,0x14,0x13,0x12,0x11,0x0f,0x0c,0x0a,0x09,0x08,0x07,0x07,0x05,0x04,0x02,0x02,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x03,0x04,0x05,0x06,0x06,0x07,0x0a,0x0c,0x0d,0x0e,0x0f,0x10,0x11,0x13,0x15,0x17,0x18,0x1a,0x1b,0x1c,0x1d,0x1f,0x21,0x23,0x24,0x25,0x26,0x28,0x2b,0x2e,0x30,0x31,0x32,0x33,0x35,0x37,0x37,0x38,0x39,0x3a,0x3b,0x3d,0x3d,0x3e,0x3f,0x3f,0x40,0x40,0x41,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x41,0x41,0x40,0x40,0x3f,0x3f,0x3e,0x3d,0x3c,0x3a,0x3a,0x39,0x38,0x37,0x36,0x34,0x33,0x32,0x30,0x2c,0x2c,0x2b,0x28,0x27,0x25,0x24,0x23,0x21,0x1f,0x1c,0x1c,0x1b,0x19,0x18,0x16,0x14,0x12,0x11,0x10,0x0f,0x0e,0x0c,0x0a,0x08,0x07,0x06,0x06,0x05,0x04,0x02,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x03,0x04,0x05,0x06,0x06,0x08,0x0a,0x0c,0x0d,0x0e,0x0f,0x10,0x12,0x14,0x16,0x17,0x18,0x19,0x1a,0x1c,0x1e,0x20,0x21,0x22,0x23,0x24,0x26,0x28,0x2a,0x2c,0x2d,0x2e,0x2f,0x31,0x33,0x34,0x35,0x36,0x37,0x37,0x39,0x3a,0x3b,0x3b,0x3c,0x3d,0x3d,0x3d,0x3e,0x3e,0x3f,0x3f,0x3f,0x3f,0x3f,0x3e,0x3e,0x3d,0x3d,0x3d,0x3c,0x3b,0x3a,0x39,0x38,0x37,0x37,0x36,0x35,0x34,0x32,0x30,0x2f,0x2e,0x2c,0x29,0x29,0x28,0x25,0x24,0x23,0x22,0x21,0x1f,0x1d,0x1b,0x1a,0x19,0x18,0x17,0x15,0x13,0x11,0x10,0x0f,0x0e,0x0d,0x0b,0x09,0x07,0x06,0x06,0x05,0x04,0x03,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x02,0x03,0x04,0x04,0x05,0x06,0x07,0x09,0x0b,0x0c,0x0d,0x0e,0x0f,0x11,0x13,0x15,0x16,0x17,0x18,0x19,0x1b,0x1d,0x1f,0x20,0x21,0x22,0x23,0x25,0x27,0x29,0x2a,0x2b,0x2c,0x2d,0x2f,0x31,0x32,0x33,0x34,0x35,0x35,0x36,0x38,0x39,0x39,0x3a,0x3a,0x3a,0x3b,0x3c,0x3c,0x3c,0x3c,0x3c,0x3c,0x3c,0x3c,0x3b,0x3b,0x3a,0x3a,0x3a,0x39,0x39,0x37,0x36,0x35,0x35,0x34,0x33,0x32,0x30,0x2e,0x2d,0x2c,0x2b,0x2a,0x28,0x26,0x24,0x23,0x22,0x21,0x20,0x1e,0x1c,0x1a,0x19,0x18,0x17,0x16,0x14,0x12,0x10,0x0f,0x0e,0x0d,0x0c,0x0a,0x07,0x07,0x06,0x05,0x04,0x03,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x02,0x03,0x04,0x04,0x05,0x06,0x07,0x09,0x0b,0x0c,0x0d,0x0e,0x10,0x12,0x14,0x15,0x16,0x17,0x18,0x18,0x1b,0x1d,0x1e,0x1e,0x1f,0x21,0x23,0x25,0x26,0x27,0x28,0x29,0x29,0x2a,0x2d,0x2f,0x2f,0x30,0x30,0x32,0x33,0x34,0x36,0x36,0x35,0x36,0x36,0x38,0x39,0x39,0x38,0x38,0x38,0x38,0x39,0x39,0x39,0x37,0x36,0x36,0x35,0x36,0x36,0x33,0x33,0x32,0x30,0x30,0x2f,0x2d,0x2b,0x2a,0x29,0x29,0x28,0x27,0x25,0x23,0x22,0x21,0x1f,0x1e,0x1e,0x1c,0x1a,0x18,0x18,0x17,0x16,0x15,0x13,0x11,0x0f,0x0e,0x0d,0x0c,0x0b,0x09,0x07,0x06,0x05,0x04,0x04,0x03,0x02,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x02,0x03,0x03,0x04,0x05,0x06,0x08,0x09,0x0b,0x0c,0x0d,0x0e,0x10,0x12,0x13,0x14,0x15,0x16,0x18,0x1a,0x1b,0x1c,0x1b,0x1c,0x1e,0x20,0x22,0x23,0x24,0x25,0x26,0x26,0x29,0x2a,0x2b,0x2c,0x2c,0x2d,0x2e,0x30,0x32,0x32,0x32,0x32,0x32,0x33,0x34,0x35,0x35,0x34,0x34,0x34,0x34,0x34,0x35,0x35,0x34,0x33,0x32,0x32,0x32,0x32,0x30,0x2f,0x2e,0x2d,0x2c,0x2c,0x2b,0x28,0x27,0x26,0x26,0x25,0x24,0x22,0x20,0x1f,0x1e,0x1c,0x1b,0x1c,0x1a,0x18,0x17,0x16,0x15,0x14,0x12,0x11,0x0f,0x0e,0x0d,0x0c,0x0a,0x09,0x08,0x06,0x05,0x04,0x03,0x03,0x02,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x02,0x01,0x01,0x03,0x05,0x05,0x06,0x07,0x09,0x0a,0x0b,0x0c,0x0c,0x0e,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x19,0x1b,0x1c,0x1c,0x1f,0x20,0x21,0x22,0x23,0x24,0x24,0x27,0x28,0x27,0x2a,0x2a,0x2b,0x2b,0x2c,0x2e,0x2e,0x2f,0x30,0x30,0x31,0x31,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x31,0x31,0x31,0x30,0x30,0x2f,0x2e,0x2e,0x2c,0x2b,0x2b,0x2a,0x2a,0x29,0x28,0x25,0x24,0x24,0x23,0x22,0x20,0x1e,0x1d,0x1c,0x1c,0x1b,0x18,0x17,0x16,0x15,0x14,0x13,0x12,0x10,0x0e,0x0c,0x0c,0x0b,0x0a,0x08,0x08,0x06,0x05,0x04,0x02,0x01,0x01,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x02,0x03,0x05,0x05,0x06,0x07,0x07,0x09,0x09,0x0a,0x0c,0x0f,0x10,0x11,0x12,0x12,0x14,0x16,0x19,0x18,0x19,0x1a,0x1c,0x1e,0x1f,0x20,0x21,0x21,0x22,0x22,0x25,0x25,0x27,0x28,0x29,0x28,0x2a,0x2b,0x2b,0x2b,0x2c,0x2d,0x2e,0x2d,0x2e,0x2e,0x2f,0x2e,0x2e,0x2e,0x2f,0x2d,0x2d,0x2d,0x2e,0x2c,0x2c,0x2b,0x2c,0x2b,0x2a,0x28,0x29,0x28,0x25,0x25,0x25,0x23,0x22,0x21,0x21,0x20,0x1e,0x1c,0x1b,0x1a,0x19,0x18,0x18,0x16,0x13,0x12,0x12,0x11,0x10,0x0e,0x0c,0x0a,0x0a,0x09,0x07,0x07,0x06,0x05,0x05,0x03,0x02,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x07,0x0a,0x0a,0x0a,0x0d,0x0d,0x0e,0x0f,0x11,0x13,0x15,0x16,0x16,0x17,0x17,0x19,0x1b,0x1c,0x1d,0x1e,0x1e,0x1f,0x20,0x22,0x23,0x23,0x25,0x26,0x25,0x26,0x27,0x29,0x27,0x28,0x2a,0x2b,0x29,0x2a,0x2a,0x2c,0x2a,0x2a,0x2b,0x2b,0x29,0x29,0x29,0x2b,0x28,0x28,0x27,0x29,0x28,0x27,0x25,0x26,0x25,0x23,0x22,0x21,0x20,0x1f,0x1e,0x1e,0x1d,0x1b,0x19,0x18,0x17,0x17,0x15,0x15,0x15,0x12,0x10,0x0f,0x0e,0x0d,0x0c,0x0a,0x09,0x08,0x07,0x07,0x06,0x05,0x04,0x02,0x02,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x02,0x02,0x04,0x05,0x05,0x06,0x06,0x09,0x09,0x09,0x0c,0x0c,0x0d,0x0e,0x11,0x11,0x11,0x14,0x14,0x15,0x16,0x17,0x19,0x1a,0x1b,0x1c,0x1c,0x1d,0x1e,0x1e,0x20,0x21,0x22,0x22,0x23,0x24,0x25,0x25,0x26,0x26,0x27,0x27,0x27,0x27,0x27,0x28,0x28,0x28,0x28,0x28,0x27,0x27,0x27,0x27,0x27,0x26,0x26,0x24,0x24,0x23,0x23,0x22,0x22,0x21,0x20,0x1e,0x1e,0x1d,0x1c,0x1c,0x1b,0x1a,0x18,0x17,0x16,0x15,0x14,0x13,0x11,0x10,0x0f,0x0e,0x0d,0x0c,0x0b,0x09,0x08,0x07,0x06,0x06,0x05,0x04,0x02,0x02,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x03,0x04,0x05,0x05,0x06,0x07,0x08,0x08,0x0b,0x0b,0x0c,0x0d,0x0e,0x0f,0x11,0x13,0x13,0x14,0x15,0x16,0x17,0x17,0x1a,0x1a,0x1b,0x1c,0x1d,0x1e,0x1f,0x1f,0x20,0x20,0x21,0x22,0x23,0x23,0x24,0x24,0x25,0x25,0x25,0x25,0x26,0x26,0x26,0x26,0x26,0x26,0x26,0x25,0x25,0x25,0x25,0x24,0x24,0x22,0x22,0x21,0x21,0x20,0x20,0x1f,0x1e,0x1d,0x1c,0x1c,0x1b,0x1a,0x19,0x17,0x16,0x15,0x15,0x14,0x13,0x13,0x11,0x0f,0x0e,0x0d,0x0c,0x0b,0x0a,0x08,0x07,0x06,0x06,0x05,0x05,0x03,0x01,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x02,0x03,0x04,0x04,0x05,0x06,0x08,0x09,0x0a,0x0a,0x0b,0x0c,0x0c,0x0f,0x0f,0x11,0x12,0x13,0x13,0x14,0x16,0x17,0x17,0x18,0x18,0x1a,0x1b,0x1c,0x1d,0x1d,0x1e,0x1e,0x1f,0x1f,0x21,0x20,0x21,0x22,0x22,0x22,0x22,0x24,0x23,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x21,0x20,0x1f,0x1f,0x1f,0x1e,0x1e,0x1d,0x1d,0x1b,0x19,0x1a,0x18,0x18,0x17,0x17,0x15,0x13,0x13,0x13,0x12,0x10,0x0f,0x0e,0x0c,0x0c,0x0b,0x0a,0x09,0x08,0x06,0x06,0x05,0x04,0x04,0x03,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x02,0x03,0x03,0x04,0x05,0x07,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0c,0x0c,0x0f,0x10,0x10,0x11,0x12,0x13,0x14,0x15,0x15,0x15,0x17,0x19,0x1a,0x1a,0x1b,0x1b,0x1b,0x1c,0x1c,0x1d,0x1e,0x1e,0x1f,0x1f,0x1f,0x1f,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x1f,0x1f,0x1f,0x1f,0x1f,0x1e,0x1e,0x1d,0x1c,0x1c,0x1b,0x1b,0x1b,0x1a,0x18,0x16,0x17,0x15,0x15,0x14,0x14,0x12,0x10,0x11,0x10,0x10,0x0e,0x0c,0x0c,0x0b,0x0b,0x0a,0x09,0x08,0x07,0x05,0x03,0x04,0x03,0x03,0x02,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x01,0x02,0x02,0x03,0x03,0x04,0x05,0x06,0x08,0x08,0x09,0x0b,0x0b,0x0c,0x0c,0x0d,0x0e,0x0f,0x11,0x11,0x12,0x13,0x13,0x15,0x15,0x15,0x17,0x18,0x19,0x19,0x19,0x19,0x1a,0x1a,0x1c,0x1c,0x1d,0x1d,0x1d,0x1d,0x1d,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1d,0x1d,0x1d,0x1d,0x1d,0x1c,0x1c,0x1b,0x1a,0x19,0x19,0x19,0x19,0x18,0x17,0x16,0x15,0x15,0x13,0x12,0x12,0x10,0x10,0x0f,0x0e,0x0d,0x0c,0x0c,0x0b,0x09,0x09,0x08,0x08,0x07,0x06,0x05,0x03,0x03,0x02,0x02,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x02,0x02,0x03,0x04,0x04,0x06,0x06,0x07,0x09,0x0a,0x0b,0x0a,0x0d,0x0c,0x0d,0x0d,0x10,0x10,0x11,0x11,0x12,0x13,0x13,0x15,0x16,0x17,0x17,0x17,0x18,0x18,0x19,0x1a,0x1a,0x1a,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1c,0x1c,0x1b,0x1b,0x1b,0x1b,0x1a,0x1a,0x1a,0x19,0x18,0x18,0x17,0x17,0x17,0x16,0x14,0x13,0x13,0x12,0x11,0x11,0x10,0x0e,0x0d,0x0d,0x0c,0x0c,0x0a,0x0b,0x09,0x07,0x07,0x06,0x06,0x05,0x04,0x03,0x02,0x01,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x02,0x03,0x04,0x04,0x05,0x05,0x06,0x07,0x08,0x09,0x0a,0x0a,0x0a,0x0b,0x0d,0x0e,0x0f,0x0f,0x10,0x10,0x11,0x13,0x13,0x14,0x14,0x14,0x15,0x15,0x16,0x17,0x17,0x17,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x19,0x19,0x18,0x18,0x18,0x18,0x17,0x17,0x17,0x16,0x15,0x15,0x14,0x14,0x14,0x13,0x11,0x11,0x10,0x10,0x0f,0x0f,0x0e,0x0c,0x0b,0x0a,0x0a,0x0a,0x09,0x08,0x07,0x06,0x05,0x05,0x04,0x03,0x02,0x01,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x02,0x02,0x03,0x03,0x04,0x04,0x05,0x06,0x07,0x08,0x08,0x09,0x09,0x0a,0x0a,0x0c,0x0d,0x0e,0x0e,0x0f,0x10,0x11,0x12,0x12,0x12,0x13,0x13,0x13,0x14,0x15,0x15,0x15,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x15,0x15,0x15,0x14,0x13,0x13,0x13,0x12,0x12,0x11,0x10,0x0f,0x0f,0x0e,0x0e,0x0d,0x0c,0x0a,0x0a,0x09,0x09,0x08,0x08,0x07,0x06,0x05,0x04,0x04,0x03,0x03,0x01,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x02,0x02,0x03,0x03,0x05,0x06,0x06,0x07,0x07,0x08,0x08,0x09,0x0a,0x0b,0x0c,0x0c,0x0d,0x0d,0x0e,0x0f,0x10,0x11,0x11,0x11,0x11,0x12,0x13,0x13,0x14,0x14,0x14,0x14,0x14,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x14,0x14,0x14,0x14,0x14,0x14,0x13,0x12,0x12,0x11,0x11,0x11,0x11,0x10,0x0f,0x0e,0x0d,0x0d,0x0c,0x0c,0x0b,0x0a,0x09,0x08,0x08,0x07,0x07,0x05,0x05,0x04,0x03,0x03,0x02,0x02,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x02,0x02,0x03,0x03,0x05,0x06,0x06,0x07,0x07,0x07,0x08,0x09,0x0a,0x0a,0x0b,0x0c,0x0c,0x0c,0x0d,0x0e,0x0e,0x0f,0x0f,0x0f,0x10,0x11,0x12,0x12,0x12,0x12,0x12,0x12,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x12,0x12,0x12,0x12,0x12,0x12,0x11,0x10,0x0f,0x0f,0x0f,0x0f,0x0d,0x0d,0x0c,0x0c,0x0c,0x0b,0x0a,0x0a,0x09,0x08,0x07,0x07,0x07,0x06,0x05,0x03,0x03,0x03,0x02,0x02,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x02,0x02,0x02,0x02,0x04,0x03,0x06,0x06,0x06,0x07,0x08,0x09,0x07,0x09,0x0a,0x0b,0x0b,0x0b,0x0b,0x0b,0x0c,0x0c,0x0c,0x0e,0x10,0x0f,0x0f,0x10,0x10,0x10,0x10,0x10,0x10,0x11,0x11,0x11,0x11,0x11,0x10,0x10,0x10,0x10,0x10,0x10,0x0f,0x0f,0x0e,0x0d,0x0c,0x0c,0x0c,0x0d,0x0a,0x0b,0x0b,0x0b,0x0a,0x08,0x07,0x09,0x07,0x07,0x06,0x06,0x04,0x04,0x04,0x02,0x02,0x02,0x02,0x01,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x00,0x00,0x02,0x02,0x03,0x03,0x04,0x04,0x05,0x05,0x07,0x08,0x06,0x08,0x08,0x09,0x09,0x09,0x0b,0x0b,0x0a,0x0a,0x0c,0x0c,0x0c,0x0c,0x0d,0x0e,0x0e,0x0e,0x0e,0x0e,0x0e,0x0f,0x0f,0x0f,0x0f,0x0f,0x0e,0x0e,0x0e,0x0e,0x0e,0x0e,0x0d,0x0d,0x0c,0x0b,0x0c,0x0a,0x0b,0x0c,0x0a,0x09,0x09,0x09,0x08,0x06,0x07,0x07,0x06,0x05,0x05,0x04,0x03,0x02,0x02,0x02,0x01,0x00,0x00,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x02,0x02,0x02,0x02,0x02,0x05,0x04,0x05,0x06,0x06,0x07,0x07,0x06,0x09,0x09,0x08,0x08,0x0a,0x09,0x0a,0x0b,0x0b,0x0b,0x0b,0x0b,0x0b,0x0c,0x0c,0x0c,0x0c,0x0c,0x0c,0x0c,0x0c,0x0c,0x0b,0x0b,0x0b,0x0b,0x0b,0x0b,0x0a,0x09,0x0a,0x08,0x09,0x0a,0x09,0x07,0x07,0x07,0x06,0x05,0x05,0x04,0x04,0x02,0x02,0x02,0x02,0x02,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x01,0x01,0x02,0x02,0x03,0x03,0x04,0x04,0x04,0x05,0x05,0x06,0x06,0x07,0x07,0x07,0x07,0x08,0x08,0x09,0x09,0x09,0x09,0x09,0x09,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x09,0x09,0x09,0x09,0x09,0x09,0x09,0x08,0x08,0x07,0x07,0x07,0x07,0x06,0x05,0x05,0x05,0x04,0x04,0x04,0x02,0x02,0x02,0x02,0x01,0x01,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x01,0x01,0x02,0x02,0x03,0x03,0x03,0x04,0x04,0x05,0x05,0x06,0x06,0x06,0x06,0x07,0x07,0x07,0x08,0x08,0x08,0x08,0x08,0x09,0x09,0x09,0x09,0x09,0x09,0x09,0x09,0x08,0x08,0x08,0x08,0x08,0x08,0x07,0x07,0x07,0x06,0x06,0x06,0x06,0x05,0x04,0x04,0x04,0x03,0x03,0x03,0x02,0x02,0x01,0x01,0x01,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x02,0x02,0x02,0x02,0x02,0x03,0x03,0x04,0x04,0x05,0x05,0x05,0x05,0x06,0x06,0x06,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x06,0x06,0x06,0x05,0x05,0x05,0x05,0x04,0x03,0x03,0x03,0x02,0x02,0x02,0x02,0x01,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x02,0x02,0x02,0x02,0x02,0x02,0x03,0x04,0x04,0x04,0x04,0x05,0x05,0x05,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x05,0x05,0x05,0x04,0x04,0x04,0x04,0x04,0x02,0x02,0x02,0x02,0x02,0x02,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x01,0x01,0x01,0x02,0x02,0x02,0x01,0x03,0x03,0x03,0x03,0x03,0x04,0x05,0x05,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x05,0x04,0x02,0x03,0x03,0x03,0x03,0x03,0x01,0x03,0x02,0x02,0x01,0x01,0x01,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x01,0x00,0x01,0x01,0x01,0x02,0x02,0x02,0x01,0x01,0x03,0x03,0x03,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x03,0x03,0x02,0x01,0x01,0x02,0x02,0x02,0x01,0x01,0x00,0x00,0x01,0x01,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x00,0x00,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x00,0x00,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 +}; +unsigned char data160[25600] = { +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x02,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x02,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x01,0x01,0x01,0x02,0x02,0x01,0x01,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x01,0x01,0x02,0x02,0x01,0x01,0x01,0x01,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x01,0x01,0x01,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x03,0x03,0x03,0x04,0x04,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x04,0x04,0x03,0x03,0x03,0x02,0x02,0x02,0x02,0x02,0x02,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x01,0x01,0x01,0x02,0x02,0x02,0x03,0x03,0x03,0x03,0x03,0x04,0x04,0x04,0x04,0x05,0x05,0x05,0x05,0x05,0x05,0x05,0x05,0x05,0x05,0x05,0x05,0x05,0x05,0x05,0x05,0x05,0x05,0x05,0x05,0x05,0x04,0x04,0x04,0x04,0x03,0x03,0x03,0x03,0x03,0x02,0x02,0x02,0x01,0x01,0x01,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x02,0x02,0x02,0x02,0x02,0x02,0x03,0x04,0x04,0x04,0x04,0x04,0x05,0x05,0x05,0x05,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x05,0x05,0x05,0x05,0x04,0x04,0x04,0x04,0x04,0x03,0x02,0x02,0x02,0x02,0x02,0x02,0x01,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x02,0x02,0x02,0x02,0x02,0x03,0x03,0x03,0x04,0x04,0x05,0x05,0x05,0x05,0x06,0x06,0x06,0x06,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x06,0x06,0x06,0x06,0x05,0x05,0x05,0x05,0x04,0x04,0x03,0x03,0x03,0x02,0x02,0x02,0x02,0x01,0x01,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x01,0x01,0x02,0x02,0x02,0x03,0x03,0x03,0x04,0x04,0x04,0x05,0x05,0x06,0x06,0x06,0x06,0x07,0x07,0x07,0x07,0x08,0x08,0x08,0x08,0x08,0x08,0x09,0x09,0x09,0x09,0x09,0x09,0x09,0x09,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x07,0x07,0x07,0x07,0x06,0x06,0x06,0x06,0x05,0x05,0x04,0x04,0x04,0x03,0x03,0x03,0x02,0x02,0x02,0x01,0x01,0x01,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x01,0x01,0x02,0x02,0x02,0x03,0x03,0x05,0x04,0x04,0x05,0x05,0x05,0x06,0x06,0x07,0x07,0x07,0x09,0x08,0x08,0x09,0x0a,0x09,0x09,0x09,0x09,0x09,0x09,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x09,0x09,0x09,0x09,0x09,0x09,0x09,0x0a,0x09,0x08,0x08,0x09,0x07,0x07,0x07,0x06,0x06,0x05,0x05,0x05,0x04,0x04,0x04,0x03,0x02,0x02,0x02,0x02,0x01,0x01,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x02,0x02,0x02,0x03,0x03,0x04,0x05,0x05,0x06,0x06,0x06,0x07,0x07,0x07,0x08,0x09,0x09,0x09,0x09,0x0b,0x0a,0x09,0x0b,0x0b,0x0a,0x0b,0x0b,0x0b,0x0b,0x0c,0x0b,0x0b,0x0c,0x0c,0x0c,0x0c,0x0c,0x0b,0x0c,0x0c,0x0b,0x0b,0x0b,0x0b,0x0a,0x0c,0x0b,0x09,0x0a,0x0b,0x09,0x09,0x09,0x09,0x08,0x07,0x07,0x07,0x06,0x06,0x06,0x05,0x04,0x04,0x03,0x03,0x02,0x02,0x02,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x02,0x02,0x01,0x03,0x03,0x03,0x05,0x05,0x06,0x07,0x07,0x06,0x08,0x08,0x09,0x09,0x09,0x0a,0x0b,0x0b,0x0a,0x0a,0x0c,0x0b,0x0c,0x0c,0x0c,0x0c,0x0d,0x0d,0x0d,0x0d,0x0e,0x0d,0x0d,0x0e,0x0e,0x0e,0x0e,0x0e,0x0d,0x0e,0x0e,0x0d,0x0d,0x0d,0x0d,0x0c,0x0c,0x0b,0x0b,0x0b,0x0c,0x0a,0x0a,0x0b,0x0b,0x0a,0x09,0x09,0x09,0x08,0x07,0x06,0x07,0x06,0x06,0x05,0x05,0x03,0x03,0x02,0x01,0x02,0x02,0x01,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x01,0x02,0x02,0x03,0x03,0x04,0x05,0x05,0x06,0x06,0x06,0x08,0x08,0x07,0x09,0x09,0x0a,0x0a,0x0a,0x0b,0x0c,0x0c,0x0b,0x0b,0x0d,0x0c,0x0e,0x0d,0x0e,0x0e,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x10,0x10,0x10,0x10,0x10,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0e,0x0e,0x0d,0x0d,0x0c,0x0d,0x0b,0x0b,0x0c,0x0c,0x0b,0x0a,0x0a,0x0a,0x09,0x08,0x07,0x08,0x07,0x06,0x06,0x06,0x05,0x05,0x03,0x03,0x03,0x02,0x02,0x01,0x01,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x02,0x02,0x02,0x04,0x04,0x05,0x05,0x06,0x06,0x06,0x07,0x07,0x09,0x09,0x0a,0x0a,0x0a,0x0b,0x0b,0x0b,0x0d,0x0d,0x0e,0x0e,0x0e,0x0f,0x0f,0x10,0x10,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x10,0x10,0x0f,0x0f,0x0e,0x0e,0x0e,0x0d,0x0d,0x0b,0x0b,0x0b,0x0a,0x0a,0x0a,0x09,0x09,0x07,0x07,0x06,0x06,0x06,0x05,0x05,0x03,0x03,0x02,0x02,0x02,0x01,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x02,0x02,0x03,0x03,0x05,0x05,0x06,0x06,0x07,0x07,0x07,0x08,0x08,0x0a,0x0a,0x0b,0x0b,0x0c,0x0c,0x0c,0x0e,0x0e,0x0f,0x0f,0x10,0x10,0x10,0x11,0x11,0x11,0x12,0x12,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x12,0x12,0x11,0x11,0x11,0x10,0x10,0x10,0x0f,0x0f,0x0d,0x0d,0x0c,0x0c,0x0c,0x0b,0x0b,0x0a,0x0a,0x08,0x08,0x07,0x07,0x07,0x06,0x06,0x04,0x04,0x03,0x03,0x02,0x02,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x02,0x02,0x02,0x03,0x03,0x04,0x06,0x06,0x06,0x07,0x07,0x08,0x08,0x09,0x09,0x0b,0x0b,0x0c,0x0c,0x0d,0x0d,0x0e,0x0f,0x10,0x10,0x11,0x11,0x11,0x11,0x12,0x12,0x13,0x13,0x14,0x14,0x14,0x14,0x14,0x14,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x13,0x13,0x12,0x12,0x11,0x11,0x11,0x11,0x10,0x10,0x0e,0x0e,0x0d,0x0d,0x0c,0x0c,0x0b,0x0b,0x09,0x09,0x08,0x08,0x07,0x07,0x06,0x05,0x05,0x04,0x03,0x03,0x02,0x02,0x02,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x02,0x02,0x03,0x03,0x04,0x04,0x05,0x05,0x07,0x07,0x08,0x08,0x09,0x09,0x0a,0x0a,0x0c,0x0c,0x0d,0x0e,0x0e,0x0f,0x0f,0x11,0x11,0x12,0x12,0x12,0x13,0x13,0x13,0x14,0x14,0x15,0x15,0x15,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x15,0x15,0x15,0x14,0x14,0x13,0x13,0x13,0x12,0x12,0x12,0x11,0x10,0x0f,0x0f,0x0e,0x0e,0x0d,0x0c,0x0c,0x0a,0x0a,0x09,0x09,0x08,0x08,0x07,0x07,0x05,0x05,0x04,0x04,0x03,0x03,0x02,0x01,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x02,0x02,0x03,0x04,0x04,0x05,0x05,0x06,0x06,0x08,0x08,0x09,0x09,0x0a,0x0c,0x0b,0x0c,0x0e,0x10,0x0f,0x11,0x10,0x12,0x11,0x12,0x13,0x13,0x14,0x15,0x16,0x15,0x16,0x16,0x17,0x17,0x18,0x18,0x18,0x18,0x18,0x17,0x18,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x17,0x17,0x16,0x16,0x15,0x16,0x15,0x14,0x13,0x13,0x11,0x11,0x12,0x10,0x10,0x0f,0x0f,0x0e,0x0c,0x0b,0x0c,0x0a,0x09,0x09,0x08,0x08,0x06,0x06,0x05,0x05,0x04,0x04,0x03,0x02,0x01,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x01,0x02,0x03,0x03,0x05,0x05,0x06,0x06,0x06,0x07,0x09,0x0a,0x09,0x0a,0x0c,0x0b,0x0d,0x0d,0x0e,0x0f,0x11,0x11,0x13,0x12,0x13,0x13,0x15,0x15,0x16,0x16,0x17,0x17,0x17,0x18,0x18,0x19,0x19,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x19,0x19,0x18,0x18,0x17,0x17,0x17,0x16,0x16,0x13,0x14,0x13,0x13,0x12,0x12,0x11,0x11,0x0f,0x0e,0x0d,0x0d,0x0b,0x0c,0x0a,0x09,0x0a,0x08,0x07,0x07,0x06,0x06,0x06,0x04,0x03,0x02,0x02,0x01,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x02,0x02,0x03,0x03,0x03,0x05,0x05,0x06,0x08,0x07,0x08,0x09,0x0b,0x0b,0x0b,0x0b,0x0d,0x0d,0x0e,0x0f,0x11,0x10,0x12,0x13,0x13,0x14,0x14,0x15,0x16,0x17,0x18,0x18,0x19,0x18,0x19,0x1a,0x1a,0x1a,0x1b,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1b,0x1a,0x1a,0x1a,0x19,0x18,0x19,0x18,0x18,0x17,0x16,0x15,0x14,0x14,0x13,0x13,0x11,0x10,0x10,0x0f,0x0e,0x0d,0x0d,0x0b,0x0b,0x0b,0x0a,0x08,0x09,0x07,0x08,0x07,0x05,0x06,0x04,0x03,0x02,0x02,0x02,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x02,0x02,0x03,0x03,0x04,0x06,0x06,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0b,0x0d,0x0d,0x0e,0x10,0x11,0x12,0x12,0x12,0x14,0x15,0x14,0x16,0x16,0x18,0x18,0x19,0x19,0x1a,0x1a,0x1a,0x1b,0x1b,0x1d,0x1d,0x1d,0x1d,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1e,0x1e,0x1e,0x1e,0x1e,0x1d,0x1d,0x1d,0x1c,0x1b,0x1b,0x1a,0x1a,0x1a,0x19,0x18,0x17,0x17,0x16,0x16,0x14,0x14,0x13,0x12,0x11,0x11,0x11,0x10,0x0e,0x0d,0x0d,0x0b,0x0b,0x0a,0x0a,0x09,0x08,0x07,0x06,0x05,0x05,0x04,0x03,0x03,0x02,0x02,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x02,0x02,0x03,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x09,0x0a,0x0b,0x0b,0x0d,0x0e,0x0f,0x10,0x11,0x11,0x12,0x13,0x14,0x16,0x16,0x17,0x17,0x18,0x19,0x19,0x1b,0x1b,0x1c,0x1c,0x1d,0x1d,0x1d,0x1e,0x1e,0x1f,0x1f,0x20,0x20,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x20,0x20,0x1f,0x1f,0x1e,0x1e,0x1d,0x1d,0x1d,0x1c,0x1c,0x19,0x1a,0x19,0x19,0x18,0x17,0x17,0x16,0x15,0x13,0x13,0x12,0x11,0x11,0x0f,0x0e,0x0e,0x0d,0x0b,0x0b,0x0a,0x09,0x08,0x07,0x06,0x06,0x05,0x04,0x03,0x03,0x02,0x02,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x02,0x02,0x03,0x04,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0a,0x0b,0x0c,0x0c,0x0e,0x10,0x11,0x11,0x12,0x13,0x13,0x15,0x16,0x17,0x17,0x18,0x19,0x19,0x1a,0x1b,0x1c,0x1d,0x1d,0x1e,0x1e,0x1f,0x1f,0x20,0x20,0x21,0x22,0x22,0x22,0x23,0x23,0x23,0x23,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x23,0x23,0x23,0x23,0x23,0x22,0x22,0x22,0x21,0x20,0x20,0x1f,0x1f,0x1e,0x1e,0x1d,0x1d,0x1b,0x1a,0x1a,0x19,0x19,0x18,0x17,0x17,0x15,0x14,0x13,0x13,0x12,0x11,0x11,0x0f,0x0d,0x0c,0x0c,0x0b,0x0a,0x09,0x08,0x08,0x07,0x06,0x05,0x04,0x04,0x03,0x02,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x02,0x03,0x04,0x05,0x05,0x06,0x07,0x08,0x08,0x09,0x0b,0x0b,0x0c,0x0d,0x0e,0x0f,0x10,0x12,0x13,0x13,0x14,0x15,0x16,0x17,0x17,0x18,0x1a,0x1a,0x1b,0x1c,0x1c,0x1e,0x1e,0x1f,0x1f,0x20,0x20,0x21,0x21,0x23,0x23,0x23,0x24,0x24,0x25,0x25,0x25,0x25,0x25,0x26,0x26,0x26,0x26,0x26,0x26,0x26,0x25,0x25,0x25,0x25,0x25,0x24,0x24,0x23,0x22,0x22,0x21,0x21,0x20,0x20,0x1f,0x1f,0x1d,0x1d,0x1c,0x1c,0x1b,0x1a,0x1a,0x18,0x17,0x16,0x15,0x15,0x14,0x13,0x13,0x12,0x10,0x0f,0x0e,0x0d,0x0c,0x0b,0x0b,0x09,0x08,0x07,0x06,0x06,0x05,0x05,0x03,0x02,0x01,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x03,0x03,0x04,0x05,0x05,0x06,0x06,0x08,0x09,0x09,0x0a,0x0c,0x0c,0x0d,0x0e,0x10,0x11,0x11,0x12,0x14,0x14,0x15,0x16,0x17,0x19,0x1a,0x1a,0x1b,0x1c,0x1c,0x1d,0x1e,0x20,0x1f,0x21,0x22,0x22,0x23,0x23,0x24,0x25,0x25,0x26,0x26,0x27,0x27,0x28,0x28,0x28,0x27,0x27,0x29,0x29,0x29,0x29,0x28,0x27,0x28,0x28,0x28,0x28,0x27,0x26,0x26,0x26,0x25,0x24,0x24,0x23,0x23,0x22,0x21,0x21,0x1f,0x1f,0x1e,0x1d,0x1c,0x1c,0x1b,0x1a,0x19,0x17,0x17,0x16,0x15,0x14,0x14,0x12,0x12,0x11,0x0f,0x0e,0x0d,0x0c,0x0c,0x0a,0x09,0x08,0x07,0x06,0x06,0x05,0x04,0x03,0x02,0x02,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x02,0x02,0x04,0x05,0x06,0x06,0x07,0x07,0x09,0x0a,0x0b,0x0c,0x0d,0x0f,0x10,0x11,0x10,0x12,0x15,0x15,0x15,0x16,0x17,0x19,0x19,0x1b,0x1b,0x1d,0x1d,0x1e,0x1f,0x20,0x20,0x22,0x23,0x23,0x25,0x24,0x26,0x26,0x27,0x26,0x28,0x29,0x28,0x2a,0x29,0x2b,0x2b,0x2b,0x2a,0x2a,0x2c,0x2c,0x2c,0x2c,0x2b,0x2a,0x2b,0x2b,0x2b,0x2b,0x29,0x29,0x28,0x29,0x29,0x26,0x27,0x26,0x26,0x24,0x24,0x22,0x23,0x22,0x20,0x20,0x1f,0x1e,0x1d,0x1d,0x1a,0x1a,0x18,0x19,0x17,0x16,0x15,0x14,0x14,0x12,0x10,0x11,0x10,0x0f,0x0d,0x0c,0x0a,0x09,0x08,0x07,0x07,0x06,0x05,0x05,0x04,0x02,0x02,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x03,0x02,0x04,0x05,0x05,0x07,0x07,0x08,0x09,0x0a,0x0b,0x0d,0x0e,0x0f,0x11,0x12,0x13,0x12,0x13,0x16,0x17,0x18,0x18,0x19,0x1a,0x1b,0x1b,0x1e,0x1f,0x1f,0x20,0x21,0x22,0x22,0x23,0x25,0x26,0x27,0x27,0x28,0x28,0x29,0x29,0x2b,0x2b,0x2b,0x2c,0x2c,0x2d,0x2d,0x2d,0x2d,0x2d,0x2e,0x2e,0x2e,0x2e,0x2e,0x2d,0x2d,0x2d,0x2d,0x2d,0x2c,0x2c,0x2b,0x2b,0x2b,0x29,0x29,0x28,0x28,0x27,0x26,0x25,0x25,0x24,0x23,0x22,0x21,0x20,0x1f,0x1f,0x1d,0x1c,0x1b,0x1a,0x19,0x18,0x18,0x17,0x14,0x13,0x12,0x13,0x12,0x11,0x0e,0x0e,0x0c,0x0b,0x0a,0x09,0x08,0x07,0x07,0x05,0x05,0x03,0x02,0x03,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x02,0x02,0x03,0x04,0x05,0x05,0x07,0x07,0x08,0x0a,0x0b,0x0c,0x0c,0x0d,0x0f,0x11,0x12,0x13,0x14,0x14,0x16,0x16,0x18,0x19,0x1a,0x1b,0x1b,0x1d,0x1f,0x20,0x21,0x21,0x22,0x23,0x24,0x25,0x27,0x27,0x28,0x29,0x29,0x2a,0x2a,0x2b,0x2b,0x2d,0x2e,0x2e,0x2f,0x2f,0x30,0x30,0x30,0x30,0x30,0x31,0x31,0x31,0x31,0x31,0x30,0x30,0x30,0x30,0x30,0x2f,0x2f,0x2e,0x2e,0x2d,0x2c,0x2b,0x2a,0x2a,0x29,0x29,0x27,0x27,0x26,0x25,0x24,0x23,0x22,0x21,0x21,0x1f,0x1e,0x1d,0x1b,0x1b,0x1a,0x19,0x17,0x16,0x15,0x14,0x14,0x13,0x12,0x10,0x0f,0x0d,0x0c,0x0c,0x0b,0x0a,0x07,0x07,0x06,0x05,0x05,0x03,0x03,0x02,0x02,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x02,0x02,0x03,0x04,0x05,0x05,0x06,0x08,0x08,0x0a,0x0b,0x0c,0x0d,0x0d,0x0f,0x10,0x12,0x13,0x14,0x15,0x16,0x18,0x18,0x19,0x1a,0x1c,0x1d,0x1d,0x1f,0x20,0x21,0x22,0x24,0x24,0x25,0x25,0x27,0x29,0x29,0x2a,0x2b,0x2b,0x2c,0x2c,0x2e,0x30,0x30,0x31,0x30,0x32,0x31,0x33,0x32,0x33,0x33,0x33,0x34,0x33,0x33,0x33,0x34,0x33,0x33,0x33,0x32,0x33,0x31,0x31,0x30,0x31,0x30,0x2f,0x2d,0x2c,0x2c,0x2b,0x2c,0x2a,0x29,0x28,0x26,0x25,0x25,0x24,0x24,0x22,0x20,0x1f,0x1e,0x1d,0x1d,0x1c,0x1a,0x19,0x18,0x17,0x16,0x15,0x14,0x13,0x11,0x10,0x0e,0x0d,0x0d,0x0c,0x0b,0x09,0x08,0x08,0x06,0x05,0x04,0x04,0x03,0x02,0x02,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x02,0x02,0x03,0x04,0x05,0x05,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x10,0x12,0x13,0x13,0x14,0x15,0x16,0x17,0x19,0x1b,0x1c,0x1d,0x1e,0x1f,0x20,0x21,0x22,0x23,0x24,0x26,0x27,0x28,0x28,0x2a,0x2b,0x2b,0x2d,0x2d,0x2e,0x2f,0x30,0x32,0x32,0x34,0x34,0x34,0x35,0x34,0x36,0x35,0x37,0x37,0x37,0x37,0x36,0x36,0x36,0x37,0x37,0x37,0x37,0x35,0x36,0x34,0x34,0x34,0x34,0x34,0x32,0x31,0x30,0x2f,0x2e,0x2e,0x2e,0x2b,0x2a,0x29,0x28,0x28,0x27,0x26,0x24,0x23,0x22,0x21,0x20,0x1f,0x1e,0x1d,0x1c,0x1a,0x18,0x17,0x16,0x15,0x14,0x13,0x13,0x11,0x0f,0x0e,0x0d,0x0c,0x0b,0x09,0x08,0x08,0x07,0x05,0x05,0x04,0x03,0x02,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x02,0x03,0x04,0x04,0x05,0x06,0x07,0x08,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,0x11,0x13,0x14,0x15,0x16,0x17,0x18,0x18,0x1a,0x1c,0x1d,0x1e,0x1f,0x20,0x21,0x22,0x24,0x26,0x27,0x28,0x29,0x2a,0x2b,0x2c,0x2d,0x2e,0x30,0x31,0x32,0x32,0x33,0x34,0x34,0x36,0x36,0x37,0x37,0x38,0x38,0x38,0x39,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x39,0x39,0x38,0x38,0x38,0x37,0x37,0x36,0x36,0x34,0x34,0x33,0x32,0x32,0x31,0x30,0x2e,0x2d,0x2c,0x2b,0x2a,0x29,0x28,0x27,0x25,0x23,0x22,0x21,0x20,0x1f,0x1e,0x1d,0x1b,0x19,0x18,0x18,0x17,0x16,0x15,0x14,0x12,0x10,0x0f,0x0e,0x0d,0x0c,0x0b,0x0a,0x08,0x07,0x06,0x05,0x04,0x04,0x03,0x02,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x02,0x03,0x04,0x04,0x05,0x06,0x07,0x08,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,0x10,0x12,0x14,0x15,0x16,0x17,0x18,0x19,0x1a,0x1c,0x1e,0x1f,0x20,0x21,0x22,0x23,0x24,0x26,0x28,0x29,0x2a,0x2b,0x2c,0x2d,0x2e,0x30,0x32,0x32,0x33,0x34,0x35,0x35,0x36,0x37,0x38,0x39,0x39,0x3a,0x3a,0x3a,0x3b,0x3b,0x3c,0x3c,0x3c,0x3c,0x3c,0x3c,0x3c,0x3c,0x3b,0x3b,0x3b,0x3a,0x3a,0x3a,0x39,0x39,0x38,0x37,0x36,0x35,0x35,0x34,0x33,0x32,0x31,0x2f,0x2e,0x2d,0x2c,0x2b,0x2a,0x29,0x27,0x25,0x24,0x23,0x22,0x21,0x20,0x1f,0x1d,0x1b,0x1a,0x19,0x18,0x17,0x16,0x15,0x13,0x11,0x10,0x0f,0x0e,0x0d,0x0c,0x0b,0x09,0x07,0x07,0x06,0x05,0x04,0x03,0x02,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x03,0x03,0x04,0x05,0x06,0x06,0x07,0x09,0x0b,0x0c,0x0d,0x0e,0x0f,0x10,0x11,0x13,0x15,0x16,0x17,0x18,0x19,0x1a,0x1b,0x1d,0x1f,0x20,0x21,0x22,0x23,0x25,0x26,0x27,0x2a,0x2b,0x2d,0x2e,0x2f,0x30,0x31,0x33,0x35,0x34,0x35,0x36,0x37,0x38,0x39,0x3b,0x3a,0x3b,0x3b,0x3c,0x3d,0x3d,0x3d,0x3e,0x3e,0x3e,0x3f,0x3f,0x3f,0x3f,0x3f,0x3e,0x3e,0x3e,0x3d,0x3d,0x3d,0x3c,0x3b,0x3b,0x3a,0x3a,0x38,0x38,0x37,0x36,0x35,0x35,0x34,0x32,0x31,0x30,0x2f,0x2e,0x2a,0x29,0x29,0x27,0x26,0x25,0x23,0x22,0x21,0x20,0x1e,0x1c,0x1b,0x1a,0x19,0x18,0x17,0x16,0x14,0x12,0x11,0x10,0x0f,0x0e,0x0d,0x0c,0x0a,0x08,0x07,0x06,0x06,0x05,0x04,0x03,0x03,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x0a,0x0b,0x0b,0x0d,0x0e,0x0f,0x10,0x11,0x12,0x14,0x16,0x17,0x18,0x19,0x1a,0x1b,0x1e,0x1e,0x20,0x22,0x24,0x25,0x26,0x27,0x29,0x2a,0x2d,0x2e,0x30,0x31,0x32,0x33,0x34,0x36,0x38,0x37,0x38,0x39,0x3a,0x3c,0x3c,0x3d,0x3e,0x3f,0x3f,0x40,0x40,0x41,0x41,0x42,0x42,0x42,0x43,0x43,0x43,0x43,0x43,0x42,0x42,0x42,0x41,0x41,0x40,0x40,0x3f,0x3f,0x3e,0x3d,0x3c,0x3c,0x3a,0x39,0x37,0x38,0x37,0x35,0x34,0x33,0x32,0x31,0x2e,0x2c,0x2b,0x2a,0x28,0x27,0x26,0x25,0x24,0x22,0x20,0x1e,0x1e,0x1b,0x1a,0x1a,0x18,0x17,0x15,0x13,0x12,0x11,0x10,0x0f,0x0e,0x0d,0x0b,0x09,0x09,0x08,0x07,0x06,0x05,0x04,0x03,0x02,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x10,0x11,0x12,0x13,0x14,0x16,0x18,0x19,0x1a,0x1c,0x1d,0x1e,0x1f,0x21,0x23,0x24,0x26,0x27,0x28,0x29,0x2b,0x2d,0x2f,0x30,0x32,0x33,0x34,0x35,0x36,0x38,0x3a,0x3a,0x3b,0x3c,0x3d,0x3e,0x3f,0x3f,0x41,0x42,0x42,0x43,0x43,0x44,0x44,0x45,0x45,0x46,0x46,0x46,0x46,0x46,0x46,0x46,0x45,0x45,0x44,0x44,0x43,0x43,0x42,0x42,0x40,0x3f,0x3f,0x3e,0x3d,0x3c,0x3c,0x3a,0x39,0x37,0x36,0x35,0x34,0x33,0x30,0x2f,0x2e,0x2c,0x2a,0x29,0x28,0x27,0x26,0x24,0x22,0x20,0x20,0x1e,0x1d,0x1b,0x19,0x19,0x17,0x15,0x14,0x13,0x12,0x11,0x0f,0x0d,0x0b,0x0a,0x0a,0x09,0x08,0x07,0x05,0x05,0x03,0x02,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x02,0x03,0x03,0x05,0x06,0x07,0x08,0x08,0x09,0x0a,0x0c,0x0d,0x0e,0x12,0x13,0x14,0x15,0x16,0x18,0x19,0x19,0x1c,0x1e,0x1e,0x1f,0x20,0x22,0x25,0x26,0x27,0x29,0x2a,0x2b,0x2f,0x30,0x31,0x32,0x34,0x35,0x36,0x37,0x38,0x3a,0x3c,0x3d,0x3e,0x3f,0x40,0x41,0x42,0x43,0x45,0x45,0x46,0x46,0x47,0x47,0x48,0x48,0x49,0x49,0x49,0x49,0x49,0x49,0x49,0x49,0x48,0x48,0x48,0x47,0x47,0x46,0x46,0x45,0x44,0x43,0x42,0x41,0x40,0x3f,0x3e,0x3d,0x3b,0x39,0x38,0x37,0x36,0x35,0x32,0x31,0x31,0x2f,0x2c,0x2b,0x2a,0x29,0x28,0x26,0x24,0x23,0x21,0x1f,0x1e,0x1d,0x1a,0x19,0x18,0x17,0x16,0x15,0x14,0x13,0x11,0x0d,0x0c,0x0c,0x0a,0x09,0x08,0x08,0x07,0x05,0x04,0x03,0x03,0x02,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x02,0x02,0x03,0x04,0x05,0x06,0x08,0x09,0x09,0x0a,0x0b,0x0e,0x0e,0x10,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1a,0x1d,0x1f,0x1f,0x20,0x24,0x25,0x26,0x28,0x2a,0x2b,0x2c,0x2d,0x2f,0x33,0x33,0x34,0x36,0x37,0x38,0x39,0x3a,0x3c,0x3e,0x3f,0x40,0x41,0x42,0x43,0x45,0x46,0x48,0x48,0x49,0x4a,0x4a,0x4b,0x4b,0x4b,0x4c,0x4c,0x4c,0x4d,0x4d,0x4d,0x4c,0x4c,0x4b,0x4b,0x4b,0x4b,0x4a,0x4a,0x49,0x48,0x48,0x46,0x45,0x43,0x42,0x41,0x40,0x3f,0x3e,0x3b,0x3a,0x39,0x38,0x37,0x34,0x33,0x34,0x32,0x2f,0x2d,0x2c,0x2b,0x29,0x27,0x27,0x24,0x22,0x20,0x1f,0x1f,0x1d,0x1b,0x18,0x18,0x17,0x16,0x15,0x14,0x12,0x0f,0x0e,0x0d,0x0b,0x0a,0x09,0x09,0x08,0x06,0x05,0x04,0x03,0x02,0x02,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x09,0x0a,0x0b,0x0c,0x0d,0x0f,0x11,0x12,0x14,0x15,0x16,0x17,0x18,0x19,0x1b,0x1e,0x1f,0x21,0x22,0x23,0x26,0x27,0x28,0x2a,0x2c,0x2d,0x2e,0x30,0x31,0x34,0x36,0x37,0x39,0x3a,0x3b,0x3c,0x3e,0x40,0x42,0x43,0x44,0x45,0x46,0x47,0x49,0x4a,0x4b,0x4c,0x4c,0x4e,0x4e,0x4f,0x4f,0x4f,0x50,0x50,0x50,0x50,0x50,0x50,0x50,0x50,0x4f,0x4f,0x4f,0x4f,0x4e,0x4d,0x4c,0x4c,0x4b,0x4a,0x49,0x47,0x46,0x45,0x44,0x43,0x42,0x3f,0x3d,0x3c,0x3b,0x3a,0x37,0x36,0x36,0x33,0x32,0x30,0x2e,0x2d,0x2b,0x29,0x28,0x26,0x24,0x23,0x22,0x21,0x1f,0x1e,0x1b,0x19,0x18,0x17,0x16,0x15,0x12,0x11,0x10,0x0e,0x0d,0x0c,0x0b,0x0a,0x09,0x07,0x05,0x04,0x04,0x03,0x02,0x01,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x02,0x03,0x03,0x04,0x06,0x08,0x08,0x09,0x0a,0x0b,0x0c,0x0f,0x11,0x12,0x13,0x14,0x16,0x17,0x18,0x19,0x1c,0x1e,0x1f,0x21,0x22,0x23,0x25,0x26,0x28,0x2a,0x2c,0x2e,0x2f,0x31,0x32,0x34,0x36,0x38,0x3a,0x3c,0x3d,0x3e,0x3f,0x42,0x44,0x45,0x46,0x47,0x48,0x49,0x4a,0x4b,0x4d,0x4f,0x4f,0x50,0x51,0x51,0x52,0x52,0x52,0x53,0x54,0x54,0x54,0x54,0x54,0x54,0x54,0x53,0x52,0x52,0x52,0x51,0x51,0x50,0x4f,0x4e,0x4c,0x4b,0x4a,0x49,0x48,0x47,0x46,0x44,0x42,0x40,0x3f,0x3e,0x3d,0x3a,0x39,0x38,0x35,0x34,0x32,0x31,0x2f,0x2c,0x2b,0x2a,0x27,0x26,0x25,0x23,0x22,0x1f,0x1e,0x1e,0x1c,0x19,0x18,0x17,0x16,0x14,0x13,0x11,0x0f,0x0d,0x0c,0x0b,0x0a,0x09,0x08,0x07,0x05,0x04,0x03,0x03,0x02,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x02,0x02,0x03,0x04,0x05,0x06,0x07,0x09,0x0a,0x0b,0x0c,0x0d,0x10,0x12,0x13,0x14,0x15,0x17,0x18,0x19,0x1a,0x1d,0x1e,0x1f,0x22,0x23,0x25,0x26,0x29,0x2a,0x2b,0x2d,0x30,0x31,0x33,0x34,0x36,0x38,0x3a,0x3c,0x3e,0x3f,0x40,0x41,0x43,0x45,0x46,0x49,0x4a,0x4b,0x4c,0x4d,0x4e,0x4f,0x51,0x52,0x53,0x53,0x54,0x54,0x55,0x55,0x56,0x57,0x57,0x57,0x57,0x57,0x57,0x57,0x56,0x55,0x55,0x54,0x54,0x53,0x52,0x51,0x51,0x4f,0x4e,0x4d,0x4c,0x4b,0x4a,0x48,0x46,0x44,0x43,0x41,0x40,0x3f,0x3c,0x3b,0x3a,0x38,0x35,0x34,0x33,0x31,0x2f,0x2d,0x2b,0x29,0x27,0x26,0x25,0x23,0x22,0x1f,0x1e,0x1d,0x1a,0x19,0x18,0x17,0x15,0x14,0x12,0x10,0x0e,0x0d,0x0c,0x0b,0x0a,0x09,0x07,0x06,0x05,0x04,0x03,0x02,0x02,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x02,0x03,0x04,0x04,0x05,0x07,0x08,0x0a,0x0b,0x0c,0x0d,0x0e,0x11,0x13,0x14,0x15,0x16,0x18,0x19,0x1a,0x1c,0x1e,0x1f,0x20,0x23,0x25,0x26,0x27,0x29,0x2b,0x2d,0x30,0x31,0x33,0x35,0x37,0x39,0x3b,0x3d,0x3f,0x41,0x41,0x43,0x45,0x47,0x49,0x4a,0x4b,0x4c,0x4d,0x4e,0x50,0x51,0x53,0x55,0x56,0x57,0x57,0x58,0x59,0x59,0x5a,0x5b,0x5b,0x5b,0x5b,0x5b,0x5b,0x5b,0x5b,0x5a,0x5a,0x59,0x59,0x58,0x57,0x57,0x56,0x54,0x52,0x51,0x50,0x4e,0x4d,0x4c,0x4b,0x4a,0x48,0x45,0x45,0x43,0x41,0x3e,0x3d,0x3d,0x3b,0x38,0x36,0x35,0x34,0x32,0x2f,0x2d,0x2a,0x29,0x27,0x26,0x25,0x22,0x20,0x1f,0x1e,0x1b,0x1a,0x19,0x18,0x16,0x15,0x13,0x12,0x0f,0x0e,0x0d,0x0c,0x0b,0x0a,0x08,0x06,0x05,0x04,0x04,0x03,0x02,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x02,0x02,0x03,0x04,0x05,0x06,0x07,0x09,0x0b,0x0b,0x0c,0x0f,0x10,0x10,0x13,0x15,0x16,0x17,0x19,0x1a,0x1b,0x1e,0x1f,0x20,0x23,0x26,0x26,0x27,0x2a,0x2c,0x2e,0x2f,0x33,0x34,0x36,0x37,0x39,0x3c,0x3e,0x40,0x42,0x44,0x44,0x47,0x48,0x4a,0x4b,0x4c,0x4e,0x50,0x51,0x52,0x54,0x55,0x57,0x59,0x5a,0x5b,0x5b,0x5c,0x5d,0x5d,0x5e,0x5f,0x5f,0x5f,0x5f,0x5f,0x5f,0x5f,0x5f,0x5e,0x5e,0x5d,0x5d,0x5c,0x5b,0x5b,0x5a,0x58,0x56,0x55,0x54,0x52,0x51,0x50,0x4e,0x4c,0x4b,0x49,0x48,0x47,0x44,0x41,0x40,0x40,0x3d,0x3b,0x39,0x37,0x36,0x34,0x32,0x2f,0x2d,0x2a,0x29,0x27,0x26,0x24,0x23,0x20,0x1f,0x1c,0x1b,0x1a,0x19,0x17,0x16,0x15,0x13,0x10,0x10,0x0f,0x0c,0x0c,0x0b,0x09,0x07,0x06,0x05,0x04,0x03,0x02,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x02,0x04,0x05,0x06,0x05,0x06,0x08,0x0b,0x0c,0x0d,0x0e,0x10,0x11,0x12,0x13,0x15,0x18,0x19,0x1a,0x1c,0x1d,0x1f,0x20,0x24,0x24,0x26,0x28,0x2a,0x2b,0x2d,0x30,0x32,0x34,0x37,0x38,0x3a,0x3b,0x3e,0x40,0x42,0x44,0x46,0x47,0x49,0x4a,0x4c,0x4e,0x50,0x51,0x53,0x55,0x56,0x58,0x59,0x5b,0x5d,0x5e,0x5f,0x5f,0x60,0x61,0x61,0x63,0x63,0x63,0x62,0x62,0x62,0x62,0x62,0x63,0x62,0x62,0x61,0x61,0x60,0x5f,0x5f,0x5e,0x5c,0x5a,0x59,0x58,0x56,0x55,0x53,0x51,0x50,0x4e,0x4c,0x4a,0x49,0x47,0x44,0x43,0x42,0x3f,0x3d,0x3b,0x3a,0x38,0x36,0x34,0x32,0x2f,0x2d,0x2b,0x2a,0x28,0x26,0x24,0x23,0x20,0x1d,0x1d,0x1c,0x1a,0x19,0x18,0x15,0x13,0x12,0x11,0x10,0x0e,0x0d,0x0c,0x0a,0x07,0x06,0x05,0x06,0x05,0x02,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x02,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x0a,0x0b,0x0b,0x0e,0x10,0x10,0x11,0x14,0x14,0x16,0x19,0x1b,0x1c,0x1e,0x1f,0x20,0x22,0x25,0x26,0x27,0x2a,0x2c,0x2d,0x30,0x32,0x34,0x36,0x38,0x3a,0x3c,0x3d,0x40,0x42,0x44,0x46,0x48,0x4a,0x4b,0x4d,0x50,0x52,0x54,0x55,0x57,0x59,0x5a,0x5c,0x5d,0x5f,0x61,0x62,0x63,0x63,0x64,0x65,0x65,0x67,0x67,0x67,0x66,0x66,0x66,0x66,0x66,0x67,0x66,0x66,0x65,0x65,0x64,0x63,0x63,0x62,0x60,0x5e,0x5d,0x5c,0x5a,0x59,0x55,0x54,0x53,0x51,0x4f,0x4d,0x4b,0x4a,0x47,0x46,0x44,0x41,0x3f,0x3d,0x3c,0x3a,0x38,0x36,0x34,0x32,0x2f,0x2d,0x2c,0x2a,0x28,0x26,0x25,0x22,0x1f,0x1f,0x1e,0x1c,0x1b,0x18,0x15,0x15,0x14,0x11,0x10,0x0f,0x0c,0x0b,0x0a,0x09,0x08,0x07,0x06,0x05,0x03,0x02,0x02,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x03,0x05,0x06,0x07,0x07,0x08,0x0a,0x0c,0x0d,0x0f,0x11,0x11,0x13,0x14,0x17,0x17,0x18,0x1c,0x1d,0x1f,0x20,0x22,0x25,0x26,0x28,0x2b,0x2c,0x2d,0x2f,0x33,0x34,0x36,0x38,0x3a,0x3d,0x3e,0x3f,0x42,0x44,0x46,0x48,0x4a,0x4c,0x4e,0x50,0x53,0x55,0x57,0x58,0x5a,0x5c,0x5d,0x5f,0x61,0x63,0x64,0x65,0x66,0x66,0x67,0x68,0x69,0x69,0x6a,0x6b,0x6b,0x6b,0x6b,0x6b,0x6b,0x6b,0x6a,0x69,0x69,0x68,0x67,0x66,0x66,0x65,0x63,0x61,0x60,0x5f,0x5d,0x5c,0x5a,0x58,0x56,0x54,0x52,0x4f,0x4e,0x4c,0x4a,0x48,0x46,0x43,0x41,0x3f,0x3e,0x3c,0x39,0x38,0x36,0x34,0x31,0x2f,0x2d,0x2c,0x29,0x28,0x26,0x24,0x22,0x20,0x1f,0x1d,0x1c,0x19,0x17,0x16,0x14,0x12,0x11,0x10,0x0e,0x0e,0x0b,0x09,0x08,0x07,0x07,0x06,0x04,0x03,0x02,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x02,0x02,0x04,0x05,0x06,0x07,0x08,0x09,0x0b,0x0c,0x0e,0x10,0x11,0x13,0x14,0x15,0x18,0x19,0x1a,0x1d,0x1e,0x20,0x21,0x24,0x26,0x27,0x2a,0x2c,0x2e,0x30,0x32,0x35,0x37,0x39,0x3a,0x3d,0x3f,0x41,0x42,0x45,0x47,0x49,0x4b,0x4d,0x4f,0x52,0x54,0x57,0x59,0x5b,0x5c,0x5e,0x60,0x61,0x62,0x65,0x67,0x68,0x69,0x6a,0x6a,0x6b,0x6c,0x6d,0x6d,0x6e,0x6f,0x6f,0x6f,0x6f,0x6f,0x6f,0x6f,0x6e,0x6d,0x6d,0x6c,0x6b,0x6a,0x6a,0x69,0x67,0x65,0x64,0x62,0x61,0x60,0x5e,0x5c,0x5a,0x58,0x56,0x53,0x52,0x4f,0x4e,0x4a,0x49,0x46,0x44,0x42,0x41,0x3f,0x3d,0x3a,0x38,0x36,0x34,0x31,0x30,0x2e,0x2b,0x29,0x27,0x25,0x23,0x21,0x20,0x1e,0x1d,0x1a,0x19,0x18,0x15,0x14,0x13,0x11,0x10,0x0d,0x0b,0x0a,0x09,0x08,0x07,0x06,0x04,0x03,0x03,0x02,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x02,0x03,0x05,0x06,0x07,0x08,0x08,0x09,0x0c,0x0d,0x0e,0x11,0x12,0x13,0x14,0x16,0x18,0x1a,0x1c,0x1e,0x1f,0x21,0x22,0x25,0x27,0x29,0x2b,0x2d,0x2f,0x31,0x34,0x36,0x38,0x3a,0x3d,0x3f,0x41,0x43,0x45,0x47,0x4a,0x4c,0x4e,0x51,0x53,0x55,0x57,0x5a,0x5c,0x5e,0x5f,0x62,0x63,0x65,0x66,0x69,0x6b,0x6c,0x6d,0x6e,0x6f,0x70,0x70,0x71,0x71,0x73,0x73,0x73,0x73,0x73,0x73,0x73,0x73,0x73,0x71,0x71,0x70,0x70,0x6f,0x6e,0x6d,0x6b,0x69,0x67,0x66,0x65,0x63,0x61,0x5f,0x5d,0x5b,0x59,0x56,0x55,0x52,0x50,0x4e,0x4c,0x4a,0x47,0x45,0x43,0x41,0x3e,0x3c,0x3a,0x38,0x35,0x33,0x31,0x2f,0x2d,0x2a,0x29,0x26,0x24,0x22,0x21,0x1f,0x1d,0x1c,0x1a,0x17,0x16,0x14,0x13,0x12,0x11,0x0e,0x0d,0x0c,0x09,0x08,0x08,0x07,0x06,0x05,0x03,0x02,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x02,0x03,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0d,0x10,0x11,0x13,0x14,0x15,0x17,0x19,0x1b,0x1d,0x1f,0x20,0x22,0x24,0x26,0x28,0x2a,0x2c,0x2f,0x31,0x33,0x35,0x38,0x3a,0x3c,0x3e,0x40,0x43,0x45,0x47,0x49,0x4c,0x4e,0x50,0x53,0x55,0x57,0x59,0x5c,0x5e,0x60,0x62,0x64,0x66,0x67,0x69,0x6a,0x6d,0x6f,0x70,0x71,0x72,0x73,0x73,0x74,0x76,0x76,0x76,0x77,0x77,0x77,0x77,0x77,0x76,0x75,0x75,0x74,0x73,0x73,0x72,0x71,0x70,0x6f,0x6d,0x6a,0x69,0x67,0x66,0x63,0x62,0x60,0x5e,0x5b,0x59,0x57,0x54,0x52,0x50,0x4e,0x4c,0x49,0x47,0x45,0x42,0x3f,0x3e,0x3c,0x3a,0x37,0x34,0x33,0x30,0x2e,0x2c,0x2a,0x28,0x25,0x23,0x22,0x20,0x1d,0x1c,0x1b,0x18,0x17,0x15,0x14,0x13,0x11,0x0f,0x0d,0x0b,0x0a,0x09,0x08,0x07,0x06,0x05,0x03,0x02,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x02,0x03,0x05,0x06,0x07,0x08,0x08,0x09,0x0b,0x0c,0x0e,0x11,0x12,0x13,0x15,0x16,0x18,0x1a,0x1c,0x1e,0x20,0x21,0x23,0x25,0x27,0x29,0x2b,0x2e,0x30,0x32,0x34,0x37,0x3a,0x3c,0x3e,0x3f,0x42,0x45,0x47,0x4a,0x4d,0x4f,0x51,0x52,0x55,0x58,0x5a,0x5c,0x5f,0x61,0x63,0x65,0x67,0x6a,0x6b,0x6d,0x6e,0x71,0x73,0x74,0x75,0x76,0x77,0x78,0x79,0x7a,0x7b,0x7a,0x7c,0x7c,0x7c,0x7c,0x7c,0x7a,0x7b,0x79,0x79,0x78,0x77,0x76,0x75,0x74,0x73,0x71,0x6e,0x6d,0x6b,0x6a,0x66,0x65,0x63,0x60,0x5e,0x5b,0x5a,0x58,0x54,0x52,0x50,0x4f,0x4c,0x49,0x47,0x45,0x42,0x3f,0x3d,0x3b,0x39,0x36,0x34,0x32,0x2f,0x2d,0x2b,0x29,0x26,0x24,0x23,0x21,0x1e,0x1d,0x1c,0x1a,0x17,0x16,0x15,0x13,0x12,0x10,0x0f,0x0c,0x0b,0x09,0x08,0x08,0x07,0x06,0x04,0x02,0x02,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x02,0x03,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0d,0x10,0x11,0x13,0x15,0x16,0x17,0x19,0x1c,0x1d,0x1e,0x21,0x22,0x24,0x27,0x29,0x2b,0x2e,0x30,0x31,0x34,0x36,0x39,0x3c,0x3e,0x40,0x42,0x45,0x47,0x49,0x4d,0x50,0x52,0x54,0x55,0x59,0x5c,0x5e,0x60,0x63,0x65,0x67,0x69,0x6b,0x6d,0x6f,0x70,0x73,0x75,0x77,0x78,0x79,0x7a,0x7b,0x7c,0x7d,0x7e,0x7f,0x7f,0x80,0x80,0x80,0x80,0x80,0x7f,0x7f,0x7d,0x7d,0x7c,0x7b,0x7a,0x79,0x77,0x77,0x75,0x72,0x70,0x6f,0x6d,0x6a,0x68,0x67,0x64,0x61,0x5f,0x5e,0x5c,0x58,0x55,0x53,0x52,0x4f,0x4c,0x49,0x46,0x44,0x42,0x40,0x3e,0x3b,0x38,0x36,0x33,0x31,0x30,0x2e,0x2b,0x28,0x27,0x24,0x22,0x21,0x1e,0x1c,0x1a,0x19,0x17,0x16,0x15,0x12,0x11,0x10,0x0c,0x0b,0x0a,0x09,0x08,0x07,0x06,0x04,0x02,0x02,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x02,0x04,0x06,0x06,0x07,0x08,0x09,0x0a,0x0c,0x0f,0x10,0x11,0x13,0x16,0x17,0x18,0x1b,0x1b,0x1e,0x1f,0x23,0x24,0x26,0x29,0x2a,0x2d,0x30,0x32,0x34,0x36,0x38,0x3b,0x3e,0x40,0x42,0x44,0x47,0x4a,0x4c,0x4f,0x52,0x54,0x56,0x5a,0x5d,0x5f,0x61,0x63,0x66,0x68,0x6a,0x6c,0x6f,0x71,0x73,0x74,0x76,0x79,0x7a,0x7b,0x7e,0x7f,0x80,0x81,0x81,0x83,0x84,0x85,0x85,0x85,0x85,0x85,0x85,0x85,0x83,0x82,0x80,0x81,0x80,0x7f,0x7d,0x7a,0x7a,0x78,0x76,0x74,0x73,0x71,0x6f,0x6c,0x6a,0x68,0x65,0x62,0x61,0x5f,0x5b,0x58,0x56,0x53,0x50,0x4e,0x4c,0x49,0x46,0x44,0x42,0x40,0x3d,0x3a,0x38,0x35,0x33,0x32,0x30,0x2d,0x29,0x29,0x26,0x24,0x23,0x1f,0x1e,0x1b,0x1a,0x18,0x17,0x16,0x13,0x11,0x10,0x0f,0x0d,0x0a,0x09,0x08,0x07,0x06,0x05,0x04,0x02,0x01,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x02,0x02,0x03,0x04,0x05,0x08,0x09,0x0a,0x0b,0x0b,0x0e,0x10,0x11,0x12,0x15,0x17,0x17,0x1a,0x1c,0x1c,0x20,0x21,0x23,0x26,0x28,0x2a,0x2b,0x2f,0x31,0x32,0x36,0x38,0x3a,0x3d,0x40,0x42,0x44,0x46,0x49,0x4c,0x4e,0x51,0x54,0x56,0x59,0x5c,0x5f,0x61,0x63,0x67,0x69,0x6b,0x6d,0x70,0x73,0x75,0x76,0x78,0x7a,0x7d,0x7e,0x80,0x82,0x83,0x84,0x85,0x87,0x88,0x88,0x89,0x89,0x89,0x89,0x89,0x89,0x89,0x88,0x87,0x86,0x85,0x84,0x83,0x82,0x7f,0x7d,0x7c,0x7a,0x78,0x76,0x75,0x72,0x70,0x6d,0x6b,0x68,0x66,0x63,0x60,0x5d,0x5b,0x59,0x55,0x52,0x50,0x4e,0x4b,0x48,0x46,0x44,0x42,0x3f,0x3c,0x3a,0x37,0x35,0x33,0x31,0x2f,0x2b,0x2a,0x28,0x26,0x23,0x21,0x20,0x1d,0x1a,0x1a,0x17,0x17,0x14,0x12,0x11,0x10,0x0d,0x0b,0x0b,0x0a,0x09,0x08,0x06,0x04,0x03,0x02,0x02,0x01,0x01,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x02,0x02,0x03,0x05,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0f,0x10,0x12,0x14,0x16,0x17,0x18,0x1a,0x1d,0x1f,0x21,0x22,0x24,0x27,0x29,0x2b,0x2c,0x30,0x32,0x34,0x37,0x3a,0x3c,0x3e,0x41,0x44,0x46,0x48,0x4b,0x4e,0x50,0x53,0x56,0x58,0x5b,0x5d,0x60,0x64,0x66,0x6a,0x6d,0x6f,0x71,0x73,0x75,0x78,0x79,0x7c,0x7f,0x80,0x82,0x84,0x86,0x87,0x88,0x89,0x8b,0x8c,0x8c,0x8d,0x8d,0x8d,0x8d,0x8d,0x8d,0x8e,0x8c,0x8c,0x8a,0x89,0x88,0x87,0x85,0x84,0x82,0x80,0x7d,0x7b,0x79,0x78,0x74,0x72,0x71,0x6f,0x6c,0x69,0x66,0x63,0x5f,0x5d,0x5c,0x59,0x55,0x52,0x50,0x4d,0x4a,0x48,0x46,0x44,0x41,0x3e,0x3c,0x39,0x36,0x34,0x32,0x2f,0x2b,0x2b,0x29,0x27,0x24,0x22,0x20,0x1e,0x1c,0x1a,0x18,0x17,0x14,0x13,0x12,0x10,0x0e,0x0c,0x0b,0x0a,0x09,0x08,0x06,0x04,0x03,0x02,0x02,0x01,0x01,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x02,0x03,0x04,0x06,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0f,0x11,0x13,0x15,0x17,0x18,0x1a,0x1b,0x1d,0x1f,0x21,0x24,0x26,0x28,0x2a,0x2d,0x30,0x32,0x34,0x36,0x39,0x3c,0x3e,0x3f,0x42,0x46,0x48,0x4a,0x4e,0x51,0x53,0x55,0x58,0x5b,0x5e,0x60,0x64,0x68,0x6a,0x6d,0x71,0x72,0x74,0x77,0x79,0x7b,0x7d,0x80,0x83,0x84,0x86,0x88,0x8a,0x8b,0x8e,0x8f,0x8e,0x90,0x92,0x93,0x93,0x93,0x93,0x93,0x93,0x92,0x92,0x90,0x8e,0x8f,0x8e,0x8b,0x89,0x88,0x86,0x84,0x81,0x7f,0x7d,0x7b,0x79,0x76,0x74,0x72,0x70,0x6c,0x6a,0x67,0x63,0x60,0x5f,0x5c,0x58,0x55,0x53,0x50,0x4d,0x4a,0x48,0x46,0x43,0x40,0x3e,0x3b,0x38,0x36,0x34,0x30,0x2e,0x2c,0x2a,0x28,0x25,0x23,0x21,0x1f,0x1c,0x1b,0x1a,0x18,0x15,0x14,0x13,0x10,0x0f,0x0d,0x0c,0x0b,0x0a,0x09,0x07,0x05,0x04,0x03,0x02,0x01,0x01,0x01,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x02,0x02,0x03,0x04,0x06,0x08,0x09,0x0a,0x0b,0x0c,0x0e,0x0f,0x12,0x13,0x14,0x17,0x19,0x1a,0x1c,0x1e,0x20,0x22,0x24,0x27,0x29,0x2b,0x2e,0x31,0x33,0x35,0x37,0x3a,0x3d,0x3f,0x41,0x44,0x47,0x4a,0x4c,0x50,0x53,0x55,0x58,0x5b,0x5e,0x61,0x64,0x68,0x6a,0x6d,0x70,0x73,0x75,0x77,0x79,0x7c,0x7f,0x81,0x84,0x87,0x89,0x8a,0x8d,0x8f,0x90,0x92,0x93,0x94,0x96,0x97,0x97,0x97,0x97,0x97,0x97,0x97,0x97,0x97,0x95,0x94,0x93,0x92,0x90,0x8f,0x8c,0x8a,0x88,0x86,0x83,0x81,0x7e,0x7b,0x79,0x77,0x75,0x72,0x6f,0x6d,0x6a,0x67,0x64,0x61,0x5e,0x5a,0x58,0x55,0x53,0x4f,0x4c,0x4a,0x47,0x43,0x41,0x3f,0x3c,0x39,0x37,0x35,0x33,0x30,0x2d,0x2b,0x28,0x26,0x24,0x22,0x20,0x1d,0x1c,0x1a,0x19,0x16,0x14,0x13,0x12,0x0f,0x0e,0x0c,0x0b,0x0a,0x09,0x07,0x05,0x04,0x03,0x02,0x02,0x01,0x01,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x02,0x03,0x03,0x04,0x06,0x08,0x09,0x0a,0x0c,0x0d,0x0e,0x10,0x12,0x14,0x16,0x18,0x19,0x1b,0x1c,0x1f,0x21,0x23,0x25,0x28,0x2a,0x2c,0x2f,0x32,0x34,0x36,0x38,0x3b,0x3e,0x40,0x43,0x47,0x49,0x4c,0x4f,0x52,0x55,0x57,0x5a,0x5d,0x60,0x63,0x66,0x6a,0x6d,0x6f,0x71,0x74,0x77,0x7a,0x7c,0x7f,0x82,0x84,0x87,0x8a,0x8c,0x8e,0x90,0x93,0x94,0x96,0x97,0x98,0x9a,0x9a,0x9b,0x9b,0x9b,0x9b,0x9b,0x9b,0x9b,0x9a,0x99,0x98,0x97,0x96,0x94,0x92,0x90,0x8e,0x8c,0x89,0x86,0x84,0x81,0x7e,0x7c,0x7a,0x77,0x73,0x71,0x6f,0x6d,0x69,0x66,0x63,0x60,0x5c,0x5a,0x57,0x54,0x50,0x4e,0x4b,0x49,0x46,0x42,0x40,0x3d,0x3a,0x38,0x36,0x34,0x31,0x2e,0x2c,0x29,0x27,0x25,0x23,0x20,0x1e,0x1c,0x1b,0x19,0x16,0x15,0x14,0x11,0x10,0x0e,0x0d,0x0c,0x0a,0x09,0x07,0x05,0x04,0x03,0x03,0x02,0x01,0x01,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x02,0x03,0x04,0x05,0x07,0x09,0x0a,0x0b,0x0c,0x0d,0x0f,0x10,0x13,0x15,0x16,0x19,0x1a,0x1c,0x1d,0x20,0x22,0x24,0x25,0x28,0x2b,0x2d,0x30,0x33,0x35,0x37,0x39,0x3c,0x3f,0x42,0x45,0x48,0x4a,0x4d,0x50,0x54,0x57,0x5a,0x5c,0x60,0x63,0x67,0x6a,0x6d,0x70,0x71,0x75,0x78,0x7a,0x7d,0x80,0x83,0x86,0x89,0x8c,0x8f,0x91,0x93,0x95,0x98,0x99,0x9b,0x9c,0x9d,0x9e,0xa0,0xa1,0xa1,0xa1,0xa1,0xa1,0xa1,0xa1,0x9f,0x9e,0x9d,0x9c,0x9b,0x99,0x97,0x95,0x93,0x91,0x8e,0x8b,0x89,0x86,0x83,0x80,0x7c,0x79,0x76,0x74,0x71,0x6f,0x6b,0x69,0x66,0x63,0x5f,0x5c,0x5a,0x57,0x53,0x50,0x4c,0x4a,0x47,0x44,0x42,0x3f,0x3b,0x39,0x37,0x35,0x32,0x2f,0x2d,0x2a,0x27,0x25,0x23,0x21,0x1f,0x1d,0x1c,0x1a,0x18,0x16,0x14,0x12,0x10,0x0f,0x0d,0x0c,0x0b,0x0a,0x08,0x06,0x05,0x04,0x03,0x02,0x01,0x01,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x01,0x01,0x02,0x02,0x03,0x04,0x05,0x07,0x09,0x0a,0x0b,0x0c,0x0e,0x0f,0x11,0x13,0x15,0x17,0x19,0x1b,0x1c,0x1e,0x20,0x23,0x25,0x27,0x2a,0x2c,0x2f,0x31,0x34,0x36,0x38,0x3a,0x3f,0x41,0x43,0x47,0x4a,0x4c,0x50,0x53,0x57,0x5a,0x5c,0x5f,0x63,0x66,0x69,0x6d,0x70,0x73,0x74,0x78,0x7b,0x7e,0x81,0x84,0x88,0x8a,0x8d,0x8f,0x93,0x95,0x97,0x99,0x9c,0x9d,0x9f,0xa0,0xa1,0xa2,0xa4,0xa5,0xa5,0xa5,0xa5,0xa5,0xa5,0xa5,0xa3,0xa2,0xa1,0xa0,0x9f,0x9d,0x9b,0x99,0x97,0x95,0x92,0x8f,0x8d,0x8a,0x87,0x84,0x80,0x7d,0x79,0x78,0x74,0x73,0x6f,0x6c,0x69,0x65,0x61,0x5f,0x5c,0x59,0x55,0x52,0x4f,0x4c,0x49,0x45,0x43,0x41,0x3d,0x3a,0x38,0x36,0x33,0x30,0x2f,0x2b,0x29,0x27,0x24,0x22,0x20,0x1e,0x1c,0x1b,0x18,0x17,0x15,0x12,0x11,0x0f,0x0e,0x0c,0x0a,0x09,0x08,0x06,0x05,0x04,0x03,0x02,0x02,0x01,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x01,0x01,0x02,0x02,0x03,0x04,0x05,0x07,0x09,0x0a,0x0c,0x0e,0x0e,0x11,0x11,0x15,0x17,0x17,0x1b,0x1c,0x1e,0x1f,0x22,0x24,0x26,0x29,0x2b,0x2d,0x30,0x33,0x36,0x38,0x3a,0x3c,0x40,0x43,0x44,0x49,0x4b,0x4e,0x52,0x55,0x59,0x5c,0x5e,0x61,0x65,0x68,0x6b,0x6f,0x72,0x75,0x77,0x7a,0x7e,0x81,0x84,0x88,0x8c,0x8f,0x91,0x93,0x96,0x9a,0x9b,0x9d,0xa0,0xa2,0xa4,0xa5,0xa6,0xa7,0xa9,0xa9,0xaa,0xab,0xab,0xab,0xaa,0xaa,0xa9,0xa7,0xa6,0xa5,0xa4,0xa2,0x9f,0x9c,0x9b,0x99,0x95,0x93,0x91,0x8f,0x8b,0x87,0x83,0x80,0x7c,0x7a,0x77,0x75,0x71,0x6e,0x6b,0x67,0x63,0x61,0x5e,0x5b,0x57,0x54,0x51,0x4e,0x4b,0x48,0x44,0x43,0x3f,0x3c,0x3a,0x38,0x35,0x32,0x30,0x2c,0x2a,0x29,0x26,0x23,0x21,0x1e,0x1e,0x1c,0x1a,0x17,0x15,0x13,0x11,0x11,0x0e,0x0e,0x0c,0x0b,0x08,0x06,0x05,0x04,0x03,0x02,0x02,0x01,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x01,0x02,0x02,0x03,0x04,0x05,0x06,0x08,0x0a,0x0b,0x0d,0x0e,0x10,0x11,0x13,0x15,0x17,0x19,0x1b,0x1d,0x1e,0x1f,0x23,0x25,0x27,0x29,0x2b,0x2e,0x30,0x35,0x38,0x3a,0x3c,0x3e,0x42,0x45,0x46,0x4a,0x4d,0x50,0x54,0x57,0x5b,0x5e,0x60,0x63,0x67,0x6a,0x6e,0x71,0x75,0x77,0x7a,0x7e,0x81,0x84,0x88,0x8c,0x8f,0x92,0x95,0x97,0x9a,0x9e,0xa0,0xa1,0xa4,0xa6,0xa8,0xa9,0xab,0xad,0xae,0xae,0xaf,0xaf,0xaf,0xaf,0xaf,0xae,0xae,0xac,0xab,0xa9,0xa8,0xa6,0xa3,0xa0,0x9f,0x9e,0x99,0x97,0x95,0x92,0x8e,0x8b,0x87,0x84,0x80,0x7d,0x7a,0x77,0x73,0x70,0x6d,0x69,0x65,0x62,0x60,0x5d,0x59,0x56,0x53,0x4f,0x4b,0x4a,0x46,0x45,0x41,0x3e,0x3c,0x3a,0x37,0x34,0x30,0x2e,0x2a,0x28,0x27,0x24,0x22,0x1f,0x1e,0x1d,0x1a,0x19,0x17,0x15,0x12,0x11,0x10,0x0e,0x0b,0x0a,0x09,0x07,0x06,0x05,0x04,0x03,0x02,0x02,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x01,0x02,0x03,0x04,0x04,0x05,0x06,0x09,0x0b,0x0c,0x0d,0x0f,0x10,0x12,0x13,0x16,0x18,0x19,0x1c,0x1d,0x1f,0x20,0x23,0x26,0x28,0x2a,0x2d,0x30,0x31,0x34,0x38,0x3b,0x3d,0x3f,0x43,0x46,0x49,0x4b,0x4f,0x52,0x55,0x58,0x5c,0x5f,0x62,0x65,0x68,0x6c,0x71,0x73,0x78,0x79,0x7c,0x81,0x84,0x88,0x8c,0x8f,0x93,0x95,0x98,0x9b,0x9f,0xa1,0xa3,0xa5,0xa8,0xab,0xac,0xad,0xb1,0xb2,0xb2,0xb4,0xb3,0xb4,0xb5,0xb4,0xb3,0xb4,0xb2,0xb1,0xb0,0xad,0xac,0xab,0xa8,0xa5,0xa3,0xa1,0x9e,0x9a,0x98,0x95,0x91,0x8e,0x8b,0x87,0x83,0x7f,0x7c,0x79,0x75,0x72,0x6f,0x6b,0x67,0x65,0x62,0x5f,0x5b,0x58,0x54,0x50,0x4c,0x4b,0x49,0x46,0x42,0x3f,0x3d,0x3b,0x37,0x34,0x31,0x2f,0x2c,0x29,0x28,0x24,0x22,0x20,0x1f,0x1d,0x1b,0x19,0x17,0x15,0x13,0x12,0x10,0x0f,0x0c,0x0b,0x0a,0x08,0x06,0x05,0x04,0x04,0x02,0x01,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x09,0x0b,0x0c,0x0e,0x0f,0x10,0x12,0x14,0x16,0x18,0x1a,0x1c,0x1e,0x1f,0x22,0x25,0x27,0x29,0x2b,0x2e,0x31,0x33,0x35,0x39,0x3c,0x3e,0x40,0x44,0x47,0x4a,0x4c,0x50,0x54,0x57,0x5b,0x5f,0x62,0x64,0x68,0x6b,0x6f,0x73,0x75,0x7a,0x7c,0x7f,0x83,0x88,0x8c,0x8f,0x92,0x96,0x99,0x9c,0x9f,0xa3,0xa5,0xa7,0xa9,0xac,0xaf,0xb2,0xb3,0xb5,0xb6,0xb7,0xb9,0xb8,0xb8,0xb9,0xb8,0xb8,0xb9,0xb6,0xb5,0xb4,0xb3,0xb2,0xaf,0xac,0xa9,0xa7,0xa5,0xa2,0x9e,0x9c,0x99,0x95,0x92,0x8e,0x8b,0x87,0x82,0x7f,0x7c,0x78,0x75,0x71,0x6f,0x6b,0x67,0x64,0x61,0x5d,0x5a,0x56,0x53,0x4f,0x4c,0x4a,0x47,0x43,0x40,0x3e,0x3c,0x38,0x35,0x33,0x30,0x2d,0x2b,0x29,0x27,0x24,0x21,0x1f,0x1e,0x1b,0x1a,0x18,0x16,0x13,0x12,0x10,0x0f,0x0c,0x0b,0x0a,0x08,0x07,0x06,0x05,0x04,0x02,0x01,0x01,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x02,0x02,0x03,0x04,0x05,0x06,0x07,0x09,0x0a,0x0b,0x0e,0x10,0x11,0x12,0x15,0x17,0x19,0x1a,0x1d,0x1e,0x20,0x22,0x24,0x27,0x29,0x2b,0x2f,0x32,0x34,0x36,0x39,0x3c,0x3f,0x41,0x45,0x48,0x4b,0x4e,0x52,0x55,0x58,0x5c,0x60,0x63,0x66,0x6a,0x6d,0x71,0x75,0x78,0x7c,0x7f,0x82,0x86,0x8a,0x8f,0x92,0x95,0x99,0x9c,0x9f,0xa2,0xa6,0xa9,0xac,0xae,0xb1,0xb4,0xb6,0xb7,0xb9,0xbb,0xbd,0xbe,0xbe,0xbe,0xbf,0xbe,0xbe,0xbe,0xbc,0xba,0xb9,0xb7,0xb6,0xb3,0xb0,0xae,0xab,0xa8,0xa4,0xa2,0x9f,0x9c,0x98,0x95,0x91,0x8e,0x8a,0x85,0x82,0x7f,0x7b,0x78,0x74,0x70,0x6c,0x69,0x66,0x62,0x5f,0x5c,0x58,0x54,0x50,0x4d,0x4b,0x48,0x44,0x41,0x3f,0x3c,0x38,0x36,0x34,0x32,0x2e,0x2b,0x29,0x27,0x24,0x22,0x20,0x1e,0x1c,0x1a,0x18,0x16,0x14,0x12,0x11,0x10,0x0d,0x0b,0x09,0x08,0x07,0x06,0x05,0x04,0x03,0x02,0x02,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x02,0x02,0x03,0x04,0x05,0x06,0x07,0x09,0x0a,0x0b,0x0e,0x10,0x11,0x13,0x16,0x17,0x18,0x1a,0x1d,0x1f,0x20,0x23,0x26,0x28,0x2a,0x2c,0x2f,0x32,0x35,0x37,0x3a,0x3d,0x40,0x42,0x46,0x49,0x4c,0x4f,0x53,0x57,0x5a,0x5d,0x61,0x65,0x67,0x6b,0x6f,0x73,0x77,0x7a,0x7d,0x81,0x84,0x89,0x8d,0x91,0x95,0x98,0x9c,0x9f,0xa2,0xa5,0xa9,0xac,0xaf,0xb1,0xb4,0xb7,0xb9,0xbb,0xbe,0xc0,0xc1,0xc1,0xc2,0xc2,0xc3,0xc2,0xc2,0xc1,0xc0,0xbe,0xbc,0xbb,0xb9,0xb6,0xb3,0xb1,0xae,0xab,0xa7,0xa5,0xa2,0x9e,0x9b,0x98,0x94,0x90,0x8c,0x88,0x84,0x80,0x7c,0x79,0x76,0x72,0x6e,0x6a,0x67,0x64,0x60,0x5d,0x59,0x56,0x52,0x4e,0x4c,0x49,0x45,0x42,0x40,0x3d,0x39,0x37,0x35,0x31,0x2e,0x2c,0x2a,0x28,0x25,0x22,0x20,0x1e,0x1c,0x1a,0x18,0x16,0x14,0x13,0x11,0x10,0x0d,0x0b,0x09,0x08,0x07,0x06,0x05,0x04,0x03,0x02,0x02,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x09,0x0b,0x0c,0x0d,0x0f,0x10,0x11,0x13,0x15,0x17,0x19,0x1b,0x1d,0x1f,0x21,0x23,0x26,0x28,0x2a,0x2d,0x31,0x33,0x35,0x38,0x3c,0x3e,0x41,0x43,0x47,0x4a,0x4d,0x50,0x54,0x58,0x5c,0x5f,0x62,0x66,0x69,0x6d,0x70,0x74,0x78,0x7c,0x80,0x84,0x88,0x8c,0x90,0x94,0x98,0x9b,0x9f,0xa2,0xa5,0xa9,0xad,0xb0,0xb3,0xb5,0xb9,0xbc,0xbe,0xc0,0xc3,0xc5,0xc7,0xc7,0xc8,0xc8,0xc7,0xc8,0xc8,0xc7,0xc7,0xc5,0xc2,0xc0,0xbe,0xbc,0xb9,0xb6,0xb2,0xaf,0xab,0xa8,0xa5,0xa1,0x9e,0x9b,0x97,0x93,0x8f,0x8b,0x88,0x83,0x7f,0x7b,0x77,0x73,0x6f,0x6c,0x69,0x65,0x61,0x5e,0x5b,0x57,0x53,0x4f,0x4d,0x4a,0x46,0x43,0x40,0x3d,0x3a,0x37,0x35,0x33,0x30,0x2d,0x2a,0x27,0x25,0x23,0x21,0x1f,0x1d,0x1a,0x19,0x17,0x14,0x13,0x11,0x10,0x0d,0x0c,0x0b,0x09,0x07,0x06,0x05,0x04,0x03,0x02,0x01,0x00,0x00,0x00, +0x00,0x00,0x00,0x01,0x01,0x02,0x04,0x05,0x06,0x07,0x08,0x0a,0x0b,0x0c,0x0f,0x11,0x12,0x13,0x16,0x18,0x1a,0x1b,0x1e,0x20,0x21,0x24,0x27,0x29,0x2b,0x2d,0x31,0x34,0x36,0x38,0x3c,0x3f,0x42,0x46,0x4a,0x4b,0x4f,0x51,0x55,0x59,0x5d,0x60,0x65,0x67,0x6a,0x6e,0x73,0x76,0x7a,0x7e,0x82,0x87,0x8a,0x8f,0x93,0x98,0x9c,0x9f,0xa3,0xa6,0xa9,0xad,0xb1,0xb4,0xb7,0xba,0xbe,0xc0,0xc2,0xc4,0xc7,0xc9,0xcb,0xcb,0xcc,0xcc,0xcd,0xcc,0xcc,0xcb,0xcb,0xc9,0xc6,0xc4,0xc2,0xc0,0xbc,0xba,0xb6,0xb3,0xaf,0xac,0xa9,0xa5,0xa2,0x9f,0x9b,0x96,0x92,0x8e,0x8a,0x85,0x81,0x7e,0x7a,0x76,0x72,0x6d,0x6a,0x68,0x64,0x60,0x5c,0x58,0x54,0x50,0x4f,0x4b,0x47,0x44,0x42,0x40,0x3b,0x38,0x36,0x34,0x31,0x2d,0x2b,0x29,0x26,0x23,0x21,0x1f,0x1d,0x1b,0x19,0x17,0x15,0x13,0x12,0x11,0x0e,0x0c,0x0a,0x09,0x08,0x07,0x06,0x05,0x04,0x02,0x01,0x00,0x00,0x00, +0x00,0x00,0x00,0x02,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0b,0x0e,0x10,0x11,0x12,0x14,0x16,0x18,0x1a,0x1d,0x1e,0x20,0x23,0x24,0x27,0x29,0x2c,0x2f,0x32,0x34,0x37,0x3a,0x3e,0x41,0x43,0x46,0x4a,0x4d,0x50,0x53,0x57,0x5b,0x5f,0x62,0x67,0x6a,0x6d,0x71,0x75,0x78,0x7c,0x80,0x84,0x89,0x8c,0x91,0x95,0x9a,0x9e,0xa1,0xa5,0xa9,0xac,0xb0,0xb4,0xb8,0xbb,0xbf,0xc2,0xc5,0xc7,0xc9,0xcc,0xce,0xd0,0xd1,0xd2,0xd2,0xd3,0xd2,0xd2,0xd1,0xd0,0xce,0xcb,0xc8,0xc7,0xc4,0xbf,0xbe,0xbb,0xb7,0xb3,0xaf,0xac,0xa8,0xa4,0xa1,0x9d,0x98,0x94,0x90,0x8c,0x87,0x83,0x80,0x7c,0x78,0x74,0x70,0x6d,0x6a,0x66,0x62,0x5e,0x5a,0x56,0x52,0x50,0x4d,0x49,0x45,0x43,0x40,0x3c,0x3a,0x37,0x34,0x32,0x2e,0x2b,0x29,0x26,0x25,0x23,0x21,0x1d,0x1c,0x1a,0x18,0x15,0x14,0x12,0x11,0x0f,0x0e,0x0c,0x09,0x08,0x07,0x06,0x05,0x03,0x02,0x01,0x01,0x00,0x00, +0x00,0x00,0x00,0x02,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x0a,0x0c,0x0d,0x10,0x11,0x13,0x14,0x17,0x19,0x1a,0x1d,0x1f,0x21,0x23,0x25,0x28,0x2b,0x2d,0x30,0x34,0x36,0x38,0x3a,0x3e,0x42,0x45,0x47,0x4b,0x4f,0x50,0x55,0x59,0x5d,0x61,0x64,0x68,0x6c,0x6f,0x73,0x76,0x79,0x7d,0x82,0x86,0x8b,0x8e,0x93,0x97,0x9c,0xa0,0xa3,0xa7,0xac,0xaf,0xb3,0xb7,0xbb,0xbf,0xc3,0xc6,0xc9,0xcb,0xce,0xd1,0xd1,0xd5,0xd7,0xd8,0xd8,0xd7,0xd8,0xd8,0xd7,0xd5,0xd2,0xd0,0xcd,0xcb,0xc8,0xc4,0xc2,0xbf,0xba,0xb6,0xb2,0xaf,0xab,0xa7,0xa3,0x9f,0x9a,0x96,0x92,0x8e,0x89,0x85,0x82,0x7e,0x7a,0x76,0x72,0x6f,0x6b,0x67,0x64,0x60,0x5c,0x58,0x54,0x50,0x4e,0x4a,0x47,0x44,0x41,0x3d,0x3a,0x38,0x35,0x31,0x30,0x2d,0x2b,0x28,0x25,0x23,0x21,0x1e,0x1c,0x1a,0x18,0x16,0x14,0x13,0x11,0x10,0x0d,0x0b,0x0a,0x08,0x07,0x06,0x05,0x03,0x02,0x01,0x01,0x00,0x00, +0x00,0x00,0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x0a,0x0b,0x0c,0x0e,0x11,0x12,0x13,0x15,0x17,0x19,0x1b,0x1d,0x1f,0x22,0x23,0x26,0x29,0x2b,0x2e,0x31,0x34,0x36,0x39,0x3b,0x3f,0x42,0x45,0x48,0x4c,0x4f,0x51,0x56,0x5a,0x5e,0x62,0x65,0x69,0x6d,0x70,0x74,0x77,0x7b,0x80,0x84,0x88,0x8d,0x90,0x95,0x99,0x9d,0xa2,0xa6,0xa9,0xae,0xb1,0xb6,0xba,0xbe,0xc2,0xc6,0xca,0xcd,0xcf,0xd3,0xd6,0xd7,0xda,0xdb,0xdc,0xdc,0xdd,0xdc,0xdc,0xdb,0xd9,0xd7,0xd5,0xd2,0xcf,0xcc,0xc8,0xc5,0xc2,0xbd,0xb9,0xb4,0xb1,0xad,0xa9,0xa5,0xa2,0x9d,0x99,0x94,0x90,0x8b,0x87,0x83,0x7f,0x7b,0x77,0x73,0x70,0x6c,0x68,0x65,0x61,0x5d,0x59,0x55,0x51,0x4f,0x4b,0x48,0x44,0x41,0x3d,0x3b,0x39,0x35,0x32,0x30,0x2d,0x2b,0x28,0x25,0x23,0x21,0x1e,0x1d,0x1b,0x19,0x16,0x15,0x13,0x12,0x10,0x0e,0x0c,0x0a,0x09,0x07,0x06,0x05,0x04,0x03,0x02,0x01,0x00,0x00, +0x00,0x00,0x00,0x01,0x02,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0c,0x0e,0x11,0x12,0x14,0x15,0x18,0x1a,0x1c,0x1d,0x20,0x22,0x24,0x26,0x28,0x2b,0x2e,0x30,0x34,0x37,0x39,0x3c,0x3f,0x42,0x46,0x49,0x4c,0x50,0x53,0x57,0x5b,0x5f,0x63,0x66,0x6a,0x6e,0x71,0x75,0x79,0x7e,0x82,0x86,0x8a,0x8f,0x93,0x98,0x9c,0xa0,0xa5,0xa9,0xac,0xb1,0xb4,0xba,0xbe,0xc2,0xc6,0xc9,0xce,0xd1,0xd3,0xd7,0xda,0xdd,0xde,0xdf,0xe0,0xe0,0xe2,0xe0,0xe0,0xdf,0xdd,0xdb,0xd9,0xd6,0xd3,0xd0,0xcc,0xc9,0xc6,0xc1,0xbd,0xb8,0xb4,0xb1,0xad,0xa8,0xa4,0x9f,0x9b,0x96,0x93,0x8e,0x8a,0x85,0x81,0x7c,0x78,0x74,0x71,0x6d,0x69,0x66,0x62,0x5e,0x5a,0x56,0x53,0x4f,0x4b,0x48,0x45,0x42,0x3e,0x3c,0x39,0x37,0x33,0x30,0x2d,0x2a,0x27,0x26,0x24,0x21,0x1f,0x1d,0x1b,0x19,0x17,0x15,0x14,0x12,0x10,0x0e,0x0c,0x0a,0x09,0x08,0x07,0x06,0x05,0x04,0x02,0x01,0x00,0x00, +0x00,0x00,0x01,0x01,0x02,0x04,0x05,0x06,0x07,0x08,0x09,0x0b,0x0d,0x0f,0x11,0x13,0x14,0x15,0x18,0x1a,0x1c,0x1e,0x20,0x22,0x24,0x27,0x2a,0x2c,0x2f,0x32,0x35,0x37,0x3a,0x3c,0x40,0x43,0x46,0x4a,0x4e,0x51,0x53,0x57,0x5b,0x5f,0x63,0x66,0x6a,0x6f,0x72,0x76,0x7a,0x7f,0x83,0x87,0x8b,0x91,0x94,0x99,0x9d,0xa2,0xa6,0xab,0xaf,0xb4,0xb7,0xbc,0xc0,0xc4,0xc8,0xcd,0xd1,0xd5,0xd8,0xdb,0xdf,0xe1,0xe3,0xe4,0xe6,0xe6,0xe6,0xe6,0xe6,0xe4,0xe2,0xe0,0xde,0xda,0xd8,0xd4,0xd0,0xcc,0xc8,0xc4,0xc0,0xbb,0xb7,0xb2,0xae,0xaa,0xa6,0xa1,0x9d,0x98,0x94,0x8f,0x8b,0x86,0x82,0x7d,0x79,0x75,0x72,0x6e,0x6a,0x66,0x62,0x5e,0x5a,0x56,0x53,0x50,0x4c,0x49,0x46,0x42,0x3e,0x3c,0x3a,0x36,0x33,0x31,0x2e,0x2c,0x29,0x26,0x24,0x22,0x20,0x1d,0x1c,0x19,0x17,0x15,0x14,0x13,0x10,0x0f,0x0d,0x0a,0x09,0x08,0x07,0x06,0x05,0x04,0x02,0x01,0x01,0x00, +0x00,0x00,0x01,0x01,0x02,0x03,0x05,0x06,0x07,0x08,0x09,0x0b,0x0d,0x0f,0x11,0x13,0x14,0x16,0x18,0x1a,0x1c,0x1e,0x21,0x23,0x25,0x27,0x29,0x2c,0x2f,0x31,0x34,0x38,0x3a,0x3d,0x40,0x43,0x47,0x4a,0x4e,0x51,0x54,0x58,0x5c,0x60,0x64,0x67,0x6b,0x70,0x73,0x77,0x7b,0x80,0x84,0x88,0x8c,0x92,0x96,0x9b,0x9f,0xa4,0xa8,0xac,0xb0,0xb5,0xb9,0xbe,0xc2,0xc6,0xca,0xcf,0xd3,0xd8,0xdb,0xde,0xe2,0xe4,0xe6,0xe8,0xe9,0xe9,0xea,0xe9,0xe9,0xe8,0xe6,0xe4,0xe1,0xdd,0xdb,0xd7,0xd3,0xce,0xca,0xc6,0xc2,0xbd,0xb9,0xb4,0xb0,0xab,0xa7,0xa2,0x9e,0x99,0x96,0x90,0x8c,0x87,0x83,0x7e,0x7a,0x76,0x73,0x6e,0x6a,0x67,0x63,0x5f,0x5b,0x57,0x54,0x50,0x4d,0x49,0x46,0x43,0x3f,0x3d,0x3a,0x37,0x33,0x31,0x2e,0x2b,0x28,0x27,0x25,0x22,0x20,0x1e,0x1c,0x1a,0x17,0x16,0x14,0x13,0x10,0x0f,0x0d,0x0a,0x09,0x08,0x07,0x06,0x05,0x03,0x02,0x01,0x01,0x00, +0x00,0x00,0x01,0x01,0x02,0x03,0x05,0x06,0x07,0x08,0x09,0x0b,0x0d,0x0f,0x11,0x13,0x14,0x16,0x18,0x1a,0x1c,0x1e,0x21,0x23,0x25,0x28,0x2b,0x2d,0x30,0x33,0x36,0x38,0x3a,0x3d,0x41,0x44,0x47,0x4b,0x4f,0x52,0x54,0x59,0x5d,0x61,0x65,0x68,0x6c,0x70,0x73,0x78,0x7c,0x81,0x85,0x89,0x8f,0x93,0x97,0x9c,0xa0,0xa5,0xa9,0xae,0xb3,0xb7,0xbb,0xc0,0xc4,0xc9,0xce,0xd3,0xd7,0xdb,0xde,0xe2,0xe6,0xe8,0xea,0xec,0xee,0xee,0xee,0xee,0xee,0xeb,0xea,0xe8,0xe5,0xe0,0xde,0xda,0xd6,0xd2,0xcc,0xc8,0xc5,0xbe,0xbb,0xb5,0xb1,0xad,0xa9,0xa4,0xa0,0x9a,0x97,0x91,0x8d,0x89,0x84,0x7f,0x7b,0x77,0x73,0x6f,0x6b,0x68,0x64,0x60,0x5c,0x58,0x54,0x51,0x4d,0x4a,0x47,0x43,0x3f,0x3d,0x3a,0x37,0x34,0x32,0x2f,0x2d,0x2a,0x27,0x25,0x22,0x20,0x1e,0x1c,0x1a,0x17,0x16,0x14,0x13,0x10,0x0f,0x0d,0x0a,0x09,0x08,0x07,0x06,0x05,0x03,0x02,0x01,0x01,0x00, +0x00,0x00,0x01,0x01,0x02,0x03,0x05,0x06,0x07,0x08,0x09,0x0b,0x0d,0x0f,0x11,0x13,0x14,0x16,0x18,0x1a,0x1c,0x1e,0x21,0x23,0x25,0x28,0x2b,0x2d,0x30,0x32,0x36,0x38,0x3b,0x3d,0x41,0x44,0x48,0x4b,0x4f,0x52,0x55,0x59,0x5d,0x61,0x65,0x69,0x6d,0x71,0x74,0x79,0x7d,0x82,0x86,0x8a,0x8e,0x94,0x98,0x9e,0xa2,0xa6,0xaa,0xb0,0xb6,0xb9,0xbe,0xc2,0xc6,0xcc,0xd1,0xd6,0xda,0xdf,0xe2,0xe5,0xe9,0xec,0xee,0xf0,0xf2,0xf2,0xf2,0xf2,0xf2,0xf0,0xed,0xea,0xe8,0xe4,0xe2,0xde,0xda,0xd4,0xd1,0xca,0xc6,0xc1,0xbd,0xb7,0xb4,0xaf,0xaa,0xa5,0xa2,0x9c,0x98,0x92,0x8e,0x8a,0x85,0x81,0x7d,0x77,0x74,0x70,0x6c,0x68,0x64,0x60,0x5c,0x58,0x55,0x51,0x4e,0x4a,0x47,0x44,0x40,0x3d,0x3b,0x38,0x35,0x32,0x2f,0x2c,0x29,0x27,0x25,0x22,0x20,0x1e,0x1c,0x1a,0x17,0x16,0x14,0x13,0x10,0x0f,0x0d,0x0a,0x09,0x08,0x07,0x06,0x05,0x03,0x02,0x01,0x01,0x00, +0x00,0x00,0x01,0x01,0x02,0x03,0x05,0x06,0x07,0x08,0x09,0x0c,0x0e,0x0f,0x11,0x13,0x14,0x16,0x18,0x1a,0x1c,0x1f,0x22,0x23,0x25,0x28,0x2b,0x2d,0x30,0x33,0x37,0x39,0x3b,0x3e,0x42,0x45,0x48,0x4b,0x4f,0x52,0x55,0x5a,0x5e,0x63,0x67,0x69,0x6d,0x71,0x76,0x79,0x7d,0x82,0x87,0x8c,0x90,0x96,0x9a,0x9f,0xa3,0xa8,0xac,0xb2,0xb8,0xbb,0xc0,0xc4,0xc8,0xce,0xd3,0xd8,0xdc,0xe1,0xe4,0xe7,0xeb,0xee,0xf1,0xf3,0xf5,0xf6,0xf6,0xf6,0xf6,0xf3,0xf1,0xed,0xea,0xe7,0xe4,0xe1,0xdc,0xd6,0xd2,0xcc,0xc7,0xc3,0xbf,0xb9,0xb6,0xb2,0xab,0xa6,0xa3,0x9e,0x9a,0x94,0x90,0x8b,0x87,0x82,0x7e,0x79,0x76,0x70,0x6c,0x69,0x65,0x61,0x5d,0x59,0x55,0x53,0x4e,0x4b,0x47,0x44,0x40,0x3e,0x3b,0x39,0x36,0x33,0x2f,0x2c,0x29,0x27,0x25,0x22,0x20,0x1e,0x1c,0x1a,0x17,0x16,0x14,0x13,0x11,0x0f,0x0d,0x0b,0x09,0x08,0x07,0x06,0x05,0x03,0x02,0x01,0x01,0x00, +0x00,0x00,0x01,0x01,0x02,0x03,0x05,0x06,0x07,0x09,0x0a,0x0b,0x0d,0x0f,0x12,0x13,0x15,0x16,0x18,0x1b,0x1d,0x1e,0x22,0x24,0x25,0x27,0x2a,0x2d,0x30,0x33,0x37,0x3a,0x3c,0x3e,0x42,0x45,0x49,0x4c,0x50,0x53,0x56,0x5b,0x5f,0x63,0x67,0x6a,0x6e,0x73,0x76,0x7b,0x7f,0x84,0x88,0x8c,0x92,0x96,0x9a,0xa0,0xa4,0xaa,0xae,0xb2,0xb7,0xbd,0xc1,0xc6,0xca,0xd0,0xd5,0xda,0xdd,0xe3,0xe6,0xea,0xed,0xf0,0xf3,0xf7,0xf8,0xfa,0xf9,0xfa,0xf7,0xf5,0xf3,0xf0,0xec,0xe9,0xe6,0xe2,0xde,0xd8,0xd4,0xce,0xcb,0xc5,0xc1,0xbb,0xb7,0xb1,0xad,0xa8,0xa4,0x9e,0x9a,0x96,0x91,0x8b,0x86,0x82,0x7e,0x79,0x76,0x72,0x6e,0x6a,0x66,0x62,0x5e,0x5a,0x56,0x52,0x4f,0x4b,0x48,0x45,0x41,0x3e,0x3c,0x3a,0x36,0x33,0x30,0x2d,0x29,0x27,0x25,0x24,0x21,0x1e,0x1c,0x1a,0x18,0x16,0x15,0x13,0x11,0x0f,0x0d,0x0b,0x0a,0x09,0x07,0x06,0x05,0x03,0x02,0x01,0x01,0x00, +0x00,0x00,0x01,0x01,0x02,0x03,0x05,0x06,0x07,0x09,0x0a,0x0b,0x0d,0x0f,0x12,0x13,0x15,0x16,0x19,0x1b,0x1d,0x1f,0x21,0x24,0x26,0x27,0x2a,0x2d,0x30,0x33,0x37,0x3a,0x3c,0x3e,0x42,0x46,0x49,0x4c,0x50,0x54,0x57,0x5b,0x5f,0x63,0x67,0x6b,0x6f,0x73,0x76,0x7b,0x7f,0x84,0x88,0x8d,0x93,0x97,0x9b,0xa0,0xa4,0xaa,0xae,0xb3,0xb8,0xbe,0xc2,0xc7,0xcb,0xd1,0xd6,0xdb,0xe0,0xe4,0xe7,0xeb,0xf0,0xf3,0xf6,0xf9,0xfb,0xfc,0xfc,0xfc,0xfb,0xf8,0xf6,0xf3,0xef,0xeb,0xe7,0xe3,0xdf,0xdb,0xd6,0xd0,0xcb,0xc5,0xc2,0xbd,0xb8,0xb2,0xae,0xa8,0xa4,0x9f,0x9b,0x97,0x92,0x8c,0x86,0x83,0x7f,0x7a,0x76,0x72,0x6e,0x69,0x65,0x62,0x5e,0x5a,0x57,0x53,0x4f,0x4c,0x48,0x45,0x41,0x3e,0x3c,0x3a,0x36,0x33,0x30,0x2d,0x29,0x27,0x26,0x23,0x20,0x1f,0x1d,0x1a,0x18,0x16,0x15,0x13,0x11,0x0f,0x0d,0x0b,0x0a,0x09,0x07,0x06,0x05,0x03,0x02,0x01,0x01,0x00, +0x00,0x00,0x01,0x01,0x02,0x03,0x05,0x06,0x07,0x09,0x0a,0x0c,0x0e,0x10,0x12,0x13,0x15,0x16,0x19,0x1b,0x1d,0x1f,0x21,0x24,0x26,0x29,0x2c,0x2e,0x31,0x34,0x37,0x3a,0x3c,0x3f,0x43,0x46,0x49,0x4c,0x50,0x54,0x57,0x5b,0x5f,0x62,0x66,0x6b,0x6f,0x73,0x77,0x7c,0x80,0x85,0x89,0x8d,0x93,0x97,0x9b,0xa1,0xa5,0xab,0xaf,0xb3,0xb8,0xbe,0xc2,0xc8,0xcc,0xd2,0xd6,0xdc,0xe1,0xe6,0xe9,0xed,0xf1,0xf5,0xf8,0xfb,0xfd,0xfe,0xfe,0xfe,0xfd,0xfa,0xf7,0xf4,0xf0,0xec,0xe9,0xe5,0xe0,0xda,0xd6,0xd1,0xcb,0xc6,0xc2,0xbc,0xb8,0xb2,0xae,0xa9,0xa5,0x9f,0x9b,0x97,0x92,0x8c,0x88,0x83,0x7f,0x7a,0x77,0x72,0x6e,0x6a,0x66,0x62,0x5e,0x5a,0x57,0x53,0x4f,0x4c,0x48,0x45,0x41,0x3f,0x3c,0x39,0x35,0x33,0x30,0x2e,0x2b,0x28,0x26,0x23,0x20,0x1f,0x1d,0x1a,0x18,0x16,0x15,0x13,0x11,0x10,0x0e,0x0b,0x0a,0x09,0x07,0x06,0x05,0x03,0x02,0x01,0x01,0x00, +0x00,0x00,0x01,0x01,0x02,0x03,0x05,0x06,0x07,0x09,0x0a,0x0c,0x0e,0x10,0x12,0x13,0x15,0x16,0x19,0x1b,0x1d,0x1f,0x21,0x24,0x26,0x29,0x2c,0x2e,0x31,0x33,0x36,0x3a,0x3c,0x3f,0x43,0x46,0x49,0x4d,0x50,0x54,0x57,0x5b,0x5f,0x62,0x66,0x6b,0x6f,0x73,0x77,0x7c,0x80,0x85,0x89,0x8d,0x93,0x97,0x9b,0xa1,0xa5,0xab,0xb0,0xb4,0xb8,0xbe,0xc2,0xc8,0xcc,0xd2,0xd7,0xdd,0xe2,0xe6,0xe9,0xee,0xf2,0xf6,0xfa,0xfc,0xfd,0xfe,0xfe,0xfe,0xfd,0xfb,0xf8,0xf5,0xf1,0xed,0xe9,0xe4,0xe0,0xdc,0xd7,0xd1,0xcb,0xc6,0xc2,0xbc,0xb8,0xb3,0xaf,0xa9,0xa5,0x9f,0x9b,0x97,0x92,0x8c,0x88,0x83,0x7f,0x7a,0x77,0x72,0x6e,0x6a,0x66,0x62,0x5e,0x5a,0x57,0x53,0x4f,0x4c,0x49,0x45,0x41,0x3f,0x3c,0x39,0x35,0x33,0x30,0x2d,0x2a,0x28,0x26,0x23,0x20,0x1f,0x1d,0x1a,0x18,0x16,0x15,0x13,0x11,0x10,0x0e,0x0b,0x0a,0x09,0x07,0x06,0x05,0x03,0x02,0x01,0x01,0x00, +0x00,0x00,0x01,0x01,0x02,0x03,0x05,0x06,0x07,0x09,0x0a,0x0c,0x0e,0x10,0x12,0x13,0x15,0x16,0x19,0x1b,0x1d,0x1f,0x21,0x24,0x26,0x29,0x2c,0x2e,0x31,0x33,0x36,0x3a,0x3c,0x3f,0x43,0x46,0x49,0x4d,0x50,0x54,0x57,0x5b,0x5f,0x62,0x66,0x6b,0x6f,0x73,0x77,0x7c,0x80,0x85,0x89,0x8d,0x93,0x97,0x9b,0xa1,0xa5,0xab,0xaf,0xb5,0xba,0xbe,0xc2,0xc8,0xcc,0xd2,0xd7,0xdd,0xe2,0xe6,0xea,0xee,0xf2,0xf6,0xf9,0xfc,0xfe,0xfe,0xff,0xfe,0xfe,0xfb,0xf8,0xf5,0xf1,0xed,0xea,0xe5,0xe1,0xdb,0xd7,0xd1,0xcb,0xc6,0xc2,0xbc,0xb8,0xb4,0xaf,0xa9,0xa5,0x9f,0x9b,0x97,0x92,0x8c,0x88,0x83,0x7f,0x7a,0x77,0x72,0x6e,0x6a,0x66,0x62,0x5e,0x5a,0x57,0x53,0x4f,0x4c,0x49,0x45,0x41,0x3f,0x3c,0x39,0x35,0x33,0x30,0x2d,0x2a,0x28,0x26,0x23,0x20,0x1f,0x1d,0x1a,0x18,0x16,0x15,0x13,0x11,0x10,0x0e,0x0b,0x0a,0x09,0x07,0x06,0x05,0x03,0x02,0x01,0x01,0x00, +0x00,0x00,0x01,0x01,0x02,0x03,0x05,0x06,0x07,0x09,0x0a,0x0c,0x0e,0x10,0x12,0x13,0x15,0x16,0x19,0x1b,0x1d,0x1f,0x21,0x24,0x26,0x29,0x2c,0x2e,0x31,0x33,0x36,0x3a,0x3c,0x3f,0x43,0x46,0x49,0x4d,0x50,0x54,0x57,0x5b,0x5f,0x62,0x66,0x6b,0x6f,0x73,0x77,0x7c,0x80,0x85,0x89,0x8d,0x93,0x97,0x9b,0xa1,0xa5,0xab,0xb0,0xb4,0xb8,0xbe,0xc2,0xc8,0xcc,0xd2,0xd7,0xdd,0xe2,0xe6,0xe9,0xee,0xf2,0xf6,0xfa,0xfc,0xfd,0xfe,0xfe,0xfe,0xfd,0xfb,0xf8,0xf5,0xf1,0xed,0xe9,0xe4,0xe0,0xdb,0xd7,0xd1,0xcb,0xc6,0xc2,0xbc,0xb8,0xb3,0xaf,0xa9,0xa5,0x9f,0x9b,0x97,0x92,0x8c,0x88,0x83,0x7f,0x7a,0x77,0x72,0x6e,0x6a,0x66,0x62,0x5e,0x5a,0x57,0x53,0x4f,0x4c,0x49,0x45,0x41,0x3f,0x3c,0x39,0x35,0x33,0x30,0x2d,0x2a,0x28,0x26,0x23,0x20,0x1f,0x1d,0x1a,0x18,0x16,0x15,0x13,0x11,0x10,0x0e,0x0b,0x0a,0x09,0x07,0x06,0x05,0x03,0x02,0x01,0x01,0x00, +0x00,0x00,0x01,0x01,0x02,0x03,0x05,0x06,0x07,0x09,0x0a,0x0c,0x0e,0x10,0x12,0x13,0x15,0x16,0x19,0x1b,0x1d,0x1f,0x21,0x24,0x26,0x27,0x2a,0x2e,0x31,0x34,0x37,0x3a,0x3c,0x3f,0x43,0x46,0x49,0x4c,0x50,0x54,0x57,0x5b,0x5f,0x62,0x66,0x6b,0x6f,0x73,0x77,0x7c,0x80,0x85,0x89,0x8e,0x93,0x97,0x9b,0xa1,0xa5,0xab,0xaf,0xb4,0xb8,0xbe,0xc2,0xc8,0xcc,0xd2,0xd6,0xdc,0xe1,0xe6,0xe9,0xec,0xf1,0xf5,0xf8,0xfb,0xfd,0xfe,0xfe,0xfe,0xfd,0xfa,0xf7,0xf4,0xf0,0xec,0xe9,0xe5,0xe0,0xdb,0xd6,0xd1,0xcb,0xc6,0xc2,0xbd,0xb8,0xb1,0xae,0xa9,0xa5,0x9f,0x9b,0x97,0x92,0x8c,0x88,0x83,0x7f,0x7a,0x77,0x72,0x6e,0x6a,0x66,0x62,0x5e,0x5a,0x57,0x53,0x4f,0x4c,0x48,0x45,0x41,0x3f,0x3c,0x39,0x35,0x33,0x30,0x2e,0x2a,0x28,0x26,0x23,0x20,0x1f,0x1d,0x1a,0x18,0x16,0x15,0x13,0x11,0x10,0x0e,0x0b,0x0a,0x09,0x07,0x06,0x05,0x03,0x02,0x01,0x01,0x00, +0x00,0x00,0x01,0x01,0x02,0x03,0x05,0x06,0x07,0x09,0x0a,0x0b,0x0d,0x0f,0x12,0x13,0x15,0x16,0x19,0x1b,0x1d,0x1e,0x21,0x24,0x26,0x27,0x2a,0x2d,0x30,0x33,0x37,0x3a,0x3c,0x3e,0x42,0x46,0x49,0x4c,0x50,0x54,0x57,0x5b,0x5f,0x63,0x67,0x6b,0x6f,0x73,0x76,0x7b,0x7f,0x84,0x88,0x8d,0x93,0x97,0x9b,0xa0,0xa4,0xaa,0xae,0xb3,0xb7,0xbe,0xc2,0xc7,0xcb,0xd1,0xd6,0xdb,0xe0,0xe4,0xe7,0xeb,0xef,0xf2,0xf6,0xf9,0xfa,0xfb,0xfb,0xfb,0xfa,0xf7,0xf5,0xf2,0xee,0xeb,0xe7,0xe2,0xdf,0xdb,0xd6,0xd0,0xcb,0xc5,0xc2,0xbd,0xb7,0xb1,0xae,0xa8,0xa4,0x9f,0x9b,0x97,0x92,0x8c,0x86,0x83,0x7f,0x7a,0x76,0x72,0x6e,0x69,0x65,0x62,0x5e,0x5a,0x57,0x53,0x4f,0x4c,0x48,0x45,0x41,0x3e,0x3c,0x3a,0x36,0x33,0x30,0x2d,0x29,0x27,0x26,0x24,0x20,0x1f,0x1d,0x1a,0x18,0x16,0x15,0x13,0x11,0x0f,0x0d,0x0b,0x0a,0x09,0x07,0x06,0x05,0x03,0x02,0x01,0x01,0x00, +0x00,0x00,0x01,0x01,0x02,0x03,0x05,0x06,0x07,0x08,0x09,0x0c,0x0e,0x0f,0x11,0x13,0x14,0x16,0x17,0x1a,0x1c,0x1f,0x21,0x23,0x25,0x28,0x2b,0x2d,0x30,0x33,0x37,0x39,0x3b,0x3e,0x42,0x45,0x48,0x4b,0x4f,0x53,0x56,0x5a,0x5e,0x62,0x66,0x6a,0x6e,0x73,0x75,0x7b,0x7f,0x84,0x87,0x8d,0x92,0x95,0x99,0xa0,0xa4,0xa9,0xae,0xb3,0xb8,0xbc,0xc0,0xc6,0xca,0xd0,0xd4,0xd9,0xdd,0xe2,0xe5,0xe9,0xed,0xf0,0xf3,0xf6,0xf7,0xf8,0xf8,0xf8,0xf7,0xf5,0xf3,0xf0,0xec,0xe9,0xe5,0xe2,0xde,0xd8,0xd4,0xce,0xca,0xc5,0xc0,0xba,0xb7,0xb2,0xad,0xa8,0xa4,0x9e,0x99,0x96,0x90,0x8a,0x87,0x82,0x7e,0x78,0x75,0x72,0x6e,0x6a,0x66,0x61,0x5d,0x59,0x56,0x52,0x4e,0x4b,0x47,0x44,0x40,0x3e,0x3b,0x39,0x36,0x33,0x2f,0x2c,0x29,0x27,0x25,0x24,0x21,0x1e,0x1c,0x1a,0x17,0x16,0x14,0x13,0x11,0x0f,0x0d,0x0b,0x09,0x08,0x07,0x06,0x05,0x03,0x02,0x01,0x01,0x00, +0x00,0x00,0x01,0x01,0x02,0x03,0x05,0x06,0x07,0x08,0x09,0x0c,0x0e,0x0f,0x11,0x13,0x14,0x16,0x18,0x1a,0x1c,0x1e,0x21,0x23,0x25,0x28,0x2b,0x2d,0x30,0x33,0x37,0x39,0x3b,0x3e,0x42,0x45,0x48,0x4b,0x4f,0x52,0x55,0x5a,0x5e,0x62,0x66,0x69,0x6d,0x71,0x75,0x79,0x7d,0x82,0x87,0x8c,0x90,0x95,0x99,0x9e,0xa2,0xa7,0xac,0xb2,0xb7,0xba,0xbe,0xc4,0xc8,0xce,0xd2,0xd7,0xdb,0xe0,0xe3,0xe7,0xeb,0xee,0xf1,0xf3,0xf4,0xf5,0xf5,0xf5,0xf4,0xf3,0xf1,0xed,0xea,0xe7,0xe3,0xe1,0xdc,0xd6,0xd2,0xcc,0xc8,0xc3,0xbe,0xb8,0xb5,0xb1,0xab,0xa6,0xa2,0x9d,0x99,0x94,0x8f,0x8a,0x87,0x81,0x7d,0x78,0x75,0x70,0x6c,0x69,0x65,0x61,0x5d,0x59,0x55,0x52,0x4e,0x4b,0x47,0x44,0x40,0x3e,0x3b,0x39,0x36,0x33,0x2f,0x2c,0x29,0x27,0x25,0x22,0x20,0x1e,0x1c,0x1a,0x17,0x16,0x14,0x13,0x11,0x0f,0x0d,0x0b,0x09,0x08,0x07,0x06,0x05,0x03,0x02,0x01,0x01,0x00, +0x00,0x00,0x01,0x01,0x02,0x03,0x05,0x06,0x07,0x08,0x09,0x0b,0x0d,0x0f,0x11,0x13,0x14,0x16,0x18,0x1a,0x1c,0x1e,0x21,0x23,0x25,0x28,0x2b,0x2d,0x30,0x32,0x35,0x38,0x3b,0x3d,0x41,0x44,0x48,0x4b,0x4f,0x52,0x55,0x59,0x5d,0x61,0x65,0x69,0x6d,0x71,0x74,0x79,0x7d,0x82,0x86,0x8a,0x8e,0x94,0x98,0x9d,0xa1,0xa6,0xaa,0xaf,0xb4,0xb9,0xbc,0xc0,0xc5,0xcb,0xd0,0xd5,0xd9,0xde,0xe1,0xe4,0xe8,0xeb,0xed,0xef,0xf0,0xf1,0xf1,0xf2,0xf0,0xee,0xed,0xea,0xe7,0xe3,0xe1,0xdd,0xd9,0xd3,0xcf,0xc9,0xc5,0xc0,0xbc,0xb7,0xb3,0xae,0xaa,0xa5,0xa1,0x9b,0x98,0x92,0x8e,0x89,0x85,0x80,0x7c,0x77,0x74,0x70,0x6c,0x68,0x64,0x60,0x5c,0x58,0x55,0x51,0x4e,0x4a,0x47,0x44,0x40,0x3d,0x3b,0x37,0x34,0x32,0x2f,0x2c,0x29,0x27,0x25,0x22,0x20,0x1e,0x1c,0x1a,0x17,0x16,0x14,0x13,0x10,0x0f,0x0d,0x0a,0x09,0x08,0x07,0x06,0x05,0x03,0x02,0x01,0x01,0x00, +0x00,0x00,0x01,0x01,0x02,0x03,0x05,0x06,0x07,0x08,0x09,0x0b,0x0d,0x0f,0x11,0x13,0x14,0x16,0x18,0x1a,0x1c,0x1e,0x21,0x23,0x25,0x28,0x2b,0x2d,0x30,0x33,0x36,0x38,0x3a,0x3d,0x41,0x44,0x47,0x4b,0x4f,0x52,0x54,0x59,0x5d,0x61,0x65,0x68,0x6c,0x70,0x73,0x78,0x7c,0x81,0x85,0x89,0x8f,0x93,0x97,0x9c,0xa0,0xa5,0xa9,0xae,0xb2,0xb7,0xbb,0xc0,0xc4,0xc8,0xcc,0xd2,0xd7,0xda,0xdd,0xe1,0xe5,0xe7,0xe9,0xeb,0xec,0xed,0xed,0xed,0xec,0xeb,0xe9,0xe7,0xe4,0xe0,0xdd,0xd9,0xd5,0xd1,0xcb,0xc8,0xc4,0xbe,0xbb,0xb5,0xb1,0xad,0xa9,0xa4,0xa0,0x9a,0x97,0x91,0x8d,0x89,0x84,0x7f,0x7b,0x77,0x73,0x6f,0x6b,0x68,0x64,0x60,0x5c,0x58,0x54,0x51,0x4d,0x4a,0x47,0x43,0x3f,0x3d,0x3a,0x37,0x34,0x32,0x2f,0x2d,0x2a,0x27,0x25,0x22,0x20,0x1e,0x1c,0x1a,0x17,0x16,0x14,0x13,0x10,0x0f,0x0d,0x0a,0x09,0x08,0x07,0x06,0x05,0x03,0x02,0x01,0x01,0x00, +0x00,0x00,0x01,0x01,0x02,0x03,0x05,0x06,0x07,0x08,0x09,0x0b,0x0d,0x0f,0x11,0x13,0x14,0x16,0x18,0x1a,0x1c,0x1e,0x21,0x23,0x25,0x27,0x29,0x2c,0x2f,0x31,0x34,0x38,0x3a,0x3d,0x40,0x43,0x47,0x4a,0x4e,0x51,0x54,0x58,0x5c,0x60,0x64,0x67,0x6b,0x70,0x73,0x77,0x7b,0x80,0x84,0x88,0x8c,0x92,0x96,0x9b,0x9f,0xa4,0xa8,0xac,0xb0,0xb5,0xb9,0xbe,0xc2,0xc6,0xca,0xcf,0xd3,0xd8,0xdb,0xde,0xe2,0xe4,0xe6,0xe8,0xe9,0xe9,0xea,0xe9,0xe9,0xe8,0xe6,0xe4,0xe1,0xdd,0xdb,0xd7,0xd3,0xce,0xca,0xc6,0xc2,0xbd,0xb9,0xb4,0xb0,0xab,0xa7,0xa2,0x9e,0x99,0x96,0x90,0x8c,0x87,0x83,0x7e,0x7a,0x76,0x73,0x6e,0x6a,0x67,0x63,0x5f,0x5b,0x57,0x54,0x50,0x4d,0x49,0x46,0x43,0x3f,0x3d,0x3a,0x37,0x33,0x31,0x2e,0x2b,0x28,0x27,0x25,0x22,0x20,0x1e,0x1c,0x1a,0x17,0x16,0x14,0x13,0x10,0x0f,0x0d,0x0a,0x09,0x08,0x07,0x06,0x05,0x03,0x02,0x01,0x01,0x00, +0x00,0x00,0x01,0x01,0x02,0x04,0x05,0x06,0x07,0x08,0x09,0x0b,0x0d,0x0f,0x11,0x13,0x14,0x15,0x18,0x1a,0x1c,0x1e,0x20,0x22,0x24,0x26,0x29,0x2c,0x2f,0x31,0x34,0x37,0x3a,0x3c,0x40,0x43,0x46,0x4a,0x4d,0x51,0x53,0x57,0x5b,0x5f,0x63,0x66,0x6a,0x6f,0x72,0x76,0x7a,0x7f,0x83,0x87,0x8b,0x91,0x94,0x98,0x9d,0xa2,0xa6,0xab,0xaf,0xb4,0xb6,0xbc,0xc0,0xc4,0xc8,0xcc,0xd0,0xd4,0xd7,0xda,0xdd,0xdf,0xe1,0xe3,0xe4,0xe4,0xe6,0xe4,0xe4,0xe3,0xe1,0xdf,0xdc,0xd9,0xd7,0xd3,0xcf,0xcc,0xc8,0xc4,0xc0,0xbb,0xb6,0xb2,0xae,0xaa,0xa6,0xa1,0x9d,0x98,0x94,0x8f,0x8b,0x86,0x82,0x7d,0x79,0x75,0x72,0x6e,0x6a,0x66,0x62,0x5e,0x5a,0x56,0x53,0x50,0x4c,0x49,0x46,0x42,0x3e,0x3c,0x3a,0x36,0x33,0x31,0x2e,0x2b,0x28,0x26,0x24,0x22,0x20,0x1d,0x1c,0x19,0x17,0x15,0x14,0x13,0x10,0x0f,0x0d,0x0a,0x09,0x08,0x07,0x06,0x05,0x04,0x02,0x01,0x01,0x00, +0x00,0x00,0x00,0x01,0x02,0x04,0x05,0x06,0x07,0x08,0x09,0x0b,0x0c,0x0e,0x11,0x12,0x14,0x15,0x18,0x1a,0x1c,0x1d,0x20,0x22,0x24,0x26,0x28,0x2b,0x2e,0x30,0x34,0x37,0x39,0x3c,0x3f,0x42,0x46,0x49,0x4c,0x50,0x53,0x57,0x5b,0x5f,0x63,0x66,0x6a,0x6e,0x71,0x75,0x79,0x7e,0x82,0x85,0x89,0x8e,0x92,0x96,0x9b,0xa0,0xa4,0xa7,0xab,0xb0,0xb3,0xb9,0xbd,0xc1,0xc5,0xc8,0xcc,0xd0,0xd3,0xd6,0xd9,0xdb,0xdd,0xdf,0xe0,0xe0,0xe1,0xe0,0xe0,0xdf,0xdd,0xdb,0xd8,0xd5,0xd3,0xcf,0xcb,0xc8,0xc4,0xc0,0xbc,0xb7,0xb3,0xb0,0xac,0xa7,0xa3,0x9e,0x9a,0x95,0x92,0x8d,0x88,0x83,0x80,0x7c,0x78,0x74,0x71,0x6d,0x69,0x66,0x62,0x5e,0x5a,0x56,0x53,0x4f,0x4b,0x48,0x45,0x42,0x3e,0x3b,0x39,0x37,0x33,0x30,0x2d,0x2a,0x27,0x26,0x24,0x21,0x1f,0x1d,0x1b,0x19,0x17,0x15,0x14,0x12,0x10,0x0e,0x0b,0x0a,0x09,0x08,0x07,0x06,0x04,0x03,0x02,0x01,0x00,0x00, +0x00,0x00,0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x0a,0x0c,0x0d,0x0e,0x11,0x12,0x13,0x15,0x17,0x19,0x1a,0x1d,0x1f,0x22,0x23,0x26,0x29,0x2b,0x2e,0x31,0x34,0x36,0x39,0x3b,0x3f,0x42,0x45,0x48,0x4c,0x4f,0x51,0x56,0x5a,0x5e,0x62,0x65,0x69,0x6d,0x70,0x74,0x77,0x7a,0x7f,0x84,0x88,0x8d,0x90,0x95,0x99,0x9d,0xa1,0xa5,0xa9,0xae,0xb1,0xb6,0xba,0xbe,0xc2,0xc5,0xc9,0xcc,0xce,0xd2,0xd5,0xd7,0xd9,0xda,0xdb,0xdb,0xdb,0xdb,0xdb,0xda,0xd8,0xd7,0xd4,0xd1,0xce,0xcc,0xc8,0xc5,0xc1,0xbd,0xb9,0xb4,0xb1,0xad,0xa9,0xa5,0xa1,0x9c,0x98,0x94,0x90,0x8c,0x87,0x82,0x7f,0x7b,0x77,0x73,0x70,0x6c,0x68,0x65,0x61,0x5d,0x59,0x55,0x51,0x4f,0x4b,0x48,0x44,0x41,0x3d,0x3a,0x39,0x36,0x33,0x30,0x2d,0x2b,0x28,0x25,0x23,0x21,0x1e,0x1d,0x1b,0x19,0x16,0x15,0x13,0x12,0x10,0x0e,0x0b,0x0a,0x09,0x07,0x06,0x05,0x03,0x02,0x02,0x01,0x00,0x00, +0x00,0x00,0x00,0x02,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x0a,0x0d,0x0e,0x10,0x11,0x13,0x14,0x17,0x19,0x1a,0x1d,0x1f,0x21,0x22,0x25,0x28,0x2b,0x2d,0x30,0x34,0x36,0x38,0x39,0x3d,0x41,0x45,0x47,0x4b,0x4e,0x50,0x54,0x58,0x5c,0x60,0x63,0x67,0x6c,0x6f,0x73,0x76,0x79,0x7d,0x82,0x86,0x8b,0x8e,0x93,0x97,0x9c,0xa0,0xa3,0xa7,0xab,0xae,0xb2,0xb6,0xba,0xbe,0xc2,0xc5,0xc8,0xca,0xce,0xd0,0xd0,0xd4,0xd6,0xd7,0xd7,0xd7,0xd7,0xd7,0xd6,0xd3,0xd0,0xcf,0xcd,0xca,0xc8,0xc4,0xc1,0xbe,0xb9,0xb5,0xb1,0xae,0xaa,0xa6,0xa3,0x9f,0x9a,0x96,0x92,0x8e,0x89,0x85,0x81,0x7c,0x79,0x76,0x72,0x6f,0x6b,0x66,0x63,0x5f,0x5b,0x57,0x53,0x50,0x4d,0x4a,0x46,0x44,0x40,0x3c,0x39,0x38,0x34,0x31,0x30,0x2d,0x2b,0x28,0x24,0x22,0x20,0x1e,0x1c,0x1a,0x18,0x16,0x14,0x13,0x11,0x0f,0x0e,0x0c,0x09,0x08,0x07,0x06,0x05,0x03,0x02,0x01,0x01,0x00,0x00, +0x00,0x00,0x00,0x02,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0b,0x0d,0x10,0x11,0x12,0x14,0x16,0x18,0x1a,0x1c,0x1e,0x20,0x22,0x24,0x27,0x29,0x2c,0x2f,0x32,0x34,0x37,0x39,0x3d,0x40,0x43,0x46,0x4a,0x4c,0x4f,0x52,0x56,0x5a,0x5e,0x61,0x65,0x6a,0x6d,0x71,0x75,0x78,0x7c,0x80,0x84,0x89,0x8c,0x91,0x95,0x9a,0x9e,0xa1,0xa5,0xa8,0xab,0xaf,0xb3,0xb6,0xba,0xbe,0xc1,0xc3,0xc5,0xc8,0xcb,0xcc,0xcf,0xd0,0xd1,0xd1,0xd2,0xd1,0xd1,0xd0,0xcf,0xcc,0xca,0xc7,0xc5,0xc2,0xbf,0xbd,0xba,0xb6,0xb2,0xae,0xab,0xa8,0xa3,0xa1,0x9d,0x98,0x94,0x90,0x8c,0x87,0x83,0x7f,0x7b,0x77,0x74,0x70,0x6d,0x69,0x64,0x61,0x5d,0x59,0x55,0x51,0x4f,0x4c,0x49,0x45,0x42,0x40,0x3c,0x39,0x37,0x34,0x32,0x2e,0x2b,0x29,0x26,0x24,0x22,0x20,0x1d,0x1c,0x1a,0x18,0x15,0x14,0x12,0x11,0x0f,0x0d,0x0b,0x09,0x08,0x07,0x06,0x05,0x03,0x02,0x01,0x01,0x00,0x00, +0x00,0x00,0x00,0x00,0x01,0x02,0x04,0x05,0x06,0x07,0x08,0x0a,0x0b,0x0c,0x0f,0x11,0x12,0x13,0x16,0x18,0x1a,0x1b,0x1e,0x20,0x21,0x24,0x27,0x29,0x2b,0x2d,0x31,0x34,0x36,0x38,0x3c,0x3f,0x42,0x45,0x49,0x4b,0x4e,0x51,0x55,0x59,0x5d,0x60,0x64,0x67,0x6a,0x6e,0x72,0x76,0x7a,0x7d,0x81,0x86,0x89,0x8e,0x92,0x97,0x9b,0x9e,0xa2,0xa4,0xa7,0xab,0xaf,0xb2,0xb6,0xba,0xbd,0xbf,0xc1,0xc4,0xc7,0xc9,0xcb,0xca,0xcb,0xcb,0xcc,0xcb,0xcb,0xca,0xcb,0xc9,0xc6,0xc2,0xc1,0xbe,0xbb,0xb9,0xb6,0xb2,0xae,0xaa,0xa7,0xa5,0xa0,0x9e,0x9a,0x95,0x91,0x8d,0x89,0x84,0x80,0x7d,0x7a,0x75,0x71,0x6d,0x6a,0x66,0x62,0x5f,0x5c,0x58,0x54,0x50,0x4e,0x4b,0x47,0x44,0x41,0x3f,0x3b,0x38,0x36,0x34,0x31,0x2d,0x2b,0x29,0x26,0x23,0x21,0x1f,0x1d,0x1b,0x19,0x17,0x15,0x13,0x12,0x11,0x0e,0x0c,0x0a,0x09,0x08,0x07,0x06,0x05,0x04,0x02,0x01,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x09,0x0b,0x0c,0x0d,0x0f,0x10,0x11,0x13,0x15,0x17,0x19,0x1b,0x1d,0x1f,0x21,0x23,0x26,0x28,0x2a,0x2d,0x31,0x33,0x35,0x38,0x3c,0x3e,0x41,0x43,0x47,0x4a,0x4d,0x50,0x54,0x58,0x5c,0x5f,0x62,0x66,0x69,0x6d,0x70,0x74,0x78,0x7b,0x7f,0x83,0x87,0x8b,0x8f,0x93,0x97,0x9a,0x9e,0xa2,0xa5,0xa8,0xac,0xaf,0xb2,0xb4,0xb8,0xbb,0xbd,0xbe,0xc1,0xc3,0xc5,0xc5,0xc6,0xc6,0xc7,0xc6,0xc6,0xc5,0xc5,0xc3,0xc0,0xbe,0xbd,0xbb,0xb7,0xb4,0xb1,0xae,0xaa,0xa8,0xa5,0xa1,0x9d,0x9a,0x96,0x92,0x8e,0x8a,0x87,0x82,0x7e,0x7b,0x77,0x73,0x6f,0x6c,0x69,0x65,0x61,0x5e,0x5b,0x57,0x53,0x4f,0x4d,0x4a,0x46,0x43,0x40,0x3d,0x3a,0x37,0x35,0x33,0x30,0x2d,0x2a,0x27,0x25,0x23,0x21,0x1f,0x1d,0x1a,0x19,0x17,0x14,0x13,0x11,0x10,0x0d,0x0c,0x0b,0x09,0x07,0x06,0x05,0x04,0x03,0x02,0x01,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x02,0x02,0x03,0x04,0x05,0x06,0x07,0x09,0x0a,0x0b,0x0e,0x10,0x11,0x13,0x16,0x17,0x18,0x1a,0x1d,0x1f,0x20,0x23,0x26,0x28,0x2a,0x2c,0x2f,0x32,0x35,0x37,0x3a,0x3d,0x40,0x42,0x46,0x49,0x4c,0x4f,0x53,0x57,0x5a,0x5d,0x61,0x65,0x67,0x6b,0x6f,0x73,0x77,0x7a,0x7d,0x81,0x84,0x89,0x8d,0x91,0x95,0x98,0x9c,0x9f,0xa2,0xa5,0xa9,0xac,0xaf,0xb1,0xb4,0xb7,0xb9,0xbb,0xbd,0xbf,0xc1,0xc1,0xc2,0xc2,0xc3,0xc2,0xc2,0xc1,0xc0,0xbe,0xbc,0xbb,0xb9,0xb6,0xb3,0xb1,0xae,0xab,0xa7,0xa5,0xa2,0x9e,0x9b,0x98,0x94,0x90,0x8c,0x88,0x84,0x80,0x7c,0x79,0x76,0x72,0x6e,0x6a,0x67,0x64,0x60,0x5d,0x59,0x56,0x52,0x4e,0x4c,0x49,0x45,0x42,0x40,0x3d,0x39,0x37,0x35,0x31,0x2e,0x2c,0x2a,0x28,0x25,0x22,0x20,0x1e,0x1c,0x1a,0x18,0x16,0x14,0x13,0x11,0x10,0x0d,0x0b,0x09,0x08,0x07,0x06,0x05,0x04,0x03,0x02,0x02,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x02,0x02,0x03,0x04,0x05,0x06,0x07,0x09,0x0a,0x0b,0x0e,0x10,0x11,0x12,0x15,0x17,0x19,0x1a,0x1d,0x1e,0x20,0x22,0x24,0x27,0x29,0x2b,0x2f,0x32,0x34,0x36,0x39,0x3c,0x3f,0x41,0x45,0x48,0x4b,0x4e,0x52,0x55,0x58,0x5c,0x60,0x63,0x66,0x69,0x6d,0x71,0x74,0x77,0x7c,0x7e,0x81,0x85,0x8a,0x8f,0x92,0x95,0x99,0x9c,0x9e,0xa2,0xa6,0xa8,0xab,0xaf,0xb0,0xb2,0xb4,0xb5,0xb7,0xb9,0xbc,0xbd,0xbc,0xbc,0xbd,0xbc,0xbc,0xbd,0xba,0xb8,0xb7,0xb5,0xb4,0xb1,0xaf,0xad,0xaa,0xa8,0xa4,0xa1,0x9e,0x9b,0x98,0x95,0x91,0x8e,0x89,0x84,0x81,0x7f,0x7b,0x77,0x73,0x70,0x6c,0x69,0x66,0x62,0x5f,0x5c,0x58,0x54,0x50,0x4d,0x4b,0x48,0x44,0x41,0x3f,0x3c,0x38,0x36,0x34,0x32,0x2e,0x2b,0x29,0x27,0x24,0x22,0x20,0x1e,0x1c,0x1a,0x18,0x16,0x14,0x12,0x11,0x10,0x0d,0x0b,0x0a,0x08,0x07,0x06,0x05,0x04,0x03,0x02,0x02,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x09,0x0b,0x0c,0x0e,0x0f,0x10,0x12,0x14,0x16,0x18,0x1a,0x1c,0x1e,0x1f,0x21,0x23,0x26,0x28,0x2b,0x2e,0x31,0x33,0x34,0x39,0x3c,0x3e,0x40,0x44,0x47,0x4a,0x4c,0x50,0x53,0x56,0x5a,0x5e,0x61,0x63,0x67,0x6b,0x6e,0x72,0x74,0x79,0x7b,0x7e,0x82,0x87,0x8b,0x8e,0x91,0x95,0x98,0x9b,0x9e,0xa2,0xa4,0xa7,0xa9,0xac,0xae,0xb0,0xb1,0xb4,0xb5,0xb6,0xb8,0xb8,0xb7,0xb9,0xb7,0xb8,0xb8,0xb5,0xb4,0xb3,0xb1,0xb0,0xad,0xab,0xa9,0xa6,0xa4,0xa1,0x9d,0x9b,0x98,0x94,0x91,0x8d,0x8a,0x85,0x81,0x7e,0x7b,0x77,0x74,0x71,0x6e,0x69,0x66,0x63,0x60,0x5c,0x59,0x55,0x53,0x4f,0x4c,0x4a,0x47,0x43,0x40,0x3e,0x3c,0x38,0x35,0x33,0x2f,0x2d,0x2b,0x28,0x26,0x23,0x21,0x1f,0x1e,0x1b,0x1a,0x18,0x16,0x13,0x12,0x10,0x0f,0x0c,0x0b,0x0b,0x09,0x07,0x06,0x05,0x04,0x02,0x01,0x01,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x01,0x02,0x03,0x04,0x04,0x05,0x06,0x09,0x0b,0x0c,0x0d,0x0f,0x10,0x12,0x13,0x16,0x18,0x19,0x1c,0x1d,0x1f,0x20,0x22,0x25,0x27,0x29,0x2d,0x30,0x31,0x35,0x38,0x3b,0x3d,0x3f,0x43,0x46,0x48,0x4b,0x4f,0x52,0x55,0x58,0x5c,0x5f,0x62,0x64,0x68,0x6c,0x70,0x72,0x77,0x79,0x7c,0x80,0x84,0x87,0x8b,0x8e,0x92,0x95,0x98,0x9a,0x9e,0xa1,0xa3,0xa5,0xa7,0xaa,0xac,0xad,0xb0,0xb1,0xb0,0xb2,0xb2,0xb3,0xb3,0xb3,0xb2,0xb2,0xb1,0xb1,0xaf,0xad,0xac,0xaa,0xa7,0xa4,0xa3,0xa1,0x9d,0x9a,0x98,0x95,0x91,0x8e,0x8a,0x86,0x83,0x7f,0x7c,0x79,0x75,0x72,0x6e,0x6b,0x67,0x64,0x62,0x5f,0x5b,0x58,0x53,0x50,0x4c,0x4b,0x48,0x46,0x42,0x3f,0x3d,0x3b,0x37,0x34,0x31,0x2f,0x2c,0x29,0x27,0x25,0x22,0x20,0x1f,0x1d,0x1b,0x19,0x17,0x15,0x13,0x12,0x10,0x0f,0x0b,0x0a,0x09,0x07,0x06,0x05,0x04,0x04,0x02,0x02,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x01,0x01,0x02,0x03,0x04,0x05,0x06,0x08,0x0a,0x0b,0x0c,0x0d,0x10,0x10,0x13,0x14,0x16,0x19,0x1a,0x1d,0x1d,0x20,0x23,0x25,0x27,0x29,0x2b,0x2e,0x30,0x34,0x37,0x39,0x3b,0x3e,0x42,0x44,0x46,0x49,0x4d,0x50,0x53,0x56,0x5a,0x5d,0x60,0x63,0x67,0x69,0x6d,0x72,0x74,0x77,0x7a,0x7d,0x80,0x83,0x87,0x8b,0x8e,0x91,0x94,0x95,0x9a,0x9d,0x9f,0xa1,0xa3,0xa6,0xa7,0xa8,0xa9,0xac,0xac,0xad,0xae,0xaf,0xaf,0xaf,0xae,0xad,0xad,0xab,0xa9,0xa8,0xa7,0xa6,0xa3,0xa0,0x9f,0x9d,0x99,0x96,0x94,0x91,0x8d,0x8a,0x86,0x82,0x7f,0x7c,0x7a,0x77,0x73,0x70,0x6d,0x69,0x65,0x62,0x60,0x5d,0x59,0x56,0x52,0x4f,0x4b,0x4a,0x46,0x44,0x41,0x3e,0x3b,0x39,0x36,0x33,0x30,0x2d,0x2a,0x29,0x27,0x25,0x22,0x1f,0x1d,0x1d,0x19,0x19,0x17,0x14,0x12,0x10,0x10,0x0d,0x0c,0x0b,0x09,0x07,0x06,0x05,0x04,0x03,0x02,0x02,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x01,0x01,0x02,0x02,0x03,0x04,0x05,0x07,0x09,0x0a,0x0c,0x0d,0x0e,0x10,0x11,0x14,0x16,0x17,0x1a,0x1b,0x1d,0x1f,0x22,0x24,0x26,0x28,0x2a,0x2d,0x2f,0x32,0x35,0x37,0x39,0x3b,0x40,0x42,0x44,0x48,0x4b,0x4d,0x51,0x54,0x58,0x5b,0x5e,0x61,0x65,0x67,0x6a,0x6f,0x71,0x75,0x77,0x79,0x7d,0x81,0x83,0x87,0x8b,0x8e,0x90,0x92,0x96,0x98,0x9a,0x9d,0x9f,0xa1,0xa2,0xa3,0xa5,0xa6,0xa8,0xa9,0xa9,0xa9,0xa9,0xa9,0xa9,0xa9,0xa7,0xa6,0xa5,0xa3,0xa2,0xa1,0x9e,0x9c,0x9a,0x98,0x95,0x92,0x90,0x8e,0x8a,0x86,0x83,0x80,0x7c,0x79,0x77,0x75,0x71,0x6e,0x6b,0x67,0x63,0x60,0x5e,0x5b,0x57,0x54,0x51,0x4d,0x4a,0x48,0x44,0x42,0x3f,0x3b,0x39,0x37,0x34,0x31,0x2f,0x2c,0x29,0x28,0x26,0x23,0x20,0x1e,0x1d,0x1b,0x19,0x17,0x15,0x13,0x11,0x10,0x0e,0x0d,0x0b,0x0a,0x08,0x06,0x05,0x04,0x03,0x02,0x02,0x01,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x01,0x01,0x02,0x02,0x03,0x04,0x05,0x07,0x09,0x0a,0x0b,0x0c,0x0e,0x0f,0x11,0x13,0x15,0x17,0x19,0x1a,0x1c,0x1e,0x20,0x23,0x25,0x26,0x29,0x2c,0x2e,0x31,0x34,0x36,0x38,0x3a,0x3d,0x41,0x43,0x46,0x49,0x4c,0x4f,0x52,0x56,0x59,0x5b,0x5e,0x62,0x65,0x68,0x6b,0x6f,0x72,0x73,0x76,0x79,0x7d,0x80,0x83,0x87,0x8a,0x8c,0x8f,0x92,0x94,0x96,0x99,0x9b,0x9d,0x9e,0x9f,0xa1,0xa2,0xa3,0xa4,0xa5,0xa5,0xa5,0xa5,0xa5,0xa4,0xa3,0xa2,0xa1,0x9f,0x9e,0x9d,0x9a,0x98,0x96,0x94,0x91,0x8e,0x8c,0x8a,0x86,0x82,0x7f,0x7c,0x78,0x76,0x73,0x72,0x6e,0x6b,0x68,0x64,0x60,0x5e,0x5b,0x58,0x54,0x51,0x4f,0x4c,0x48,0x45,0x43,0x40,0x3c,0x3a,0x38,0x36,0x33,0x30,0x2e,0x2b,0x28,0x26,0x24,0x22,0x20,0x1e,0x1c,0x1a,0x17,0x16,0x15,0x12,0x11,0x0f,0x0e,0x0c,0x0b,0x0a,0x08,0x06,0x05,0x04,0x03,0x02,0x02,0x01,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x02,0x03,0x04,0x05,0x07,0x09,0x0a,0x0b,0x0c,0x0d,0x0f,0x10,0x13,0x15,0x16,0x19,0x1a,0x1c,0x1d,0x20,0x22,0x24,0x25,0x28,0x2b,0x2d,0x30,0x33,0x35,0x37,0x39,0x3c,0x3f,0x42,0x45,0x48,0x4a,0x4d,0x4f,0x53,0x56,0x59,0x5b,0x5f,0x62,0x66,0x69,0x6c,0x6f,0x71,0x74,0x78,0x7a,0x7d,0x7f,0x82,0x85,0x87,0x8b,0x8e,0x90,0x91,0x94,0x96,0x98,0x99,0x9a,0x9b,0x9d,0x9e,0x9f,0x9f,0x9f,0x9f,0x9f,0x9f,0x9f,0x9e,0x9d,0x9b,0x9a,0x99,0x98,0x95,0x93,0x91,0x8f,0x8d,0x8a,0x87,0x84,0x81,0x7f,0x7c,0x79,0x76,0x73,0x71,0x6e,0x6a,0x68,0x65,0x62,0x5e,0x5b,0x59,0x56,0x52,0x4f,0x4c,0x49,0x46,0x44,0x42,0x3e,0x3b,0x39,0x37,0x35,0x32,0x2f,0x2d,0x2a,0x27,0x25,0x23,0x21,0x1f,0x1d,0x1c,0x1a,0x18,0x16,0x14,0x12,0x10,0x0f,0x0d,0x0c,0x0b,0x0a,0x08,0x06,0x05,0x04,0x03,0x02,0x01,0x01,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x02,0x03,0x03,0x04,0x06,0x08,0x09,0x0a,0x0c,0x0d,0x0e,0x10,0x12,0x14,0x16,0x18,0x19,0x1b,0x1c,0x1f,0x21,0x23,0x25,0x28,0x2a,0x2c,0x2f,0x32,0x34,0x36,0x38,0x3b,0x3e,0x40,0x43,0x47,0x49,0x4c,0x4f,0x52,0x55,0x57,0x5a,0x5d,0x60,0x63,0x66,0x6a,0x6d,0x6f,0x71,0x74,0x77,0x7a,0x7c,0x7f,0x82,0x84,0x87,0x8a,0x8c,0x8e,0x90,0x93,0x94,0x96,0x97,0x98,0x9a,0x9a,0x9b,0x9b,0x9b,0x9b,0x9b,0x9b,0x9b,0x99,0x99,0x98,0x97,0x96,0x94,0x92,0x90,0x8e,0x8c,0x89,0x86,0x84,0x81,0x7e,0x7c,0x7a,0x77,0x73,0x71,0x6f,0x6d,0x69,0x66,0x63,0x60,0x5c,0x5a,0x57,0x54,0x50,0x4e,0x4b,0x49,0x46,0x42,0x40,0x3d,0x3a,0x38,0x36,0x34,0x31,0x2e,0x2c,0x29,0x27,0x25,0x23,0x20,0x1e,0x1c,0x1b,0x19,0x16,0x15,0x14,0x11,0x10,0x0e,0x0d,0x0c,0x0a,0x09,0x07,0x05,0x04,0x03,0x03,0x02,0x01,0x01,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x02,0x02,0x03,0x04,0x06,0x08,0x09,0x0a,0x0b,0x0c,0x0e,0x0f,0x12,0x13,0x14,0x17,0x19,0x1a,0x1c,0x1e,0x20,0x22,0x24,0x27,0x29,0x2b,0x2e,0x31,0x33,0x35,0x37,0x3a,0x3d,0x3f,0x41,0x44,0x47,0x4a,0x4c,0x50,0x52,0x54,0x57,0x5a,0x5d,0x60,0x63,0x67,0x6a,0x6d,0x6f,0x73,0x75,0x77,0x79,0x7c,0x7e,0x80,0x83,0x85,0x87,0x89,0x8b,0x8e,0x8f,0x90,0x93,0x93,0x95,0x96,0x97,0x97,0x97,0x97,0x97,0x97,0x97,0x96,0x95,0x92,0x93,0x90,0x8f,0x8d,0x8b,0x89,0x87,0x84,0x82,0x80,0x7e,0x7b,0x79,0x77,0x75,0x72,0x6e,0x6d,0x6a,0x66,0x63,0x60,0x5d,0x59,0x57,0x54,0x52,0x4f,0x4c,0x4a,0x47,0x43,0x41,0x3f,0x3c,0x39,0x37,0x35,0x33,0x30,0x2d,0x2b,0x28,0x26,0x24,0x22,0x20,0x1d,0x1c,0x1a,0x19,0x16,0x14,0x13,0x12,0x0f,0x0e,0x0c,0x0b,0x0a,0x09,0x07,0x05,0x04,0x03,0x02,0x02,0x01,0x01,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x02,0x03,0x04,0x06,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0f,0x11,0x12,0x14,0x17,0x18,0x1a,0x1b,0x1d,0x1f,0x21,0x23,0x25,0x28,0x2a,0x2c,0x2e,0x30,0x32,0x34,0x38,0x3a,0x3c,0x3f,0x42,0x44,0x47,0x4a,0x4d,0x50,0x52,0x54,0x57,0x5a,0x5d,0x5f,0x63,0x67,0x69,0x6b,0x6f,0x71,0x73,0x76,0x79,0x7a,0x7c,0x7f,0x81,0x83,0x85,0x87,0x8a,0x8b,0x8c,0x8e,0x8e,0x90,0x91,0x92,0x92,0x92,0x92,0x92,0x92,0x92,0x91,0x90,0x8e,0x8e,0x8c,0x8b,0x89,0x87,0x85,0x83,0x80,0x7e,0x7c,0x7a,0x78,0x75,0x73,0x71,0x6e,0x6a,0x69,0x66,0x62,0x5f,0x5d,0x5b,0x56,0x54,0x52,0x4f,0x4d,0x4a,0x47,0x44,0x40,0x3e,0x3c,0x39,0x36,0x34,0x32,0x30,0x2d,0x2c,0x2a,0x27,0x25,0x23,0x21,0x1f,0x1c,0x1b,0x1a,0x18,0x15,0x13,0x12,0x10,0x0f,0x0d,0x0c,0x0b,0x0a,0x09,0x07,0x05,0x04,0x03,0x02,0x01,0x01,0x01,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x02,0x02,0x03,0x05,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0f,0x11,0x11,0x13,0x16,0x17,0x18,0x1a,0x1d,0x1f,0x21,0x21,0x23,0x27,0x29,0x2b,0x2b,0x2f,0x31,0x33,0x37,0x39,0x3b,0x3e,0x41,0x43,0x46,0x47,0x4a,0x4e,0x50,0x53,0x56,0x58,0x5b,0x5d,0x60,0x64,0x66,0x69,0x6c,0x6e,0x70,0x73,0x74,0x77,0x79,0x7b,0x7e,0x7f,0x81,0x83,0x85,0x86,0x88,0x88,0x8a,0x8b,0x8b,0x8c,0x8c,0x8c,0x8c,0x8c,0x8c,0x8c,0x8b,0x8a,0x89,0x88,0x88,0x86,0x84,0x83,0x80,0x7f,0x7d,0x7b,0x79,0x77,0x73,0x72,0x70,0x6e,0x6b,0x68,0x66,0x63,0x5f,0x5d,0x5b,0x58,0x54,0x52,0x50,0x4d,0x49,0x47,0x46,0x43,0x3f,0x3d,0x3b,0x38,0x35,0x33,0x31,0x2f,0x2b,0x2b,0x29,0x26,0x23,0x22,0x20,0x1e,0x1c,0x1a,0x18,0x17,0x15,0x13,0x11,0x0f,0x0e,0x0c,0x0b,0x0a,0x09,0x08,0x06,0x04,0x03,0x02,0x02,0x01,0x01,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x02,0x02,0x03,0x05,0x08,0x09,0x0a,0x0b,0x0b,0x0d,0x10,0x11,0x12,0x15,0x17,0x17,0x19,0x1b,0x1d,0x1f,0x20,0x23,0x25,0x27,0x29,0x2a,0x2e,0x30,0x32,0x35,0x38,0x3a,0x3d,0x40,0x42,0x44,0x46,0x49,0x4c,0x4e,0x51,0x54,0x56,0x59,0x5c,0x5f,0x61,0x63,0x66,0x69,0x6b,0x6d,0x70,0x72,0x74,0x75,0x77,0x7a,0x7b,0x7d,0x7f,0x81,0x82,0x83,0x84,0x85,0x87,0x87,0x88,0x88,0x88,0x88,0x88,0x88,0x88,0x86,0x86,0x84,0x84,0x83,0x82,0x80,0x7f,0x7c,0x7b,0x79,0x77,0x75,0x74,0x71,0x6f,0x6d,0x6b,0x68,0x65,0x63,0x60,0x5d,0x5b,0x58,0x55,0x52,0x50,0x4e,0x4b,0x48,0x46,0x44,0x42,0x3f,0x3c,0x3a,0x37,0x34,0x32,0x30,0x2e,0x2a,0x29,0x27,0x25,0x23,0x20,0x1f,0x1c,0x1a,0x19,0x17,0x17,0x13,0x12,0x11,0x10,0x0c,0x0b,0x0b,0x0a,0x09,0x08,0x05,0x03,0x02,0x02,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x02,0x04,0x06,0x06,0x07,0x08,0x09,0x0a,0x0c,0x0f,0x10,0x11,0x13,0x15,0x16,0x17,0x1a,0x1c,0x1e,0x1f,0x22,0x23,0x25,0x27,0x29,0x2c,0x2e,0x30,0x33,0x35,0x38,0x3b,0x3e,0x40,0x42,0x43,0x46,0x4a,0x4c,0x4f,0x52,0x53,0x56,0x58,0x5c,0x5f,0x61,0x63,0x65,0x67,0x69,0x6b,0x6f,0x70,0x72,0x73,0x76,0x78,0x79,0x7a,0x7c,0x7d,0x7e,0x7f,0x80,0x82,0x82,0x83,0x83,0x83,0x83,0x83,0x83,0x83,0x81,0x81,0x80,0x7f,0x7e,0x7d,0x7c,0x7a,0x79,0x78,0x75,0x73,0x72,0x70,0x6e,0x6b,0x69,0x67,0x64,0x62,0x61,0x5f,0x5b,0x58,0x56,0x53,0x50,0x4e,0x4c,0x49,0x45,0x43,0x41,0x3f,0x3d,0x3a,0x38,0x34,0x32,0x30,0x2e,0x2c,0x29,0x27,0x25,0x23,0x23,0x1f,0x1d,0x1b,0x19,0x17,0x16,0x15,0x13,0x12,0x10,0x0e,0x0c,0x0a,0x09,0x08,0x07,0x06,0x05,0x03,0x02,0x01,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x02,0x03,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0d,0x0f,0x11,0x13,0x14,0x15,0x17,0x18,0x1b,0x1d,0x1e,0x21,0x22,0x24,0x26,0x29,0x2b,0x2d,0x2e,0x31,0x34,0x35,0x38,0x3b,0x3d,0x3f,0x41,0x44,0x47,0x49,0x4c,0x4f,0x50,0x52,0x54,0x58,0x5b,0x5d,0x5f,0x61,0x63,0x65,0x67,0x6b,0x6c,0x6e,0x6f,0x71,0x74,0x75,0x76,0x78,0x79,0x7a,0x7b,0x7c,0x7e,0x7e,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7d,0x7d,0x7c,0x7b,0x7a,0x79,0x78,0x76,0x75,0x74,0x71,0x6f,0x6e,0x6c,0x6a,0x67,0x65,0x63,0x61,0x5e,0x5d,0x5a,0x57,0x54,0x53,0x51,0x4e,0x4b,0x49,0x46,0x44,0x41,0x3f,0x3d,0x3a,0x37,0x35,0x33,0x30,0x2e,0x2c,0x2a,0x28,0x25,0x24,0x22,0x20,0x1e,0x1c,0x1a,0x18,0x17,0x15,0x14,0x11,0x11,0x0f,0x0c,0x0b,0x0a,0x09,0x08,0x07,0x06,0x04,0x02,0x02,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x02,0x03,0x05,0x06,0x07,0x08,0x08,0x09,0x0b,0x0c,0x0e,0x11,0x12,0x13,0x15,0x16,0x18,0x1a,0x1c,0x1e,0x20,0x21,0x23,0x25,0x27,0x29,0x2b,0x2e,0x30,0x32,0x34,0x37,0x39,0x3b,0x3d,0x3f,0x42,0x45,0x47,0x49,0x4c,0x4e,0x50,0x52,0x55,0x58,0x5a,0x5c,0x5f,0x61,0x62,0x65,0x67,0x69,0x6a,0x6c,0x6d,0x70,0x72,0x73,0x74,0x75,0x76,0x77,0x77,0x79,0x79,0x7a,0x7a,0x7a,0x7a,0x7a,0x7a,0x7a,0x78,0x78,0x77,0x77,0x76,0x75,0x74,0x73,0x72,0x70,0x6d,0x6c,0x6a,0x69,0x66,0x64,0x62,0x60,0x5e,0x5b,0x5a,0x57,0x54,0x52,0x50,0x4e,0x4b,0x48,0x47,0x44,0x41,0x3f,0x3d,0x3b,0x38,0x36,0x34,0x32,0x2f,0x2d,0x2b,0x29,0x26,0x24,0x23,0x21,0x1e,0x1d,0x1c,0x1a,0x17,0x16,0x15,0x13,0x12,0x10,0x0e,0x0c,0x0b,0x09,0x08,0x08,0x07,0x06,0x04,0x02,0x02,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x02,0x03,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0d,0x10,0x11,0x13,0x14,0x15,0x17,0x19,0x1b,0x1d,0x1f,0x20,0x22,0x24,0x26,0x28,0x2a,0x2c,0x2f,0x31,0x33,0x35,0x38,0x3a,0x3c,0x3e,0x40,0x43,0x45,0x47,0x49,0x4c,0x4e,0x50,0x53,0x55,0x57,0x59,0x5c,0x5e,0x60,0x62,0x64,0x66,0x67,0x69,0x6a,0x6d,0x6f,0x70,0x71,0x72,0x73,0x73,0x74,0x76,0x76,0x76,0x77,0x77,0x77,0x77,0x77,0x76,0x75,0x75,0x74,0x73,0x73,0x72,0x71,0x70,0x6f,0x6d,0x6a,0x69,0x67,0x66,0x63,0x62,0x60,0x5d,0x5b,0x59,0x57,0x54,0x52,0x50,0x4e,0x4c,0x49,0x47,0x45,0x42,0x3f,0x3e,0x3c,0x3a,0x37,0x34,0x33,0x30,0x2e,0x2c,0x2a,0x28,0x25,0x23,0x22,0x20,0x1d,0x1c,0x1b,0x18,0x17,0x15,0x14,0x13,0x11,0x0f,0x0d,0x0b,0x0a,0x09,0x08,0x07,0x06,0x05,0x03,0x02,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x02,0x03,0x05,0x06,0x07,0x08,0x08,0x09,0x0c,0x0d,0x0e,0x11,0x12,0x13,0x14,0x16,0x18,0x1a,0x1c,0x1e,0x1f,0x21,0x22,0x25,0x27,0x29,0x2b,0x2d,0x2f,0x31,0x34,0x36,0x38,0x3a,0x3d,0x3f,0x41,0x42,0x45,0x47,0x49,0x4b,0x4d,0x51,0x52,0x55,0x57,0x59,0x5b,0x5d,0x5f,0x61,0x62,0x64,0x65,0x68,0x6a,0x6b,0x6c,0x6d,0x6e,0x6e,0x6f,0x70,0x70,0x72,0x72,0x72,0x72,0x72,0x72,0x72,0x72,0x73,0x70,0x70,0x6f,0x6e,0x6e,0x6d,0x6c,0x6a,0x68,0x66,0x65,0x64,0x62,0x60,0x5f,0x5d,0x5a,0x58,0x56,0x55,0x51,0x50,0x4d,0x4b,0x49,0x47,0x44,0x42,0x41,0x3e,0x3b,0x3a,0x38,0x35,0x33,0x31,0x2f,0x2d,0x2a,0x29,0x26,0x24,0x22,0x21,0x1f,0x1d,0x1c,0x1a,0x17,0x16,0x14,0x13,0x12,0x11,0x0e,0x0c,0x0c,0x09,0x08,0x08,0x07,0x05,0x03,0x03,0x02,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x02,0x01,0x03,0x05,0x06,0x07,0x08,0x09,0x0b,0x0c,0x0e,0x0f,0x11,0x13,0x14,0x15,0x18,0x18,0x19,0x1c,0x1e,0x20,0x21,0x24,0x26,0x27,0x29,0x2c,0x2d,0x2f,0x31,0x34,0x36,0x38,0x39,0x3c,0x3e,0x40,0x42,0x44,0x46,0x48,0x4a,0x4d,0x4e,0x51,0x53,0x55,0x57,0x59,0x5b,0x5d,0x5f,0x60,0x61,0x64,0x66,0x67,0x68,0x69,0x6a,0x6a,0x6b,0x6c,0x6c,0x6e,0x6e,0x6e,0x6e,0x6e,0x6e,0x6e,0x6e,0x6d,0x6c,0x6c,0x6b,0x6a,0x6a,0x69,0x68,0x66,0x64,0x62,0x61,0x60,0x5f,0x5c,0x5b,0x59,0x56,0x54,0x52,0x51,0x4e,0x4d,0x49,0x48,0x45,0x44,0x41,0x40,0x3e,0x3b,0x39,0x37,0x35,0x33,0x30,0x2f,0x2c,0x2a,0x29,0x27,0x25,0x23,0x21,0x20,0x1e,0x1c,0x19,0x18,0x18,0x15,0x14,0x13,0x11,0x10,0x0e,0x0b,0x09,0x09,0x08,0x07,0x06,0x05,0x02,0x02,0x02,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x02,0x03,0x05,0x06,0x07,0x07,0x08,0x0a,0x0c,0x0d,0x0e,0x11,0x11,0x13,0x14,0x16,0x16,0x18,0x1b,0x1d,0x1f,0x20,0x22,0x24,0x26,0x28,0x2a,0x2c,0x2d,0x2f,0x32,0x34,0x36,0x38,0x3a,0x3c,0x3e,0x3f,0x42,0x44,0x46,0x48,0x4a,0x4c,0x4e,0x50,0x52,0x54,0x56,0x58,0x5a,0x5c,0x5d,0x5e,0x60,0x61,0x64,0x65,0x66,0x66,0x67,0x68,0x67,0x6a,0x6a,0x69,0x6a,0x6a,0x6a,0x6a,0x6a,0x6a,0x69,0x69,0x68,0x68,0x67,0x66,0x66,0x65,0x63,0x61,0x5f,0x5e,0x5d,0x5b,0x59,0x58,0x56,0x54,0x51,0x4f,0x4e,0x4c,0x4a,0x48,0x46,0x43,0x41,0x3f,0x3e,0x3b,0x39,0x38,0x36,0x34,0x31,0x2f,0x2d,0x2b,0x28,0x28,0x26,0x24,0x21,0x20,0x1f,0x1d,0x1b,0x18,0x16,0x16,0x14,0x12,0x11,0x10,0x0e,0x0d,0x0b,0x09,0x08,0x07,0x07,0x06,0x04,0x03,0x01,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x03,0x02,0x03,0x04,0x05,0x07,0x08,0x0a,0x0b,0x0b,0x0e,0x0f,0x10,0x11,0x13,0x14,0x15,0x18,0x1a,0x1b,0x1d,0x1e,0x20,0x22,0x24,0x26,0x27,0x2a,0x2b,0x2d,0x2f,0x32,0x34,0x36,0x38,0x3a,0x3c,0x3d,0x40,0x42,0x44,0x46,0x48,0x4a,0x4b,0x4c,0x4f,0x51,0x53,0x54,0x56,0x58,0x59,0x5b,0x5c,0x5d,0x60,0x61,0x62,0x62,0x63,0x64,0x63,0x66,0x66,0x65,0x66,0x66,0x66,0x66,0x66,0x66,0x65,0x65,0x64,0x64,0x63,0x62,0x62,0x61,0x5f,0x5d,0x5c,0x5b,0x59,0x57,0x55,0x53,0x52,0x51,0x4e,0x4c,0x4b,0x4a,0x47,0x46,0x44,0x41,0x3f,0x3d,0x3c,0x3a,0x37,0x36,0x34,0x31,0x2e,0x2d,0x2b,0x2a,0x28,0x26,0x25,0x22,0x1f,0x1e,0x1d,0x1b,0x1a,0x18,0x15,0x14,0x14,0x11,0x10,0x0e,0x0c,0x0b,0x0a,0x09,0x08,0x07,0x05,0x04,0x03,0x02,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x02,0x03,0x04,0x05,0x05,0x06,0x08,0x0b,0x0c,0x0d,0x0d,0x0f,0x10,0x11,0x13,0x15,0x17,0x18,0x19,0x1b,0x1c,0x1f,0x20,0x23,0x24,0x26,0x27,0x29,0x2a,0x2d,0x2f,0x32,0x34,0x36,0x38,0x3a,0x3a,0x3e,0x40,0x42,0x44,0x46,0x47,0x49,0x49,0x4c,0x4e,0x4f,0x50,0x53,0x54,0x55,0x57,0x58,0x5a,0x5c,0x5d,0x5e,0x5e,0x5f,0x60,0x60,0x61,0x62,0x62,0x62,0x62,0x62,0x62,0x62,0x62,0x61,0x61,0x60,0x60,0x5f,0x5e,0x5e,0x5d,0x5b,0x59,0x58,0x57,0x55,0x54,0x53,0x50,0x4f,0x4e,0x4c,0x49,0x49,0x47,0x44,0x43,0x42,0x3f,0x3d,0x3a,0x3a,0x38,0x35,0x34,0x32,0x2e,0x2c,0x2a,0x29,0x27,0x26,0x24,0x23,0x20,0x1d,0x1c,0x1b,0x19,0x18,0x17,0x15,0x12,0x12,0x10,0x0f,0x0d,0x0c,0x0b,0x09,0x07,0x06,0x05,0x05,0x04,0x02,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x02,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x0a,0x0b,0x0c,0x0e,0x0f,0x10,0x13,0x15,0x16,0x17,0x19,0x1a,0x1b,0x1e,0x1f,0x20,0x23,0x24,0x26,0x27,0x29,0x2a,0x2d,0x2f,0x32,0x34,0x35,0x37,0x38,0x3b,0x3d,0x3f,0x41,0x43,0x43,0x46,0x46,0x49,0x4b,0x4d,0x4e,0x4f,0x50,0x51,0x53,0x54,0x56,0x58,0x59,0x5a,0x5a,0x5b,0x5c,0x5c,0x5d,0x5e,0x5e,0x5e,0x5e,0x5e,0x5e,0x5e,0x5e,0x5d,0x5d,0x5c,0x5c,0x5b,0x5a,0x5a,0x59,0x57,0x55,0x54,0x53,0x51,0x50,0x4f,0x4e,0x4b,0x4a,0x48,0x46,0x46,0x43,0x40,0x3f,0x3f,0x3c,0x3a,0x38,0x37,0x35,0x33,0x31,0x2f,0x2c,0x2a,0x29,0x27,0x26,0x24,0x22,0x20,0x1e,0x1c,0x1b,0x1a,0x19,0x17,0x16,0x15,0x13,0x10,0x0f,0x0e,0x0c,0x0b,0x0a,0x08,0x07,0x06,0x05,0x04,0x03,0x02,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x02,0x03,0x04,0x04,0x05,0x07,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x11,0x13,0x14,0x15,0x16,0x18,0x19,0x1a,0x1b,0x1e,0x1f,0x20,0x23,0x25,0x26,0x27,0x29,0x2b,0x2d,0x2f,0x31,0x33,0x35,0x36,0x38,0x3a,0x3c,0x3e,0x40,0x41,0x42,0x44,0x45,0x48,0x4a,0x4b,0x4c,0x4d,0x4e,0x4f,0x50,0x52,0x54,0x55,0x56,0x56,0x57,0x57,0x58,0x59,0x5a,0x5a,0x5a,0x5a,0x5a,0x5a,0x5a,0x5a,0x59,0x59,0x58,0x57,0x57,0x56,0x56,0x55,0x53,0x51,0x50,0x4f,0x4e,0x4d,0x4c,0x4b,0x4a,0x48,0x45,0x44,0x42,0x41,0x3e,0x3d,0x3c,0x3a,0x37,0x36,0x35,0x33,0x31,0x2e,0x2d,0x2a,0x29,0x27,0x26,0x25,0x22,0x20,0x1f,0x1e,0x1b,0x1a,0x19,0x18,0x16,0x15,0x13,0x11,0x0f,0x0e,0x0d,0x0c,0x0b,0x0a,0x08,0x06,0x05,0x04,0x04,0x03,0x02,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x02,0x02,0x03,0x04,0x05,0x06,0x07,0x09,0x0a,0x0b,0x0c,0x0d,0x10,0x12,0x13,0x14,0x15,0x17,0x18,0x19,0x1a,0x1d,0x1e,0x1f,0x22,0x23,0x25,0x26,0x29,0x2a,0x2b,0x2d,0x30,0x31,0x33,0x34,0x36,0x38,0x3a,0x3c,0x3e,0x3f,0x40,0x41,0x43,0x44,0x46,0x49,0x4a,0x4b,0x4c,0x4d,0x4e,0x4f,0x51,0x52,0x53,0x53,0x54,0x54,0x55,0x55,0x56,0x57,0x57,0x57,0x57,0x57,0x57,0x57,0x56,0x55,0x55,0x54,0x54,0x53,0x52,0x51,0x51,0x4f,0x4e,0x4d,0x4c,0x4b,0x4a,0x48,0x46,0x44,0x43,0x41,0x40,0x3f,0x3c,0x3b,0x3a,0x38,0x35,0x34,0x33,0x31,0x2f,0x2d,0x2b,0x29,0x27,0x26,0x25,0x23,0x22,0x1f,0x1e,0x1d,0x1a,0x19,0x18,0x17,0x15,0x14,0x12,0x10,0x0e,0x0d,0x0c,0x0b,0x0a,0x09,0x07,0x06,0x05,0x04,0x03,0x02,0x02,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x02,0x03,0x03,0x04,0x06,0x08,0x08,0x09,0x0a,0x0b,0x0c,0x0f,0x11,0x12,0x13,0x14,0x16,0x17,0x18,0x19,0x1b,0x1e,0x1f,0x21,0x22,0x23,0x25,0x26,0x28,0x2a,0x2c,0x2e,0x2f,0x30,0x32,0x33,0x36,0x38,0x39,0x3b,0x3c,0x3d,0x3e,0x42,0x43,0x45,0x46,0x47,0x48,0x49,0x4a,0x4b,0x4c,0x4e,0x4f,0x4f,0x50,0x50,0x51,0x51,0x52,0x52,0x53,0x53,0x53,0x53,0x53,0x53,0x53,0x52,0x52,0x51,0x51,0x50,0x50,0x4f,0x4f,0x4d,0x4c,0x4b,0x4a,0x49,0x48,0x47,0x46,0x44,0x42,0x3f,0x3e,0x3d,0x3c,0x39,0x38,0x38,0x35,0x33,0x32,0x30,0x2f,0x2c,0x2b,0x2a,0x27,0x26,0x25,0x23,0x22,0x1f,0x1e,0x1e,0x1b,0x19,0x18,0x17,0x16,0x14,0x13,0x11,0x0f,0x0d,0x0c,0x0b,0x0a,0x09,0x08,0x07,0x05,0x04,0x03,0x03,0x02,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x02,0x03,0x04,0x05,0x05,0x07,0x08,0x09,0x0b,0x0c,0x0d,0x0f,0x11,0x11,0x14,0x15,0x16,0x17,0x18,0x18,0x1b,0x1d,0x1f,0x1f,0x22,0x22,0x25,0x27,0x27,0x29,0x2b,0x2d,0x2d,0x30,0x30,0x33,0x35,0x36,0x38,0x39,0x3a,0x3b,0x3e,0x3f,0x41,0x42,0x43,0x44,0x45,0x46,0x47,0x48,0x4a,0x4b,0x4b,0x4c,0x4d,0x4d,0x4e,0x4e,0x4f,0x4f,0x4f,0x4f,0x4f,0x4f,0x4f,0x4f,0x4e,0x4e,0x4e,0x4d,0x4d,0x4c,0x4b,0x4b,0x49,0x48,0x47,0x46,0x45,0x44,0x43,0x42,0x41,0x3f,0x3c,0x3b,0x3a,0x39,0x36,0x35,0x35,0x34,0x30,0x30,0x2d,0x2c,0x2a,0x29,0x28,0x26,0x23,0x22,0x22,0x1f,0x1f,0x1d,0x1a,0x19,0x18,0x17,0x16,0x15,0x11,0x10,0x0f,0x0e,0x0d,0x0c,0x0b,0x09,0x08,0x06,0x05,0x04,0x04,0x03,0x02,0x01,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x02,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0e,0x0e,0x10,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1a,0x1d,0x1e,0x1f,0x20,0x23,0x25,0x26,0x28,0x29,0x2a,0x2c,0x2d,0x2f,0x32,0x33,0x34,0x36,0x37,0x38,0x39,0x3a,0x3c,0x3e,0x3f,0x40,0x41,0x42,0x43,0x44,0x45,0x47,0x48,0x48,0x49,0x49,0x4a,0x4a,0x4b,0x4b,0x4c,0x4c,0x4c,0x4c,0x4c,0x4c,0x4c,0x4b,0x4b,0x4a,0x4a,0x49,0x49,0x48,0x48,0x47,0x45,0x44,0x43,0x42,0x41,0x40,0x3f,0x3e,0x3b,0x3a,0x39,0x38,0x37,0x34,0x33,0x33,0x31,0x2e,0x2d,0x2c,0x2b,0x29,0x27,0x26,0x24,0x22,0x20,0x1f,0x1e,0x1d,0x1a,0x18,0x18,0x17,0x16,0x15,0x14,0x12,0x0e,0x0e,0x0d,0x0b,0x0a,0x09,0x08,0x07,0x05,0x05,0x04,0x03,0x02,0x02,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x03,0x03,0x04,0x05,0x07,0x08,0x08,0x09,0x0a,0x0c,0x0c,0x0e,0x11,0x12,0x13,0x14,0x15,0x17,0x19,0x19,0x1b,0x1e,0x1e,0x1f,0x21,0x22,0x24,0x26,0x27,0x29,0x2a,0x2b,0x2e,0x30,0x31,0x32,0x34,0x35,0x36,0x37,0x38,0x3a,0x3c,0x3d,0x3e,0x3f,0x40,0x40,0x41,0x42,0x44,0x44,0x45,0x46,0x46,0x47,0x47,0x47,0x48,0x48,0x48,0x49,0x49,0x49,0x48,0x48,0x47,0x47,0x47,0x47,0x46,0x46,0x45,0x44,0x45,0x42,0x41,0x40,0x40,0x3f,0x3e,0x3d,0x3b,0x39,0x38,0x37,0x36,0x35,0x32,0x31,0x30,0x2e,0x2c,0x2b,0x2a,0x29,0x27,0x26,0x24,0x22,0x20,0x1f,0x1e,0x1d,0x19,0x19,0x17,0x16,0x15,0x14,0x13,0x12,0x11,0x0d,0x0c,0x0b,0x0a,0x09,0x08,0x08,0x07,0x05,0x04,0x03,0x03,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x02,0x04,0x04,0x06,0x07,0x07,0x08,0x0a,0x0b,0x0b,0x0d,0x0f,0x10,0x11,0x12,0x13,0x15,0x17,0x18,0x19,0x1c,0x1d,0x1e,0x1f,0x20,0x22,0x24,0x25,0x26,0x27,0x29,0x2b,0x2d,0x2f,0x30,0x32,0x33,0x34,0x35,0x36,0x38,0x3a,0x3a,0x3b,0x3c,0x3d,0x3d,0x3f,0x3f,0x41,0x41,0x42,0x42,0x43,0x43,0x44,0x44,0x45,0x45,0x45,0x45,0x45,0x45,0x45,0x45,0x44,0x44,0x44,0x43,0x43,0x42,0x42,0x41,0x41,0x3f,0x3f,0x3d,0x3d,0x3c,0x3b,0x3a,0x39,0x37,0x36,0x35,0x34,0x33,0x30,0x2f,0x2e,0x2c,0x2a,0x29,0x27,0x26,0x25,0x24,0x22,0x20,0x1e,0x1e,0x1d,0x1b,0x19,0x18,0x16,0x14,0x13,0x12,0x11,0x10,0x0f,0x0d,0x0b,0x0a,0x09,0x08,0x07,0x07,0x05,0x05,0x03,0x02,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x02,0x03,0x04,0x05,0x06,0x06,0x07,0x09,0x0b,0x0c,0x0d,0x0e,0x0f,0x10,0x11,0x12,0x14,0x16,0x17,0x18,0x19,0x1a,0x1b,0x1c,0x1e,0x20,0x21,0x23,0x24,0x25,0x26,0x27,0x29,0x2c,0x2d,0x2f,0x30,0x31,0x32,0x33,0x35,0x37,0x36,0x37,0x38,0x39,0x3a,0x3c,0x3d,0x3d,0x3d,0x3e,0x3e,0x3f,0x3f,0x40,0x40,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x40,0x40,0x40,0x3f,0x3f,0x3e,0x3e,0x3d,0x3d,0x3c,0x3b,0x3a,0x39,0x38,0x37,0x36,0x36,0x34,0x33,0x32,0x31,0x30,0x2c,0x2b,0x2b,0x29,0x27,0x26,0x25,0x24,0x23,0x21,0x1f,0x1d,0x1c,0x1b,0x1a,0x19,0x18,0x17,0x15,0x13,0x12,0x11,0x10,0x0f,0x0e,0x0d,0x0b,0x09,0x08,0x07,0x06,0x06,0x05,0x04,0x03,0x02,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x02,0x03,0x04,0x05,0x06,0x06,0x07,0x09,0x0b,0x0c,0x0d,0x0e,0x0f,0x10,0x11,0x13,0x15,0x16,0x17,0x18,0x19,0x1a,0x1b,0x1d,0x1f,0x20,0x21,0x22,0x23,0x24,0x25,0x27,0x29,0x2a,0x2c,0x2d,0x2e,0x2f,0x30,0x32,0x34,0x34,0x35,0x36,0x37,0x37,0x38,0x3a,0x3a,0x3b,0x3b,0x3c,0x3d,0x3d,0x3d,0x3e,0x3e,0x3e,0x3f,0x3f,0x3f,0x3f,0x3f,0x3e,0x3e,0x3e,0x3d,0x3d,0x3d,0x3c,0x3b,0x3b,0x39,0x39,0x38,0x37,0x37,0x36,0x35,0x34,0x33,0x31,0x30,0x2f,0x2e,0x2d,0x2a,0x29,0x29,0x27,0x25,0x24,0x23,0x22,0x21,0x20,0x1e,0x1c,0x1b,0x1a,0x19,0x18,0x17,0x16,0x14,0x12,0x11,0x10,0x0f,0x0e,0x0d,0x0c,0x0a,0x08,0x07,0x06,0x06,0x05,0x04,0x03,0x02,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x02,0x03,0x04,0x04,0x05,0x06,0x07,0x08,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,0x10,0x12,0x14,0x15,0x16,0x17,0x18,0x19,0x1a,0x1c,0x1e,0x1f,0x20,0x21,0x22,0x23,0x24,0x26,0x28,0x29,0x2a,0x2b,0x2c,0x2d,0x2e,0x30,0x32,0x32,0x33,0x34,0x35,0x35,0x36,0x37,0x38,0x39,0x39,0x3a,0x3a,0x3a,0x3b,0x3b,0x3c,0x3c,0x3c,0x3c,0x3c,0x3c,0x3c,0x3c,0x3b,0x3b,0x3b,0x3a,0x3a,0x3a,0x39,0x39,0x38,0x37,0x36,0x35,0x35,0x34,0x33,0x32,0x31,0x2f,0x2e,0x2d,0x2c,0x2b,0x2a,0x29,0x27,0x25,0x24,0x23,0x22,0x21,0x20,0x1f,0x1d,0x1b,0x1a,0x19,0x18,0x17,0x16,0x15,0x13,0x11,0x10,0x0f,0x0e,0x0d,0x0c,0x0b,0x09,0x07,0x07,0x06,0x05,0x04,0x03,0x02,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x02,0x03,0x04,0x04,0x05,0x06,0x07,0x08,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,0x11,0x13,0x14,0x15,0x16,0x17,0x18,0x18,0x1a,0x1c,0x1d,0x1e,0x1f,0x20,0x21,0x22,0x24,0x25,0x26,0x28,0x28,0x29,0x2a,0x2b,0x2c,0x2e,0x2f,0x30,0x31,0x31,0x33,0x33,0x34,0x35,0x36,0x37,0x36,0x37,0x37,0x38,0x39,0x3a,0x3a,0x39,0x39,0x39,0x39,0x39,0x3a,0x39,0x39,0x37,0x37,0x37,0x36,0x37,0x36,0x35,0x34,0x34,0x33,0x31,0x31,0x30,0x2f,0x2d,0x2c,0x2b,0x2a,0x29,0x28,0x28,0x26,0x24,0x23,0x22,0x21,0x20,0x1f,0x1e,0x1d,0x1b,0x19,0x18,0x18,0x17,0x16,0x15,0x14,0x12,0x10,0x0f,0x0e,0x0d,0x0c,0x0b,0x0a,0x08,0x07,0x06,0x05,0x04,0x04,0x03,0x02,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x02,0x02,0x03,0x03,0x04,0x05,0x06,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x10,0x12,0x13,0x13,0x14,0x15,0x16,0x17,0x19,0x1b,0x1c,0x1d,0x1c,0x1d,0x1f,0x20,0x22,0x23,0x24,0x25,0x26,0x27,0x27,0x29,0x2a,0x2b,0x2c,0x2c,0x2d,0x2e,0x2f,0x30,0x32,0x32,0x33,0x33,0x33,0x33,0x34,0x35,0x36,0x36,0x36,0x35,0x35,0x35,0x35,0x35,0x36,0x36,0x36,0x34,0x34,0x33,0x33,0x33,0x33,0x32,0x31,0x30,0x2f,0x2e,0x2d,0x2c,0x2c,0x2a,0x29,0x28,0x27,0x27,0x26,0x25,0x24,0x22,0x21,0x20,0x1f,0x1d,0x1c,0x1d,0x1c,0x19,0x18,0x17,0x16,0x15,0x14,0x13,0x13,0x11,0x0f,0x0e,0x0d,0x0c,0x0b,0x09,0x08,0x07,0x06,0x05,0x04,0x03,0x03,0x02,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x02,0x02,0x02,0x03,0x05,0x05,0x06,0x08,0x08,0x0a,0x0b,0x0c,0x0d,0x0d,0x0f,0x10,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1a,0x1b,0x1c,0x1d,0x1f,0x20,0x21,0x22,0x23,0x24,0x25,0x25,0x27,0x29,0x28,0x2a,0x2b,0x2b,0x2c,0x2c,0x2e,0x2f,0x30,0x30,0x30,0x31,0x31,0x32,0x32,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x32,0x32,0x31,0x31,0x30,0x30,0x30,0x2e,0x2d,0x2c,0x2c,0x2b,0x2b,0x2a,0x29,0x28,0x26,0x25,0x25,0x24,0x23,0x22,0x20,0x1f,0x1e,0x1d,0x1c,0x1b,0x1a,0x18,0x18,0x17,0x16,0x15,0x14,0x13,0x11,0x10,0x0e,0x0d,0x0d,0x0c,0x0b,0x09,0x08,0x08,0x05,0x05,0x04,0x03,0x02,0x02,0x02,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x02,0x03,0x05,0x05,0x07,0x07,0x08,0x09,0x0a,0x0b,0x0b,0x0c,0x0e,0x10,0x11,0x12,0x13,0x14,0x15,0x15,0x17,0x19,0x1a,0x1b,0x1b,0x1d,0x1f,0x1f,0x20,0x21,0x22,0x23,0x23,0x24,0x27,0x26,0x27,0x29,0x29,0x2a,0x2a,0x2b,0x2b,0x2d,0x2d,0x2d,0x2e,0x2e,0x2f,0x2f,0x2f,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x2f,0x2f,0x2f,0x2f,0x2e,0x2e,0x2d,0x2d,0x2d,0x2b,0x2b,0x2a,0x2a,0x29,0x28,0x27,0x27,0x26,0x24,0x23,0x23,0x22,0x21,0x20,0x1e,0x1d,0x1c,0x1b,0x1b,0x1a,0x19,0x17,0x16,0x15,0x14,0x13,0x12,0x11,0x0f,0x0e,0x0c,0x0b,0x0b,0x0a,0x09,0x07,0x07,0x06,0x05,0x05,0x03,0x02,0x01,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x02,0x02,0x04,0x05,0x05,0x06,0x07,0x07,0x08,0x09,0x0a,0x0b,0x0d,0x0e,0x0f,0x10,0x11,0x11,0x13,0x15,0x16,0x18,0x17,0x18,0x19,0x1a,0x1c,0x1d,0x1e,0x1f,0x20,0x20,0x21,0x21,0x23,0x25,0x25,0x27,0x27,0x28,0x27,0x29,0x29,0x2b,0x2b,0x2a,0x2c,0x2b,0x2d,0x2c,0x2c,0x2d,0x2d,0x2e,0x2d,0x2d,0x2d,0x2e,0x2d,0x2c,0x2c,0x2c,0x2d,0x2b,0x2b,0x2a,0x2b,0x2b,0x29,0x29,0x27,0x28,0x27,0x25,0x23,0x25,0x23,0x22,0x21,0x20,0x20,0x1f,0x1e,0x1c,0x1b,0x1a,0x19,0x18,0x17,0x18,0x17,0x14,0x12,0x11,0x11,0x10,0x0f,0x0e,0x0d,0x0b,0x0a,0x09,0x08,0x07,0x07,0x06,0x05,0x05,0x03,0x02,0x02,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x02,0x02,0x03,0x04,0x05,0x06,0x07,0x07,0x09,0x0a,0x0a,0x0b,0x0d,0x0d,0x0e,0x0f,0x10,0x12,0x14,0x14,0x15,0x16,0x17,0x17,0x19,0x1a,0x1b,0x1c,0x1c,0x1d,0x1e,0x1f,0x20,0x21,0x22,0x22,0x24,0x24,0x25,0x25,0x26,0x25,0x28,0x28,0x27,0x29,0x28,0x2a,0x29,0x29,0x29,0x29,0x2b,0x2a,0x2a,0x2a,0x2b,0x29,0x29,0x29,0x29,0x2a,0x28,0x28,0x27,0x28,0x28,0x26,0x26,0x25,0x25,0x24,0x23,0x22,0x22,0x20,0x1f,0x1f,0x1e,0x1d,0x1c,0x1c,0x1a,0x19,0x18,0x17,0x17,0x16,0x14,0x14,0x13,0x12,0x10,0x0f,0x0e,0x0d,0x0d,0x0b,0x0a,0x09,0x08,0x07,0x07,0x06,0x05,0x04,0x03,0x02,0x02,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x03,0x03,0x04,0x05,0x05,0x06,0x06,0x08,0x09,0x09,0x0a,0x0c,0x0c,0x0d,0x0e,0x10,0x11,0x11,0x12,0x14,0x14,0x15,0x16,0x17,0x18,0x1a,0x1a,0x1b,0x1c,0x1c,0x1d,0x1e,0x1e,0x1f,0x20,0x21,0x22,0x22,0x23,0x23,0x25,0x25,0x25,0x26,0x26,0x27,0x27,0x27,0x27,0x27,0x27,0x28,0x28,0x28,0x28,0x28,0x27,0x27,0x27,0x27,0x27,0x27,0x26,0x26,0x25,0x24,0x24,0x23,0x23,0x22,0x22,0x21,0x20,0x1f,0x1e,0x1e,0x1d,0x1c,0x1c,0x1b,0x1a,0x19,0x17,0x17,0x16,0x15,0x14,0x14,0x12,0x11,0x10,0x0f,0x0e,0x0d,0x0c,0x0c,0x0a,0x09,0x08,0x07,0x06,0x06,0x05,0x04,0x03,0x02,0x02,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x02,0x03,0x04,0x05,0x05,0x06,0x07,0x08,0x08,0x09,0x0b,0x0b,0x0c,0x0d,0x0e,0x0f,0x10,0x12,0x13,0x13,0x14,0x15,0x16,0x17,0x17,0x18,0x1a,0x1a,0x1b,0x1c,0x1c,0x1e,0x1e,0x1f,0x1f,0x20,0x20,0x21,0x21,0x23,0x23,0x23,0x24,0x24,0x25,0x25,0x25,0x25,0x25,0x26,0x26,0x26,0x26,0x26,0x26,0x26,0x25,0x25,0x25,0x25,0x25,0x24,0x24,0x23,0x22,0x22,0x21,0x21,0x20,0x20,0x1f,0x1f,0x1d,0x1d,0x1c,0x1c,0x1b,0x1a,0x1a,0x18,0x17,0x16,0x15,0x15,0x14,0x13,0x13,0x12,0x10,0x0f,0x0e,0x0d,0x0c,0x0b,0x0b,0x09,0x08,0x07,0x06,0x06,0x05,0x05,0x03,0x02,0x01,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x02,0x02,0x03,0x04,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0a,0x0b,0x0c,0x0c,0x0e,0x10,0x10,0x11,0x12,0x13,0x13,0x14,0x15,0x17,0x17,0x18,0x19,0x19,0x1a,0x1b,0x1c,0x1d,0x1d,0x1e,0x1e,0x1e,0x1f,0x1f,0x20,0x21,0x21,0x21,0x22,0x22,0x22,0x22,0x23,0x24,0x23,0x23,0x23,0x23,0x23,0x23,0x23,0x23,0x22,0x22,0x22,0x22,0x22,0x21,0x21,0x20,0x20,0x1f,0x1f,0x1e,0x1e,0x1e,0x1d,0x1d,0x1b,0x1a,0x1a,0x19,0x19,0x18,0x17,0x17,0x15,0x14,0x13,0x13,0x12,0x11,0x0f,0x0f,0x0d,0x0c,0x0c,0x0b,0x0a,0x09,0x08,0x08,0x07,0x06,0x05,0x04,0x04,0x03,0x02,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x02,0x02,0x03,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x09,0x0a,0x0b,0x0b,0x0d,0x0c,0x0e,0x10,0x11,0x11,0x12,0x12,0x13,0x14,0x15,0x15,0x16,0x16,0x18,0x18,0x1a,0x1a,0x1b,0x1b,0x1c,0x1c,0x1d,0x1d,0x1e,0x1e,0x1e,0x1f,0x20,0x20,0x20,0x20,0x20,0x21,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x1f,0x1e,0x1e,0x1d,0x1d,0x1d,0x1c,0x1c,0x1b,0x1b,0x1a,0x19,0x17,0x18,0x16,0x16,0x15,0x15,0x14,0x13,0x11,0x12,0x11,0x11,0x0f,0x0d,0x0d,0x0c,0x0b,0x0b,0x0a,0x09,0x08,0x07,0x06,0x05,0x04,0x04,0x03,0x03,0x02,0x02,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x02,0x02,0x03,0x03,0x03,0x05,0x06,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0a,0x0d,0x0d,0x0e,0x0f,0x10,0x11,0x11,0x12,0x14,0x14,0x14,0x15,0x16,0x16,0x18,0x19,0x19,0x1a,0x1a,0x1a,0x1a,0x1b,0x1b,0x1c,0x1d,0x1d,0x1d,0x1e,0x1e,0x1e,0x1e,0x1e,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1e,0x1e,0x1e,0x1e,0x1e,0x1d,0x1d,0x1d,0x1c,0x1c,0x1b,0x1a,0x1a,0x1a,0x1a,0x19,0x18,0x17,0x16,0x16,0x15,0x14,0x13,0x13,0x12,0x11,0x10,0x10,0x0f,0x0e,0x0d,0x0d,0x0b,0x0b,0x0a,0x0a,0x09,0x08,0x07,0x06,0x06,0x05,0x03,0x03,0x03,0x02,0x02,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x01,0x03,0x03,0x02,0x05,0x05,0x05,0x07,0x07,0x08,0x09,0x0b,0x0b,0x0c,0x0b,0x0d,0x0d,0x0e,0x0f,0x11,0x11,0x11,0x13,0x12,0x14,0x14,0x15,0x14,0x17,0x17,0x18,0x18,0x18,0x19,0x19,0x1a,0x1a,0x1b,0x1b,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1b,0x1b,0x1a,0x1a,0x19,0x19,0x18,0x18,0x18,0x17,0x17,0x15,0x15,0x14,0x14,0x12,0x12,0x11,0x10,0x0f,0x0f,0x0e,0x0d,0x0d,0x0b,0x0c,0x0b,0x09,0x08,0x08,0x07,0x07,0x06,0x06,0x05,0x03,0x03,0x02,0x01,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x02,0x03,0x03,0x04,0x04,0x05,0x06,0x06,0x07,0x09,0x09,0x0a,0x0a,0x0c,0x0b,0x0c,0x0c,0x0e,0x10,0x10,0x10,0x11,0x11,0x12,0x12,0x14,0x15,0x15,0x16,0x16,0x16,0x17,0x17,0x18,0x18,0x19,0x19,0x19,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1b,0x1a,0x1a,0x1a,0x1a,0x1a,0x19,0x19,0x19,0x18,0x18,0x17,0x17,0x16,0x16,0x16,0x15,0x14,0x13,0x12,0x12,0x11,0x11,0x11,0x10,0x0f,0x0e,0x0c,0x0c,0x0b,0x0c,0x0a,0x0a,0x09,0x07,0x07,0x06,0x06,0x05,0x04,0x04,0x02,0x02,0x02,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x02,0x02,0x03,0x04,0x04,0x05,0x05,0x06,0x06,0x08,0x08,0x09,0x09,0x0a,0x0a,0x0b,0x0c,0x0d,0x0f,0x0f,0x0f,0x10,0x10,0x11,0x12,0x12,0x13,0x13,0x14,0x14,0x14,0x15,0x15,0x16,0x16,0x17,0x17,0x17,0x17,0x17,0x17,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x17,0x17,0x17,0x17,0x17,0x17,0x16,0x16,0x15,0x15,0x14,0x14,0x14,0x13,0x13,0x12,0x11,0x11,0x10,0x10,0x0f,0x0f,0x0e,0x0d,0x0c,0x0b,0x0a,0x0a,0x09,0x09,0x08,0x08,0x06,0x06,0x05,0x05,0x04,0x03,0x02,0x02,0x01,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x02,0x02,0x03,0x03,0x04,0x04,0x05,0x05,0x07,0x07,0x08,0x08,0x09,0x09,0x0a,0x0a,0x0b,0x0c,0x0d,0x0e,0x0e,0x0f,0x0f,0x11,0x11,0x12,0x12,0x12,0x13,0x13,0x13,0x14,0x14,0x15,0x15,0x15,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x15,0x15,0x15,0x14,0x14,0x13,0x13,0x13,0x12,0x12,0x12,0x10,0x10,0x0f,0x0f,0x0e,0x0e,0x0d,0x0c,0x0b,0x0a,0x0a,0x09,0x09,0x08,0x08,0x07,0x07,0x05,0x05,0x04,0x04,0x03,0x03,0x02,0x01,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x02,0x02,0x02,0x03,0x03,0x04,0x06,0x06,0x06,0x07,0x07,0x08,0x08,0x09,0x09,0x0b,0x0b,0x0c,0x0c,0x0d,0x0d,0x0e,0x0e,0x10,0x10,0x11,0x11,0x11,0x11,0x12,0x12,0x13,0x13,0x14,0x14,0x14,0x14,0x14,0x14,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x13,0x13,0x12,0x12,0x11,0x11,0x11,0x11,0x10,0x10,0x0e,0x0e,0x0d,0x0d,0x0c,0x0c,0x0b,0x0b,0x09,0x09,0x08,0x08,0x07,0x07,0x06,0x05,0x05,0x04,0x03,0x03,0x02,0x02,0x02,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x02,0x02,0x03,0x03,0x05,0x05,0x06,0x06,0x07,0x07,0x07,0x08,0x08,0x0a,0x0a,0x0b,0x0b,0x0c,0x0c,0x0c,0x0d,0x0e,0x0f,0x0f,0x10,0x10,0x10,0x11,0x11,0x11,0x12,0x12,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x12,0x12,0x11,0x11,0x11,0x10,0x10,0x10,0x0f,0x0f,0x0d,0x0d,0x0c,0x0c,0x0c,0x0b,0x0b,0x0a,0x0a,0x08,0x08,0x07,0x07,0x07,0x06,0x06,0x04,0x04,0x03,0x03,0x02,0x02,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x02,0x02,0x02,0x03,0x03,0x05,0x04,0x06,0x06,0x06,0x07,0x07,0x09,0x09,0x08,0x0a,0x0a,0x0b,0x0b,0x0b,0x0b,0x0c,0x0c,0x0d,0x0d,0x0d,0x0e,0x0f,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x10,0x10,0x10,0x10,0x10,0x10,0x0f,0x0f,0x0e,0x0d,0x0d,0x0d,0x0d,0x0c,0x0b,0x0b,0x0b,0x0b,0x0a,0x09,0x08,0x09,0x09,0x07,0x07,0x06,0x06,0x05,0x04,0x05,0x02,0x03,0x02,0x02,0x02,0x01,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x01,0x02,0x02,0x02,0x03,0x03,0x05,0x05,0x06,0x06,0x06,0x08,0x08,0x06,0x09,0x09,0x0a,0x0a,0x0a,0x0a,0x0b,0x0b,0x0b,0x0b,0x0c,0x0c,0x0e,0x0d,0x0e,0x0e,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x10,0x10,0x10,0x10,0x10,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0e,0x0e,0x0d,0x0d,0x0c,0x0c,0x0b,0x0b,0x0c,0x0b,0x0a,0x0a,0x0a,0x0a,0x09,0x07,0x06,0x08,0x07,0x06,0x06,0x06,0x05,0x04,0x02,0x03,0x03,0x02,0x02,0x01,0x01,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x02,0x02,0x03,0x03,0x03,0x04,0x04,0x05,0x06,0x06,0x06,0x07,0x07,0x08,0x08,0x08,0x09,0x0a,0x0a,0x09,0x09,0x0b,0x0a,0x0b,0x0b,0x0c,0x0c,0x0d,0x0d,0x0d,0x0d,0x0d,0x0d,0x0d,0x0e,0x0e,0x0e,0x0e,0x0e,0x0d,0x0d,0x0d,0x0d,0x0d,0x0d,0x0d,0x0c,0x0c,0x0b,0x0b,0x0a,0x0b,0x09,0x09,0x0b,0x0a,0x09,0x08,0x08,0x08,0x07,0x06,0x06,0x06,0x05,0x05,0x04,0x04,0x03,0x03,0x03,0x01,0x02,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x02,0x02,0x02,0x02,0x02,0x03,0x04,0x04,0x05,0x05,0x05,0x06,0x06,0x06,0x07,0x08,0x08,0x08,0x08,0x09,0x09,0x09,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0b,0x0b,0x0b,0x0b,0x0b,0x0b,0x0b,0x0b,0x0b,0x0b,0x0b,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x09,0x09,0x09,0x09,0x08,0x08,0x09,0x08,0x07,0x06,0x06,0x06,0x05,0x05,0x05,0x04,0x03,0x03,0x02,0x02,0x02,0x02,0x02,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x01,0x01,0x02,0x02,0x02,0x03,0x03,0x04,0x04,0x04,0x05,0x05,0x05,0x06,0x06,0x07,0x07,0x07,0x07,0x08,0x08,0x08,0x09,0x09,0x09,0x09,0x09,0x09,0x09,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x09,0x09,0x09,0x09,0x09,0x09,0x09,0x09,0x08,0x08,0x08,0x07,0x07,0x07,0x07,0x06,0x06,0x05,0x05,0x05,0x04,0x04,0x04,0x03,0x02,0x02,0x02,0x02,0x01,0x01,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x01,0x01,0x02,0x02,0x02,0x03,0x03,0x03,0x04,0x04,0x04,0x05,0x05,0x06,0x06,0x06,0x06,0x07,0x07,0x07,0x07,0x08,0x08,0x08,0x08,0x08,0x08,0x09,0x09,0x09,0x09,0x09,0x09,0x09,0x09,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x07,0x07,0x07,0x07,0x06,0x06,0x06,0x06,0x05,0x05,0x04,0x04,0x04,0x03,0x03,0x03,0x02,0x02,0x02,0x01,0x01,0x01,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x02,0x02,0x02,0x02,0x02,0x03,0x03,0x03,0x04,0x04,0x05,0x05,0x05,0x05,0x06,0x06,0x06,0x06,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x06,0x06,0x06,0x06,0x05,0x05,0x05,0x05,0x04,0x04,0x03,0x03,0x03,0x02,0x02,0x02,0x02,0x01,0x01,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x02,0x02,0x02,0x02,0x02,0x02,0x03,0x04,0x04,0x04,0x04,0x04,0x05,0x05,0x05,0x05,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x05,0x05,0x05,0x05,0x04,0x04,0x04,0x04,0x04,0x03,0x02,0x02,0x02,0x02,0x02,0x02,0x01,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x01,0x01,0x01,0x02,0x02,0x02,0x02,0x02,0x03,0x03,0x03,0x04,0x03,0x03,0x04,0x05,0x05,0x05,0x05,0x05,0x05,0x05,0x05,0x05,0x05,0x05,0x05,0x05,0x05,0x05,0x05,0x05,0x05,0x05,0x05,0x05,0x03,0x03,0x03,0x04,0x03,0x03,0x03,0x02,0x03,0x02,0x02,0x02,0x01,0x01,0x01,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x01,0x01,0x01,0x02,0x01,0x01,0x02,0x02,0x02,0x02,0x02,0x02,0x03,0x04,0x04,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x04,0x04,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x01,0x02,0x02,0x01,0x01,0x01,0x01,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x02,0x02,0x01,0x01,0x01,0x01,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x01,0x01,0x01,0x01,0x02,0x02,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 +}; +unsigned char data180[32400] = { +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x02,0x02,0x02,0x01,0x01,0x01,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x01,0x01,0x01,0x02,0x02,0x02,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x02,0x02,0x01,0x01,0x02,0x02,0x02,0x03,0x03,0x03,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x03,0x03,0x03,0x02,0x02,0x02,0x01,0x01,0x02,0x02,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x01,0x01,0x01,0x02,0x02,0x02,0x02,0x02,0x02,0x03,0x03,0x03,0x03,0x03,0x03,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x03,0x03,0x03,0x03,0x03,0x03,0x02,0x02,0x02,0x02,0x02,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x02,0x02,0x02,0x02,0x03,0x03,0x03,0x03,0x03,0x04,0x04,0x04,0x04,0x04,0x05,0x05,0x05,0x05,0x05,0x05,0x05,0x05,0x05,0x05,0x05,0x05,0x05,0x05,0x05,0x05,0x05,0x05,0x05,0x05,0x05,0x05,0x05,0x04,0x04,0x04,0x04,0x04,0x03,0x03,0x03,0x03,0x03,0x02,0x02,0x02,0x02,0x01,0x01,0x01,0x01,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x01,0x02,0x02,0x02,0x02,0x02,0x02,0x03,0x03,0x04,0x04,0x04,0x04,0x04,0x05,0x05,0x05,0x05,0x05,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x05,0x05,0x05,0x05,0x05,0x04,0x04,0x04,0x04,0x04,0x03,0x03,0x02,0x02,0x02,0x02,0x02,0x02,0x01,0x01,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x01,0x02,0x02,0x02,0x02,0x02,0x03,0x03,0x03,0x04,0x04,0x04,0x05,0x05,0x05,0x05,0x06,0x06,0x06,0x06,0x06,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x06,0x06,0x06,0x06,0x06,0x05,0x05,0x05,0x05,0x04,0x04,0x04,0x03,0x03,0x03,0x02,0x02,0x02,0x02,0x02,0x01,0x01,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x01,0x01,0x02,0x02,0x02,0x02,0x03,0x03,0x03,0x04,0x04,0x04,0x05,0x05,0x05,0x06,0x06,0x06,0x06,0x07,0x07,0x07,0x07,0x07,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x09,0x09,0x09,0x09,0x09,0x09,0x09,0x09,0x09,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x07,0x07,0x07,0x07,0x07,0x06,0x06,0x06,0x06,0x05,0x05,0x05,0x04,0x04,0x04,0x03,0x03,0x03,0x02,0x02,0x02,0x02,0x01,0x01,0x01,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x01,0x01,0x02,0x02,0x02,0x03,0x03,0x03,0x04,0x04,0x04,0x05,0x05,0x05,0x06,0x06,0x06,0x07,0x07,0x07,0x08,0x08,0x08,0x08,0x09,0x09,0x09,0x09,0x09,0x09,0x09,0x09,0x09,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x09,0x09,0x09,0x09,0x09,0x09,0x09,0x09,0x09,0x08,0x08,0x08,0x08,0x07,0x07,0x07,0x06,0x06,0x06,0x05,0x05,0x05,0x04,0x04,0x04,0x03,0x03,0x02,0x02,0x02,0x02,0x01,0x01,0x01,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x01,0x02,0x02,0x02,0x02,0x03,0x03,0x04,0x04,0x06,0x05,0x05,0x06,0x06,0x06,0x07,0x07,0x08,0x08,0x08,0x08,0x0a,0x09,0x09,0x09,0x0b,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0b,0x0b,0x0b,0x0b,0x0b,0x0b,0x0b,0x0b,0x0b,0x0b,0x0b,0x0b,0x0b,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0b,0x09,0x09,0x09,0x0a,0x08,0x08,0x08,0x08,0x07,0x07,0x06,0x06,0x06,0x05,0x05,0x06,0x04,0x04,0x03,0x03,0x02,0x02,0x02,0x02,0x01,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x02,0x01,0x02,0x03,0x02,0x02,0x04,0x04,0x05,0x05,0x06,0x06,0x06,0x07,0x07,0x08,0x08,0x08,0x09,0x09,0x0a,0x0a,0x0a,0x0a,0x0b,0x0b,0x0a,0x0b,0x0c,0x0b,0x0b,0x0c,0x0c,0x0c,0x0c,0x0d,0x0d,0x0c,0x0c,0x0d,0x0d,0x0d,0x0d,0x0d,0x0c,0x0c,0x0d,0x0d,0x0c,0x0c,0x0c,0x0c,0x0b,0x0b,0x0c,0x0a,0x0a,0x0b,0x0b,0x0a,0x0a,0x0a,0x0a,0x09,0x09,0x08,0x08,0x08,0x07,0x07,0x06,0x06,0x06,0x05,0x05,0x04,0x04,0x02,0x02,0x03,0x02,0x01,0x01,0x01,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x02,0x02,0x03,0x02,0x03,0x04,0x04,0x05,0x05,0x06,0x06,0x07,0x07,0x06,0x08,0x08,0x09,0x09,0x09,0x0a,0x0a,0x0b,0x0b,0x0a,0x0a,0x0c,0x0b,0x0c,0x0d,0x0c,0x0d,0x0d,0x0e,0x0e,0x0e,0x0e,0x0e,0x0e,0x0e,0x0e,0x0f,0x0f,0x0f,0x0f,0x0f,0x0e,0x0e,0x0e,0x0e,0x0e,0x0e,0x0e,0x0e,0x0d,0x0d,0x0c,0x0c,0x0c,0x0b,0x0c,0x0a,0x0a,0x0b,0x0b,0x0a,0x0a,0x09,0x09,0x09,0x08,0x08,0x06,0x07,0x07,0x06,0x06,0x05,0x05,0x04,0x04,0x03,0x02,0x03,0x02,0x02,0x01,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x01,0x02,0x02,0x03,0x03,0x04,0x04,0x05,0x05,0x06,0x06,0x06,0x07,0x08,0x08,0x08,0x09,0x09,0x0a,0x0a,0x0a,0x0b,0x0b,0x0c,0x0c,0x0c,0x0c,0x0d,0x0d,0x0e,0x0e,0x0e,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0e,0x0e,0x0e,0x0d,0x0d,0x0c,0x0c,0x0c,0x0c,0x0b,0x0b,0x0a,0x0a,0x0a,0x09,0x09,0x08,0x08,0x08,0x07,0x06,0x06,0x06,0x05,0x05,0x04,0x04,0x03,0x02,0x02,0x02,0x01,0x01,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x02,0x02,0x02,0x03,0x04,0x04,0x05,0x05,0x06,0x06,0x06,0x07,0x07,0x08,0x09,0x09,0x0a,0x0a,0x0a,0x0b,0x0b,0x0b,0x0c,0x0d,0x0d,0x0e,0x0e,0x0e,0x0f,0x0f,0x10,0x10,0x10,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x10,0x10,0x10,0x0f,0x0f,0x0e,0x0e,0x0e,0x0d,0x0d,0x0c,0x0b,0x0b,0x0b,0x0a,0x0a,0x0a,0x09,0x09,0x08,0x07,0x07,0x06,0x06,0x06,0x05,0x05,0x04,0x03,0x03,0x02,0x02,0x02,0x01,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x01,0x02,0x02,0x03,0x03,0x04,0x05,0x05,0x06,0x06,0x07,0x07,0x07,0x08,0x08,0x09,0x0a,0x0a,0x0b,0x0b,0x0c,0x0c,0x0c,0x0d,0x0e,0x0e,0x0f,0x0f,0x10,0x10,0x10,0x11,0x11,0x11,0x11,0x12,0x12,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x12,0x12,0x11,0x11,0x11,0x11,0x10,0x10,0x10,0x0f,0x0f,0x0e,0x0d,0x0d,0x0c,0x0c,0x0c,0x0b,0x0b,0x0a,0x0a,0x09,0x08,0x08,0x07,0x07,0x07,0x06,0x06,0x05,0x04,0x04,0x03,0x03,0x02,0x02,0x01,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x02,0x02,0x02,0x03,0x03,0x04,0x05,0x06,0x06,0x06,0x07,0x07,0x08,0x08,0x09,0x09,0x0a,0x0b,0x0b,0x0c,0x0c,0x0d,0x0d,0x0e,0x0e,0x0f,0x10,0x10,0x11,0x11,0x11,0x11,0x12,0x12,0x13,0x13,0x13,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x13,0x13,0x13,0x12,0x12,0x11,0x11,0x11,0x11,0x10,0x10,0x0f,0x0e,0x0e,0x0d,0x0d,0x0c,0x0c,0x0b,0x0b,0x0a,0x09,0x09,0x08,0x08,0x07,0x07,0x06,0x06,0x05,0x05,0x04,0x03,0x03,0x02,0x02,0x02,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x02,0x02,0x03,0x03,0x04,0x04,0x05,0x05,0x06,0x07,0x07,0x08,0x08,0x09,0x09,0x0a,0x0a,0x0b,0x0b,0x0d,0x0d,0x0e,0x0e,0x0f,0x0f,0x10,0x11,0x11,0x12,0x12,0x12,0x13,0x13,0x13,0x14,0x14,0x14,0x15,0x15,0x15,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x15,0x15,0x15,0x14,0x14,0x14,0x13,0x13,0x13,0x12,0x12,0x12,0x11,0x10,0x10,0x0f,0x0f,0x0e,0x0e,0x0d,0x0d,0x0b,0x0b,0x0a,0x0a,0x09,0x09,0x08,0x08,0x07,0x07,0x06,0x05,0x05,0x04,0x04,0x03,0x03,0x02,0x02,0x01,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x02,0x02,0x03,0x04,0x04,0x05,0x05,0x06,0x06,0x07,0x08,0x08,0x09,0x09,0x0a,0x0b,0x0b,0x0c,0x0d,0x0e,0x0f,0x0f,0x10,0x10,0x11,0x11,0x11,0x12,0x13,0x13,0x14,0x14,0x15,0x15,0x15,0x16,0x16,0x16,0x17,0x17,0x17,0x18,0x18,0x18,0x18,0x17,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x17,0x17,0x17,0x16,0x16,0x16,0x15,0x15,0x15,0x14,0x14,0x13,0x13,0x12,0x11,0x11,0x11,0x10,0x10,0x0f,0x0e,0x0e,0x0d,0x0c,0x0b,0x0b,0x0a,0x09,0x09,0x08,0x08,0x07,0x06,0x06,0x05,0x05,0x04,0x04,0x02,0x02,0x02,0x01,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x02,0x03,0x03,0x05,0x04,0x05,0x06,0x06,0x07,0x08,0x08,0x09,0x09,0x0a,0x0b,0x0b,0x0d,0x0c,0x0d,0x0e,0x10,0x11,0x10,0x12,0x11,0x13,0x12,0x13,0x14,0x14,0x15,0x15,0x16,0x17,0x16,0x17,0x17,0x18,0x18,0x18,0x19,0x19,0x19,0x19,0x19,0x19,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x18,0x18,0x18,0x17,0x17,0x16,0x17,0x16,0x15,0x15,0x14,0x13,0x13,0x12,0x13,0x11,0x12,0x10,0x11,0x10,0x0e,0x0d,0x0c,0x0d,0x0b,0x0b,0x0a,0x09,0x09,0x08,0x07,0x07,0x06,0x06,0x05,0x04,0x05,0x03,0x02,0x02,0x01,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x02,0x01,0x03,0x02,0x03,0x04,0x05,0x06,0x07,0x06,0x08,0x07,0x0a,0x0a,0x0b,0x0a,0x0c,0x0d,0x0c,0x0d,0x0e,0x0f,0x11,0x10,0x12,0x12,0x13,0x13,0x13,0x14,0x15,0x16,0x16,0x17,0x17,0x18,0x17,0x18,0x19,0x19,0x1a,0x1a,0x1a,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1a,0x1a,0x1a,0x19,0x19,0x18,0x17,0x18,0x17,0x17,0x16,0x15,0x15,0x14,0x13,0x13,0x13,0x12,0x11,0x10,0x10,0x0f,0x0e,0x0d,0x0c,0x0d,0x0c,0x0a,0x0b,0x0a,0x09,0x07,0x08,0x06,0x07,0x06,0x05,0x04,0x04,0x02,0x03,0x01,0x02,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x02,0x02,0x03,0x03,0x04,0x05,0x06,0x05,0x07,0x08,0x08,0x09,0x09,0x0b,0x0b,0x0b,0x0c,0x0c,0x0d,0x0e,0x0f,0x10,0x11,0x11,0x12,0x13,0x14,0x13,0x15,0x15,0x16,0x16,0x17,0x18,0x18,0x19,0x19,0x19,0x1a,0x1a,0x1b,0x1b,0x1b,0x1c,0x1c,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1c,0x1c,0x1b,0x1b,0x1b,0x1a,0x1a,0x19,0x19,0x19,0x18,0x18,0x17,0x16,0x16,0x15,0x15,0x13,0x14,0x12,0x12,0x10,0x11,0x10,0x0f,0x0e,0x0d,0x0c,0x0c,0x0b,0x0b,0x0a,0x09,0x09,0x08,0x08,0x07,0x06,0x06,0x05,0x04,0x03,0x03,0x02,0x02,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x02,0x02,0x03,0x03,0x04,0x05,0x06,0x06,0x07,0x08,0x08,0x09,0x0a,0x0a,0x0c,0x0c,0x0c,0x0e,0x0e,0x0f,0x10,0x11,0x11,0x13,0x12,0x14,0x14,0x15,0x15,0x16,0x17,0x17,0x19,0x19,0x19,0x1a,0x1a,0x1b,0x1b,0x1b,0x1c,0x1c,0x1e,0x1e,0x1d,0x1e,0x1e,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x20,0x1f,0x1f,0x1f,0x1f,0x1e,0x1e,0x1d,0x1e,0x1d,0x1c,0x1c,0x1b,0x1b,0x1b,0x1a,0x1a,0x19,0x18,0x18,0x17,0x17,0x16,0x15,0x15,0x14,0x14,0x12,0x12,0x11,0x11,0x10,0x0f,0x0e,0x0e,0x0c,0x0c,0x0b,0x0a,0x0a,0x09,0x08,0x08,0x06,0x06,0x05,0x05,0x04,0x03,0x03,0x02,0x02,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x02,0x02,0x03,0x03,0x04,0x05,0x05,0x07,0x07,0x08,0x09,0x09,0x0a,0x0b,0x0b,0x0c,0x0e,0x0e,0x0f,0x10,0x11,0x11,0x12,0x13,0x13,0x15,0x16,0x16,0x17,0x17,0x18,0x19,0x19,0x1a,0x1b,0x1b,0x1c,0x1c,0x1d,0x1d,0x1e,0x1e,0x1e,0x1f,0x1f,0x20,0x20,0x21,0x21,0x21,0x21,0x21,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x21,0x21,0x21,0x21,0x21,0x21,0x20,0x20,0x1f,0x1f,0x1e,0x1e,0x1e,0x1d,0x1d,0x1c,0x1c,0x1b,0x1a,0x1a,0x19,0x19,0x18,0x17,0x17,0x16,0x16,0x14,0x13,0x13,0x12,0x11,0x11,0x10,0x0e,0x0e,0x0e,0x0c,0x0b,0x0b,0x0a,0x09,0x09,0x07,0x07,0x07,0x05,0x05,0x04,0x03,0x03,0x02,0x02,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x02,0x02,0x03,0x04,0x04,0x05,0x06,0x06,0x08,0x08,0x09,0x0a,0x0a,0x0b,0x0c,0x0c,0x0d,0x0f,0x10,0x11,0x11,0x12,0x13,0x13,0x14,0x16,0x16,0x17,0x17,0x18,0x19,0x19,0x1a,0x1a,0x1c,0x1c,0x1d,0x1d,0x1e,0x1e,0x1f,0x1f,0x20,0x20,0x21,0x21,0x22,0x22,0x22,0x23,0x23,0x23,0x23,0x23,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x23,0x23,0x23,0x23,0x23,0x22,0x22,0x22,0x21,0x21,0x20,0x20,0x1f,0x1f,0x1e,0x1e,0x1d,0x1d,0x1c,0x1b,0x1a,0x1a,0x19,0x19,0x18,0x17,0x17,0x16,0x15,0x14,0x13,0x13,0x12,0x11,0x11,0x10,0x0e,0x0d,0x0c,0x0c,0x0b,0x0a,0x0a,0x08,0x08,0x08,0x06,0x06,0x05,0x04,0x04,0x03,0x02,0x02,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x02,0x02,0x03,0x04,0x05,0x05,0x06,0x06,0x08,0x08,0x08,0x0a,0x0b,0x0b,0x0c,0x0d,0x0e,0x0f,0x0f,0x11,0x12,0x13,0x13,0x14,0x15,0x15,0x17,0x17,0x17,0x19,0x1a,0x1a,0x1b,0x1c,0x1c,0x1d,0x1e,0x1e,0x1f,0x1f,0x20,0x20,0x21,0x21,0x22,0x23,0x23,0x23,0x24,0x24,0x25,0x25,0x25,0x25,0x25,0x25,0x26,0x26,0x26,0x26,0x26,0x26,0x26,0x25,0x25,0x25,0x25,0x25,0x25,0x24,0x24,0x23,0x23,0x22,0x22,0x21,0x21,0x20,0x20,0x1f,0x1f,0x1e,0x1d,0x1d,0x1c,0x1c,0x1b,0x1a,0x1a,0x19,0x17,0x17,0x16,0x15,0x15,0x14,0x13,0x13,0x12,0x11,0x0f,0x0f,0x0e,0x0d,0x0c,0x0b,0x0b,0x0a,0x08,0x08,0x07,0x06,0x06,0x05,0x05,0x04,0x02,0x02,0x01,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x02,0x03,0x03,0x04,0x05,0x05,0x06,0x06,0x07,0x09,0x09,0x09,0x0b,0x0c,0x0c,0x0d,0x0e,0x0f,0x11,0x11,0x11,0x13,0x14,0x14,0x15,0x16,0x17,0x18,0x19,0x1a,0x1a,0x1b,0x1c,0x1c,0x1d,0x1e,0x1f,0x1f,0x20,0x21,0x21,0x22,0x22,0x23,0x23,0x24,0x25,0x25,0x25,0x26,0x26,0x27,0x27,0x27,0x27,0x27,0x27,0x27,0x28,0x28,0x28,0x28,0x28,0x27,0x27,0x27,0x27,0x27,0x27,0x27,0x26,0x26,0x25,0x25,0x24,0x24,0x23,0x23,0x22,0x22,0x21,0x21,0x20,0x1f,0x1e,0x1e,0x1d,0x1c,0x1c,0x1b,0x1a,0x1a,0x18,0x17,0x17,0x16,0x15,0x14,0x14,0x13,0x11,0x11,0x10,0x0f,0x0e,0x0d,0x0c,0x0c,0x0b,0x09,0x09,0x08,0x07,0x06,0x06,0x05,0x05,0x03,0x03,0x02,0x02,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x02,0x02,0x03,0x04,0x05,0x05,0x06,0x07,0x07,0x08,0x0a,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,0x10,0x10,0x11,0x13,0x14,0x14,0x15,0x16,0x17,0x18,0x18,0x1a,0x1b,0x1b,0x1c,0x1d,0x1e,0x1e,0x1f,0x1f,0x21,0x22,0x22,0x22,0x24,0x23,0x25,0x25,0x26,0x25,0x26,0x28,0x28,0x27,0x29,0x28,0x2a,0x2a,0x2a,0x2a,0x29,0x29,0x2b,0x2b,0x2b,0x2b,0x2b,0x29,0x29,0x2a,0x2a,0x2a,0x2a,0x28,0x29,0x27,0x28,0x28,0x27,0x25,0x26,0x25,0x25,0x23,0x24,0x22,0x22,0x22,0x20,0x1f,0x1f,0x1e,0x1e,0x1d,0x1c,0x1b,0x1a,0x19,0x18,0x18,0x17,0x16,0x15,0x13,0x14,0x13,0x11,0x10,0x10,0x0f,0x0e,0x0d,0x0c,0x0b,0x0a,0x09,0x08,0x07,0x07,0x06,0x05,0x05,0x04,0x03,0x02,0x02,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x02,0x02,0x03,0x04,0x05,0x05,0x07,0x07,0x07,0x08,0x09,0x0a,0x0a,0x0d,0x0d,0x0e,0x10,0x11,0x12,0x11,0x12,0x15,0x16,0x16,0x17,0x17,0x18,0x1a,0x1a,0x1b,0x1c,0x1d,0x1e,0x1e,0x1f,0x20,0x21,0x22,0x21,0x24,0x24,0x25,0x26,0x26,0x27,0x27,0x28,0x28,0x29,0x2a,0x2a,0x2a,0x2b,0x2b,0x2c,0x2c,0x2c,0x2c,0x2c,0x2c,0x2d,0x2d,0x2d,0x2d,0x2d,0x2c,0x2c,0x2c,0x2c,0x2c,0x2c,0x2b,0x2b,0x2a,0x2a,0x2a,0x29,0x28,0x28,0x27,0x27,0x26,0x26,0x24,0x24,0x24,0x22,0x22,0x21,0x20,0x1f,0x1e,0x1e,0x1d,0x1c,0x1b,0x1a,0x1a,0x18,0x17,0x17,0x16,0x16,0x13,0x12,0x11,0x12,0x11,0x10,0x0e,0x0d,0x0d,0x0a,0x0a,0x09,0x08,0x07,0x07,0x07,0x05,0x05,0x04,0x03,0x02,0x02,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x02,0x03,0x03,0x04,0x05,0x05,0x07,0x07,0x07,0x09,0x0a,0x0b,0x0c,0x0c,0x0e,0x0f,0x10,0x11,0x12,0x13,0x13,0x14,0x15,0x17,0x18,0x19,0x19,0x1a,0x1a,0x1c,0x1d,0x1e,0x1f,0x20,0x20,0x21,0x22,0x23,0x24,0x24,0x26,0x26,0x27,0x28,0x28,0x29,0x29,0x2a,0x2a,0x2b,0x2c,0x2c,0x2d,0x2d,0x2e,0x2e,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x30,0x30,0x30,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2e,0x2e,0x2d,0x2d,0x2c,0x2c,0x2b,0x2a,0x2a,0x29,0x29,0x28,0x28,0x26,0x26,0x26,0x24,0x24,0x23,0x22,0x21,0x20,0x20,0x1f,0x1e,0x1d,0x1c,0x1a,0x1a,0x19,0x19,0x18,0x17,0x14,0x14,0x13,0x13,0x12,0x11,0x10,0x0f,0x0e,0x0c,0x0c,0x0b,0x0a,0x09,0x07,0x07,0x06,0x05,0x05,0x03,0x03,0x03,0x02,0x01,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x02,0x02,0x03,0x03,0x05,0x05,0x06,0x08,0x07,0x09,0x0a,0x0b,0x0c,0x0d,0x0c,0x0e,0x0f,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x17,0x18,0x19,0x1b,0x1c,0x1c,0x1d,0x1f,0x20,0x20,0x21,0x22,0x23,0x24,0x24,0x25,0x27,0x28,0x28,0x29,0x2a,0x2a,0x2b,0x2b,0x2c,0x2c,0x2e,0x2e,0x2f,0x2f,0x30,0x30,0x31,0x31,0x31,0x31,0x31,0x31,0x32,0x32,0x32,0x32,0x32,0x31,0x31,0x31,0x31,0x31,0x31,0x30,0x30,0x2f,0x2f,0x2e,0x2e,0x2c,0x2c,0x2b,0x2b,0x2a,0x2a,0x29,0x28,0x28,0x26,0x25,0x24,0x24,0x23,0x22,0x21,0x20,0x1f,0x1e,0x1d,0x1c,0x1c,0x1b,0x19,0x18,0x17,0x17,0x16,0x15,0x14,0x13,0x12,0x11,0x0f,0x0e,0x0c,0x0d,0x0c,0x0b,0x0a,0x09,0x07,0x08,0x06,0x05,0x05,0x03,0x03,0x02,0x02,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x02,0x02,0x03,0x04,0x05,0x05,0x06,0x08,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x19,0x19,0x1a,0x1b,0x1c,0x1d,0x1e,0x1f,0x20,0x21,0x22,0x24,0x25,0x25,0x26,0x26,0x27,0x29,0x29,0x2a,0x2b,0x2b,0x2c,0x2d,0x2d,0x2e,0x30,0x31,0x31,0x32,0x31,0x33,0x32,0x34,0x33,0x34,0x34,0x34,0x34,0x35,0x34,0x34,0x34,0x35,0x34,0x34,0x34,0x34,0x33,0x34,0x32,0x33,0x31,0x32,0x31,0x31,0x2f,0x2e,0x2d,0x2d,0x2c,0x2b,0x2c,0x2a,0x29,0x28,0x27,0x26,0x26,0x25,0x25,0x24,0x22,0x21,0x20,0x1f,0x1e,0x1d,0x1c,0x1b,0x1a,0x19,0x18,0x17,0x16,0x15,0x14,0x13,0x12,0x11,0x10,0x0e,0x0e,0x0d,0x0c,0x0b,0x0a,0x09,0x08,0x08,0x06,0x05,0x05,0x04,0x03,0x02,0x02,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x02,0x02,0x03,0x04,0x05,0x05,0x06,0x08,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,0x11,0x12,0x13,0x13,0x14,0x15,0x16,0x17,0x18,0x1a,0x1b,0x1c,0x1d,0x1e,0x1f,0x20,0x21,0x22,0x23,0x23,0x25,0x26,0x27,0x28,0x29,0x2a,0x2b,0x2b,0x2d,0x2e,0x2e,0x2f,0x30,0x31,0x32,0x32,0x33,0x34,0x34,0x35,0x35,0x35,0x36,0x36,0x37,0x37,0x37,0x37,0x37,0x37,0x37,0x37,0x37,0x37,0x37,0x37,0x37,0x36,0x36,0x35,0x35,0x35,0x34,0x34,0x33,0x32,0x32,0x31,0x30,0x2f,0x2e,0x2e,0x2d,0x2b,0x2b,0x2a,0x29,0x28,0x27,0x26,0x25,0x23,0x23,0x22,0x21,0x20,0x1f,0x1e,0x1d,0x1c,0x1b,0x19,0x18,0x17,0x16,0x15,0x14,0x13,0x13,0x12,0x10,0x0f,0x0e,0x0d,0x0c,0x0b,0x0a,0x08,0x08,0x08,0x06,0x05,0x05,0x04,0x03,0x02,0x02,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x02,0x02,0x03,0x04,0x04,0x05,0x06,0x07,0x07,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,0x10,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x18,0x19,0x1b,0x1c,0x1d,0x1e,0x1f,0x20,0x21,0x22,0x23,0x25,0x26,0x27,0x28,0x29,0x2a,0x2b,0x2c,0x2d,0x2d,0x2f,0x30,0x31,0x32,0x32,0x33,0x34,0x34,0x35,0x36,0x36,0x37,0x37,0x38,0x38,0x38,0x39,0x39,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x39,0x39,0x38,0x38,0x38,0x37,0x37,0x36,0x36,0x35,0x34,0x34,0x33,0x32,0x32,0x31,0x30,0x2f,0x2d,0x2d,0x2c,0x2b,0x2a,0x29,0x28,0x27,0x26,0x24,0x23,0x22,0x21,0x20,0x1f,0x1e,0x1d,0x1c,0x1a,0x19,0x18,0x18,0x17,0x16,0x15,0x14,0x13,0x11,0x10,0x0f,0x0e,0x0d,0x0c,0x0b,0x0a,0x09,0x07,0x07,0x06,0x05,0x04,0x04,0x03,0x02,0x02,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x02,0x02,0x03,0x04,0x04,0x05,0x06,0x07,0x07,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,0x10,0x11,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1a,0x1b,0x1d,0x1e,0x1f,0x20,0x21,0x22,0x23,0x24,0x25,0x27,0x28,0x29,0x2a,0x2b,0x2c,0x2d,0x2e,0x2f,0x31,0x32,0x32,0x33,0x34,0x35,0x35,0x36,0x36,0x38,0x38,0x39,0x39,0x3a,0x3a,0x3a,0x3b,0x3b,0x3c,0x3c,0x3c,0x3c,0x3c,0x3c,0x3c,0x3c,0x3c,0x3c,0x3b,0x3b,0x3b,0x3a,0x3a,0x3a,0x39,0x39,0x38,0x38,0x36,0x36,0x35,0x35,0x34,0x33,0x32,0x32,0x30,0x2f,0x2e,0x2d,0x2c,0x2b,0x2a,0x29,0x28,0x26,0x25,0x24,0x23,0x22,0x21,0x20,0x1f,0x1e,0x1c,0x1b,0x1a,0x19,0x18,0x17,0x16,0x15,0x14,0x12,0x11,0x10,0x0f,0x0e,0x0d,0x0c,0x0b,0x0a,0x08,0x07,0x07,0x06,0x05,0x04,0x04,0x02,0x02,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x02,0x03,0x03,0x04,0x05,0x06,0x06,0x07,0x08,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,0x10,0x11,0x12,0x14,0x15,0x16,0x17,0x18,0x19,0x1a,0x1b,0x1c,0x1e,0x1f,0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x28,0x29,0x2a,0x2c,0x2d,0x2e,0x2f,0x30,0x31,0x33,0x34,0x34,0x35,0x36,0x37,0x37,0x38,0x3a,0x3a,0x3a,0x3b,0x3b,0x3c,0x3d,0x3d,0x3d,0x3e,0x3e,0x3e,0x3e,0x3f,0x3f,0x3f,0x3f,0x3f,0x3e,0x3e,0x3e,0x3e,0x3d,0x3d,0x3d,0x3c,0x3b,0x3b,0x3a,0x39,0x39,0x38,0x37,0x37,0x36,0x35,0x34,0x34,0x32,0x31,0x30,0x2f,0x2e,0x2d,0x2b,0x29,0x29,0x28,0x26,0x25,0x24,0x23,0x22,0x21,0x20,0x1f,0x1d,0x1c,0x1b,0x1a,0x19,0x18,0x17,0x16,0x15,0x13,0x12,0x11,0x10,0x0f,0x0e,0x0d,0x0c,0x0b,0x09,0x08,0x07,0x06,0x06,0x05,0x04,0x03,0x03,0x02,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x03,0x03,0x04,0x05,0x06,0x06,0x07,0x08,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,0x10,0x11,0x12,0x13,0x15,0x16,0x17,0x18,0x19,0x1a,0x1b,0x1d,0x1e,0x1f,0x21,0x22,0x23,0x24,0x25,0x27,0x28,0x28,0x2b,0x2c,0x2d,0x2f,0x30,0x31,0x32,0x33,0x34,0x36,0x37,0x36,0x37,0x38,0x39,0x3b,0x3b,0x3c,0x3d,0x3d,0x3e,0x3e,0x3f,0x3f,0x40,0x40,0x41,0x41,0x41,0x41,0x42,0x42,0x42,0x42,0x42,0x41,0x41,0x41,0x41,0x40,0x40,0x3f,0x3f,0x3e,0x3e,0x3d,0x3d,0x3b,0x3b,0x3b,0x39,0x38,0x37,0x36,0x37,0x35,0x34,0x33,0x32,0x31,0x30,0x2e,0x2b,0x2c,0x29,0x29,0x28,0x27,0x25,0x24,0x23,0x22,0x21,0x1f,0x1e,0x1d,0x1b,0x1a,0x19,0x18,0x17,0x16,0x14,0x13,0x12,0x11,0x10,0x0f,0x0e,0x0d,0x0c,0x0a,0x09,0x08,0x07,0x06,0x06,0x05,0x04,0x03,0x03,0x01,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x02,0x03,0x04,0x05,0x05,0x06,0x08,0x09,0x0a,0x0b,0x0b,0x0c,0x0e,0x0f,0x10,0x11,0x12,0x13,0x14,0x16,0x17,0x18,0x19,0x1b,0x1c,0x1d,0x1f,0x1f,0x21,0x22,0x24,0x25,0x26,0x27,0x28,0x2a,0x2b,0x2d,0x2e,0x2f,0x31,0x32,0x33,0x34,0x35,0x36,0x38,0x39,0x39,0x3a,0x3b,0x3c,0x3d,0x3e,0x3e,0x3f,0x40,0x41,0x41,0x42,0x42,0x43,0x43,0x44,0x44,0x44,0x44,0x45,0x45,0x45,0x45,0x45,0x44,0x44,0x44,0x44,0x43,0x43,0x42,0x42,0x41,0x41,0x40,0x3f,0x3e,0x3e,0x3d,0x3c,0x3b,0x3a,0x39,0x39,0x37,0x36,0x35,0x34,0x33,0x32,0x30,0x2e,0x2e,0x2c,0x2b,0x29,0x28,0x27,0x26,0x25,0x24,0x22,0x20,0x1f,0x1f,0x1d,0x1c,0x1b,0x19,0x19,0x17,0x15,0x14,0x13,0x12,0x11,0x10,0x0f,0x0e,0x0c,0x0b,0x0a,0x0a,0x09,0x08,0x06,0x05,0x05,0x04,0x03,0x02,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x02,0x03,0x04,0x04,0x06,0x07,0x08,0x08,0x09,0x0a,0x0a,0x0d,0x0c,0x0e,0x11,0x12,0x13,0x14,0x15,0x16,0x18,0x19,0x1a,0x1b,0x1d,0x1e,0x1f,0x1f,0x21,0x23,0x24,0x26,0x27,0x28,0x29,0x2a,0x2c,0x2e,0x2f,0x30,0x31,0x33,0x34,0x35,0x36,0x37,0x38,0x3a,0x3b,0x3c,0x3d,0x3e,0x3f,0x40,0x40,0x41,0x42,0x43,0x44,0x44,0x44,0x45,0x45,0x46,0x47,0x47,0x47,0x48,0x48,0x47,0x47,0x47,0x48,0x48,0x47,0x47,0x47,0x46,0x45,0x45,0x44,0x44,0x44,0x43,0x42,0x41,0x40,0x40,0x3f,0x3e,0x3d,0x3c,0x3b,0x39,0x38,0x37,0x36,0x35,0x34,0x32,0x30,0x30,0x2e,0x2d,0x2b,0x2a,0x29,0x28,0x27,0x26,0x24,0x23,0x21,0x20,0x1f,0x1e,0x1d,0x1a,0x19,0x19,0x17,0x16,0x15,0x14,0x13,0x12,0x11,0x0e,0x0c,0x0b,0x0a,0x0a,0x09,0x08,0x08,0x07,0x05,0x04,0x04,0x03,0x02,0x01,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x02,0x03,0x03,0x04,0x06,0x06,0x07,0x08,0x08,0x09,0x0a,0x0c,0x0e,0x0d,0x10,0x12,0x13,0x14,0x15,0x16,0x17,0x19,0x19,0x1a,0x1d,0x1e,0x1e,0x1f,0x21,0x23,0x24,0x26,0x27,0x28,0x2a,0x2b,0x2c,0x2e,0x30,0x31,0x32,0x33,0x35,0x36,0x37,0x38,0x39,0x3a,0x3c,0x3d,0x3e,0x3f,0x40,0x41,0x42,0x43,0x44,0x45,0x46,0x46,0x47,0x48,0x48,0x49,0x49,0x49,0x4a,0x4a,0x4a,0x4a,0x4b,0x4b,0x4b,0x4a,0x4a,0x4a,0x49,0x49,0x49,0x49,0x48,0x48,0x47,0x46,0x46,0x45,0x44,0x43,0x42,0x41,0x40,0x3f,0x3e,0x3d,0x3b,0x3a,0x39,0x38,0x37,0x36,0x34,0x32,0x32,0x31,0x2f,0x2d,0x2c,0x2b,0x2a,0x28,0x27,0x26,0x24,0x23,0x20,0x1f,0x1e,0x1e,0x1c,0x1a,0x19,0x18,0x17,0x16,0x15,0x14,0x13,0x12,0x10,0x0d,0x0d,0x0c,0x0a,0x09,0x08,0x08,0x07,0x06,0x06,0x03,0x03,0x03,0x02,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x02,0x02,0x03,0x04,0x05,0x05,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0f,0x0f,0x11,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1a,0x1c,0x1e,0x1f,0x20,0x21,0x23,0x25,0x26,0x27,0x29,0x2b,0x2b,0x2c,0x2e,0x2f,0x31,0x34,0x34,0x35,0x37,0x38,0x39,0x3a,0x3b,0x3c,0x3e,0x40,0x40,0x41,0x42,0x43,0x44,0x46,0x47,0x48,0x49,0x49,0x4a,0x4b,0x4b,0x4c,0x4c,0x4c,0x4d,0x4d,0x4d,0x4d,0x4e,0x4e,0x4e,0x4d,0x4d,0x4d,0x4c,0x4c,0x4c,0x4c,0x4b,0x4b,0x4a,0x49,0x49,0x48,0x47,0x46,0x44,0x43,0x42,0x41,0x40,0x40,0x3e,0x3c,0x3b,0x3a,0x39,0x38,0x36,0x34,0x34,0x34,0x32,0x2f,0x2e,0x2c,0x2b,0x2a,0x28,0x27,0x26,0x24,0x22,0x21,0x20,0x1f,0x1e,0x1d,0x1a,0x19,0x18,0x17,0x16,0x15,0x14,0x12,0x10,0x0f,0x0e,0x0d,0x0c,0x0b,0x0a,0x09,0x08,0x07,0x05,0x05,0x04,0x03,0x02,0x02,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x02,0x03,0x04,0x04,0x06,0x06,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x10,0x11,0x12,0x14,0x15,0x16,0x17,0x18,0x19,0x1b,0x1d,0x1e,0x1f,0x21,0x22,0x23,0x25,0x27,0x27,0x29,0x2b,0x2c,0x2e,0x2f,0x31,0x32,0x33,0x35,0x37,0x38,0x3a,0x3b,0x3c,0x3d,0x3f,0x40,0x42,0x43,0x44,0x45,0x46,0x47,0x48,0x49,0x4a,0x4a,0x4c,0x4d,0x4c,0x4e,0x4e,0x4f,0x4f,0x50,0x50,0x51,0x51,0x51,0x50,0x50,0x50,0x51,0x51,0x51,0x50,0x50,0x4f,0x4f,0x4e,0x4e,0x4c,0x4d,0x4c,0x4a,0x4a,0x49,0x48,0x47,0x46,0x45,0x44,0x43,0x41,0x40,0x3e,0x3d,0x3c,0x3b,0x39,0x37,0x37,0x35,0x33,0x32,0x31,0x2f,0x2e,0x2c,0x2a,0x29,0x27,0x26,0x24,0x23,0x22,0x21,0x1f,0x1e,0x1d,0x1b,0x19,0x18,0x17,0x16,0x15,0x13,0x11,0x11,0x0f,0x0e,0x0d,0x0c,0x0b,0x0a,0x09,0x08,0x06,0x05,0x04,0x04,0x03,0x02,0x01,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x02,0x03,0x03,0x04,0x05,0x07,0x08,0x08,0x09,0x0a,0x0b,0x0c,0x0e,0x10,0x11,0x12,0x13,0x14,0x16,0x17,0x18,0x19,0x1b,0x1d,0x1e,0x1f,0x21,0x22,0x23,0x25,0x26,0x27,0x29,0x2b,0x2c,0x2e,0x2f,0x31,0x32,0x34,0x35,0x37,0x39,0x3a,0x3c,0x3d,0x3e,0x3f,0x41,0x43,0x44,0x45,0x46,0x47,0x48,0x49,0x4a,0x4b,0x4c,0x4e,0x4f,0x4f,0x50,0x51,0x51,0x52,0x52,0x52,0x53,0x53,0x54,0x54,0x54,0x54,0x54,0x54,0x54,0x53,0x53,0x52,0x52,0x52,0x51,0x51,0x50,0x4f,0x4f,0x4d,0x4c,0x4b,0x4a,0x49,0x48,0x47,0x46,0x45,0x43,0x42,0x40,0x3f,0x3e,0x3d,0x3b,0x39,0x39,0x37,0x35,0x34,0x32,0x31,0x2f,0x2d,0x2b,0x2b,0x29,0x27,0x26,0x25,0x23,0x22,0x20,0x1e,0x1e,0x1d,0x1b,0x19,0x18,0x17,0x16,0x14,0x13,0x12,0x10,0x0f,0x0d,0x0c,0x0b,0x0a,0x09,0x08,0x08,0x06,0x05,0x04,0x03,0x03,0x02,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x02,0x02,0x03,0x04,0x05,0x06,0x06,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0f,0x11,0x12,0x13,0x14,0x15,0x17,0x18,0x19,0x1a,0x1c,0x1e,0x1e,0x20,0x22,0x23,0x25,0x26,0x28,0x2a,0x2a,0x2c,0x2e,0x30,0x31,0x33,0x34,0x36,0x37,0x39,0x3b,0x3c,0x3e,0x3f,0x40,0x41,0x43,0x44,0x45,0x47,0x49,0x4a,0x4b,0x4c,0x4d,0x4e,0x4f,0x50,0x51,0x52,0x53,0x53,0x54,0x54,0x55,0x55,0x56,0x56,0x57,0x57,0x57,0x57,0x57,0x57,0x57,0x56,0x56,0x55,0x55,0x54,0x54,0x53,0x53,0x51,0x51,0x50,0x4f,0x4e,0x4d,0x4c,0x4b,0x4a,0x49,0x47,0x45,0x44,0x43,0x41,0x40,0x3f,0x3d,0x3b,0x3b,0x39,0x37,0x35,0x34,0x33,0x31,0x2f,0x2e,0x2c,0x2a,0x29,0x27,0x26,0x25,0x23,0x22,0x20,0x1e,0x1e,0x1c,0x1a,0x19,0x18,0x17,0x15,0x14,0x13,0x11,0x10,0x0e,0x0d,0x0c,0x0b,0x0a,0x09,0x08,0x06,0x06,0x05,0x04,0x03,0x02,0x02,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x02,0x03,0x04,0x04,0x05,0x06,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x10,0x12,0x13,0x14,0x15,0x16,0x18,0x19,0x1a,0x1b,0x1d,0x1f,0x1f,0x21,0x23,0x25,0x26,0x27,0x29,0x2a,0x2c,0x2e,0x2f,0x32,0x33,0x35,0x36,0x38,0x39,0x3b,0x3d,0x3e,0x40,0x41,0x42,0x44,0x45,0x48,0x49,0x4a,0x4b,0x4c,0x4d,0x4e,0x4f,0x50,0x51,0x53,0x54,0x55,0x56,0x56,0x57,0x58,0x58,0x59,0x59,0x5a,0x5a,0x5a,0x5a,0x5a,0x5a,0x5a,0x5a,0x5a,0x59,0x59,0x58,0x58,0x57,0x56,0x56,0x55,0x54,0x52,0x51,0x50,0x4f,0x4e,0x4d,0x4c,0x4b,0x4a,0x49,0x47,0x45,0x44,0x42,0x41,0x3f,0x3d,0x3d,0x3b,0x39,0x37,0x36,0x35,0x33,0x32,0x2f,0x2e,0x2c,0x2a,0x29,0x27,0x26,0x25,0x23,0x21,0x1f,0x1f,0x1d,0x1b,0x1a,0x19,0x18,0x16,0x15,0x14,0x12,0x11,0x0f,0x0e,0x0d,0x0c,0x0b,0x0a,0x09,0x07,0x06,0x05,0x04,0x04,0x03,0x02,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x02,0x02,0x03,0x04,0x05,0x06,0x07,0x07,0x09,0x0a,0x0b,0x0c,0x0e,0x0f,0x10,0x12,0x14,0x15,0x16,0x17,0x19,0x1a,0x1b,0x1d,0x1f,0x1f,0x21,0x23,0x25,0x26,0x27,0x29,0x2b,0x2c,0x2e,0x2f,0x33,0x33,0x36,0x36,0x38,0x3b,0x3c,0x3e,0x40,0x41,0x43,0x43,0x46,0x47,0x49,0x4a,0x4b,0x4c,0x4e,0x4f,0x50,0x51,0x53,0x54,0x55,0x57,0x58,0x59,0x5a,0x5a,0x5b,0x5c,0x5c,0x5d,0x5d,0x5e,0x5e,0x5e,0x5e,0x5e,0x5e,0x5e,0x5e,0x5e,0x5d,0x5d,0x5c,0x5c,0x5b,0x5a,0x5a,0x59,0x58,0x56,0x55,0x54,0x53,0x51,0x50,0x4f,0x4e,0x4c,0x4b,0x49,0x48,0x47,0x46,0x43,0x41,0x3f,0x40,0x3e,0x3c,0x3a,0x38,0x36,0x36,0x34,0x32,0x2f,0x2d,0x2c,0x2a,0x29,0x27,0x26,0x24,0x23,0x21,0x1f,0x1e,0x1c,0x1b,0x1a,0x19,0x17,0x16,0x15,0x14,0x12,0x10,0x0f,0x0e,0x0c,0x0b,0x0a,0x09,0x07,0x07,0x06,0x05,0x04,0x03,0x02,0x02,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x02,0x03,0x04,0x05,0x05,0x06,0x07,0x0a,0x0b,0x0c,0x0c,0x0d,0x10,0x11,0x11,0x12,0x14,0x16,0x17,0x18,0x19,0x1b,0x1c,0x1e,0x20,0x21,0x23,0x24,0x27,0x27,0x29,0x2a,0x2d,0x2e,0x30,0x32,0x35,0x36,0x37,0x39,0x3a,0x3c,0x3e,0x40,0x42,0x43,0x45,0x46,0x48,0x49,0x4b,0x4c,0x4e,0x4f,0x51,0x52,0x53,0x54,0x56,0x57,0x58,0x5a,0x5b,0x5c,0x5d,0x5d,0x5e,0x5f,0x5f,0x60,0x61,0x61,0x61,0x61,0x61,0x61,0x61,0x61,0x61,0x61,0x60,0x60,0x5f,0x5f,0x5e,0x5d,0x5d,0x5c,0x5b,0x59,0x58,0x57,0x56,0x54,0x53,0x52,0x51,0x4f,0x4e,0x4c,0x4b,0x49,0x48,0x46,0x44,0x42,0x42,0x40,0x3d,0x3c,0x3a,0x39,0x37,0x35,0x34,0x32,0x30,0x2d,0x2c,0x2a,0x29,0x27,0x26,0x24,0x23,0x21,0x1f,0x1d,0x1c,0x1b,0x19,0x18,0x17,0x16,0x14,0x12,0x11,0x11,0x10,0x0d,0x0d,0x0c,0x0b,0x09,0x07,0x06,0x05,0x05,0x04,0x03,0x01,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x02,0x02,0x03,0x04,0x05,0x06,0x06,0x07,0x08,0x0a,0x0b,0x0c,0x0e,0x0f,0x10,0x11,0x13,0x13,0x14,0x17,0x19,0x1a,0x1b,0x1d,0x1e,0x20,0x20,0x23,0x25,0x25,0x27,0x29,0x2b,0x2c,0x2d,0x30,0x32,0x34,0x35,0x38,0x39,0x3b,0x3c,0x3e,0x40,0x42,0x44,0x45,0x47,0x49,0x4a,0x4c,0x4e,0x4f,0x51,0x52,0x53,0x56,0x57,0x58,0x5a,0x5b,0x5c,0x5e,0x5f,0x60,0x61,0x61,0x62,0x63,0x63,0x64,0x65,0x65,0x65,0x64,0x64,0x64,0x64,0x64,0x65,0x65,0x64,0x64,0x63,0x63,0x62,0x61,0x61,0x60,0x5f,0x5d,0x5c,0x5b,0x5a,0x58,0x57,0x55,0x53,0x52,0x51,0x4f,0x4d,0x4c,0x4a,0x49,0x47,0x45,0x44,0x42,0x3f,0x3e,0x3c,0x3b,0x39,0x37,0x36,0x34,0x32,0x2f,0x2e,0x2c,0x2b,0x29,0x28,0x25,0x25,0x23,0x20,0x1e,0x1e,0x1d,0x1b,0x1a,0x19,0x17,0x14,0x14,0x13,0x11,0x10,0x0f,0x0d,0x0b,0x0b,0x09,0x08,0x07,0x06,0x06,0x05,0x04,0x02,0x02,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x03,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0b,0x0b,0x0c,0x0e,0x10,0x10,0x11,0x14,0x15,0x16,0x17,0x19,0x1b,0x1c,0x1e,0x1f,0x21,0x22,0x24,0x26,0x27,0x29,0x2b,0x2c,0x2e,0x30,0x32,0x34,0x36,0x37,0x39,0x3b,0x3d,0x3e,0x40,0x42,0x44,0x46,0x47,0x49,0x4b,0x4c,0x4e,0x50,0x52,0x54,0x55,0x57,0x58,0x5a,0x5b,0x5d,0x5e,0x5f,0x61,0x62,0x63,0x64,0x64,0x65,0x66,0x66,0x67,0x68,0x68,0x68,0x68,0x68,0x68,0x68,0x68,0x68,0x68,0x67,0x67,0x66,0x66,0x65,0x64,0x64,0x63,0x62,0x60,0x5f,0x5e,0x5d,0x5b,0x5a,0x58,0x56,0x55,0x53,0x52,0x50,0x4e,0x4c,0x4b,0x49,0x47,0x46,0x44,0x41,0x40,0x3e,0x3d,0x3b,0x39,0x37,0x36,0x34,0x33,0x2f,0x2e,0x2c,0x2b,0x29,0x27,0x26,0x24,0x22,0x20,0x1f,0x1e,0x1c,0x1b,0x19,0x17,0x15,0x15,0x13,0x11,0x10,0x10,0x0d,0x0c,0x0b,0x09,0x09,0x08,0x07,0x06,0x05,0x04,0x02,0x03,0x01,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x02,0x04,0x05,0x06,0x07,0x07,0x08,0x09,0x0b,0x0d,0x0e,0x0f,0x11,0x12,0x13,0x14,0x16,0x18,0x18,0x1a,0x1c,0x1d,0x1f,0x20,0x22,0x24,0x26,0x27,0x29,0x2b,0x2c,0x2e,0x2f,0x33,0x34,0x36,0x37,0x39,0x3b,0x3e,0x3f,0x40,0x42,0x44,0x46,0x48,0x49,0x4c,0x4d,0x4f,0x50,0x53,0x55,0x57,0x58,0x5a,0x5b,0x5d,0x5e,0x60,0x61,0x63,0x64,0x65,0x66,0x67,0x67,0x68,0x69,0x6a,0x6a,0x6b,0x6b,0x6c,0x6c,0x6c,0x6c,0x6c,0x6c,0x6c,0x6b,0x6b,0x6a,0x6a,0x69,0x68,0x67,0x67,0x66,0x65,0x63,0x62,0x61,0x60,0x5e,0x5d,0x5b,0x5a,0x58,0x56,0x55,0x53,0x50,0x4f,0x4d,0x4c,0x49,0x48,0x46,0x43,0x42,0x40,0x3f,0x3e,0x3a,0x39,0x37,0x35,0x34,0x32,0x2f,0x2e,0x2c,0x2a,0x29,0x27,0x25,0x24,0x22,0x20,0x1f,0x1d,0x1c,0x1a,0x18,0x17,0x16,0x14,0x13,0x12,0x11,0x0f,0x0e,0x0d,0x0b,0x09,0x08,0x07,0x07,0x06,0x05,0x04,0x02,0x02,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x03,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0c,0x0c,0x0e,0x10,0x11,0x13,0x14,0x15,0x17,0x19,0x19,0x1b,0x1d,0x1e,0x20,0x21,0x23,0x25,0x27,0x28,0x2b,0x2c,0x2e,0x30,0x31,0x34,0x36,0x38,0x39,0x3b,0x3e,0x3f,0x41,0x43,0x45,0x47,0x49,0x4b,0x4c,0x4f,0x50,0x52,0x54,0x56,0x58,0x5a,0x5c,0x5d,0x5f,0x60,0x62,0x62,0x65,0x67,0x68,0x69,0x6a,0x6b,0x6b,0x6c,0x6d,0x6e,0x6e,0x6f,0x6f,0x70,0x70,0x70,0x70,0x70,0x70,0x70,0x6f,0x6f,0x6e,0x6e,0x6d,0x6c,0x6b,0x6b,0x6a,0x69,0x67,0x66,0x63,0x62,0x62,0x60,0x5f,0x5d,0x5c,0x5a,0x57,0x56,0x54,0x52,0x50,0x4f,0x4c,0x4b,0x49,0x46,0x45,0x43,0x41,0x3f,0x3e,0x3b,0x39,0x37,0x36,0x33,0x31,0x30,0x2e,0x2c,0x2a,0x28,0x26,0x25,0x23,0x21,0x20,0x1e,0x1d,0x1b,0x19,0x19,0x17,0x15,0x14,0x13,0x11,0x10,0x0e,0x0c,0x0b,0x0a,0x09,0x08,0x07,0x06,0x05,0x03,0x03,0x03,0x01,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x02,0x02,0x04,0x05,0x06,0x07,0x08,0x08,0x09,0x0b,0x0d,0x0d,0x0f,0x11,0x12,0x13,0x14,0x16,0x17,0x19,0x1b,0x1c,0x1e,0x1f,0x21,0x22,0x24,0x26,0x28,0x2a,0x2b,0x2e,0x2f,0x31,0x33,0x36,0x37,0x39,0x3b,0x3e,0x3f,0x41,0x43,0x45,0x46,0x49,0x4b,0x4d,0x4f,0x51,0x53,0x55,0x56,0x59,0x5b,0x5d,0x5e,0x60,0x62,0x63,0x65,0x66,0x68,0x6a,0x6b,0x6c,0x6d,0x6e,0x6f,0x70,0x70,0x71,0x71,0x72,0x73,0x73,0x73,0x73,0x73,0x73,0x73,0x73,0x73,0x72,0x71,0x71,0x70,0x70,0x6f,0x6e,0x6d,0x6c,0x6a,0x69,0x67,0x66,0x65,0x63,0x61,0x60,0x5e,0x5c,0x5b,0x58,0x56,0x55,0x53,0x50,0x4f,0x4d,0x4b,0x49,0x46,0x45,0x43,0x41,0x3f,0x3d,0x3b,0x39,0x37,0x35,0x33,0x31,0x2f,0x2e,0x2b,0x2a,0x28,0x25,0x24,0x22,0x21,0x1f,0x1e,0x1c,0x1b,0x19,0x17,0x16,0x14,0x13,0x12,0x11,0x0f,0x0d,0x0d,0x0b,0x09,0x08,0x08,0x07,0x06,0x05,0x04,0x02,0x02,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x02,0x02,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0e,0x10,0x11,0x13,0x14,0x15,0x17,0x18,0x1a,0x1c,0x1d,0x1f,0x20,0x22,0x23,0x26,0x27,0x29,0x2b,0x2d,0x2f,0x31,0x33,0x34,0x37,0x39,0x3b,0x3d,0x3e,0x41,0x43,0x45,0x47,0x48,0x4b,0x4d,0x4f,0x51,0x53,0x55,0x57,0x59,0x5b,0x5d,0x5f,0x61,0x62,0x64,0x66,0x67,0x69,0x6a,0x6c,0x6e,0x6f,0x70,0x71,0x72,0x73,0x73,0x74,0x75,0x76,0x76,0x76,0x77,0x77,0x77,0x77,0x77,0x76,0x76,0x75,0x75,0x74,0x73,0x73,0x72,0x71,0x70,0x6f,0x6e,0x6c,0x6a,0x69,0x67,0x66,0x64,0x62,0x61,0x5f,0x5d,0x5b,0x59,0x57,0x55,0x52,0x51,0x4f,0x4d,0x4b,0x48,0x47,0x45,0x43,0x40,0x3e,0x3d,0x3b,0x39,0x36,0x34,0x33,0x31,0x2e,0x2d,0x2b,0x29,0x27,0x25,0x23,0x22,0x20,0x1e,0x1c,0x1c,0x1a,0x18,0x17,0x15,0x14,0x13,0x11,0x10,0x0e,0x0c,0x0b,0x0a,0x09,0x08,0x07,0x06,0x05,0x04,0x02,0x02,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x02,0x02,0x04,0x05,0x06,0x07,0x08,0x08,0x09,0x0b,0x0c,0x0d,0x0f,0x11,0x12,0x13,0x15,0x16,0x18,0x19,0x1b,0x1d,0x1e,0x20,0x21,0x23,0x24,0x27,0x28,0x2a,0x2c,0x2f,0x30,0x32,0x34,0x36,0x39,0x3a,0x3c,0x3e,0x40,0x43,0x45,0x47,0x48,0x4b,0x4d,0x4f,0x51,0x53,0x56,0x58,0x5a,0x5b,0x5e,0x60,0x62,0x63,0x66,0x67,0x6a,0x6a,0x6d,0x6d,0x6f,0x71,0x72,0x73,0x74,0x75,0x76,0x77,0x78,0x78,0x7a,0x7a,0x7a,0x7b,0x7b,0x7b,0x7b,0x7b,0x7a,0x7a,0x79,0x78,0x78,0x77,0x76,0x75,0x74,0x73,0x72,0x71,0x6f,0x6d,0x6d,0x6a,0x6a,0x67,0x65,0x63,0x61,0x60,0x5d,0x5b,0x5a,0x58,0x55,0x53,0x51,0x4f,0x4d,0x4a,0x48,0x47,0x45,0x43,0x40,0x3e,0x3c,0x3a,0x38,0x36,0x34,0x32,0x30,0x2e,0x2c,0x2a,0x28,0x26,0x24,0x23,0x21,0x1f,0x1d,0x1d,0x1b,0x19,0x17,0x16,0x15,0x13,0x12,0x11,0x0f,0x0d,0x0c,0x0b,0x09,0x08,0x08,0x07,0x06,0x05,0x03,0x02,0x02,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x02,0x02,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0e,0x11,0x11,0x13,0x14,0x15,0x17,0x18,0x1a,0x1c,0x1d,0x1f,0x21,0x22,0x24,0x26,0x28,0x2a,0x2c,0x2e,0x2f,0x32,0x34,0x36,0x38,0x3b,0x3d,0x3f,0x40,0x42,0x45,0x46,0x48,0x4b,0x4e,0x50,0x52,0x53,0x55,0x59,0x5b,0x5d,0x5e,0x61,0x63,0x65,0x67,0x68,0x6b,0x6c,0x6e,0x6f,0x71,0x73,0x75,0x76,0x77,0x78,0x79,0x7a,0x7b,0x7c,0x7c,0x7e,0x7e,0x7e,0x7f,0x7f,0x7f,0x7f,0x7f,0x7e,0x7e,0x7d,0x7c,0x7c,0x7b,0x7a,0x79,0x78,0x77,0x76,0x75,0x73,0x71,0x6f,0x6e,0x6c,0x6a,0x68,0x67,0x65,0x62,0x60,0x5e,0x5d,0x5b,0x58,0x55,0x53,0x52,0x50,0x4d,0x4b,0x48,0x46,0x45,0x42,0x40,0x3e,0x3d,0x3a,0x38,0x36,0x34,0x31,0x30,0x2e,0x2c,0x2a,0x27,0x26,0x24,0x22,0x20,0x1f,0x1d,0x1b,0x1a,0x18,0x17,0x15,0x14,0x12,0x11,0x11,0x0e,0x0c,0x0b,0x0a,0x09,0x08,0x07,0x06,0x05,0x03,0x02,0x02,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x02,0x03,0x05,0x06,0x06,0x07,0x08,0x09,0x0a,0x0c,0x0d,0x0f,0x10,0x12,0x13,0x16,0x17,0x17,0x19,0x1b,0x1d,0x1e,0x20,0x22,0x23,0x25,0x28,0x28,0x2b,0x2d,0x30,0x32,0x33,0x35,0x37,0x39,0x3c,0x3e,0x40,0x42,0x44,0x47,0x49,0x4b,0x4d,0x50,0x52,0x54,0x56,0x59,0x5c,0x5e,0x60,0x61,0x64,0x66,0x68,0x6a,0x6b,0x6e,0x6f,0x71,0x72,0x74,0x76,0x78,0x79,0x7a,0x7c,0x7d,0x7e,0x7f,0x7f,0x80,0x82,0x82,0x83,0x83,0x83,0x83,0x83,0x83,0x83,0x82,0x81,0x80,0x7f,0x7f,0x7e,0x7d,0x7c,0x7a,0x79,0x78,0x76,0x74,0x72,0x71,0x6f,0x6e,0x6b,0x6a,0x68,0x66,0x63,0x61,0x60,0x5e,0x5b,0x58,0x56,0x54,0x52,0x4f,0x4d,0x4b,0x49,0x45,0x44,0x42,0x40,0x3e,0x3b,0x39,0x37,0x35,0x32,0x32,0x30,0x2e,0x2b,0x28,0x28,0x25,0x23,0x22,0x20,0x1e,0x1c,0x1b,0x1a,0x17,0x17,0x16,0x14,0x12,0x10,0x0f,0x0d,0x0c,0x0a,0x09,0x08,0x07,0x06,0x06,0x04,0x03,0x02,0x01,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x02,0x03,0x04,0x04,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0f,0x11,0x11,0x12,0x15,0x16,0x17,0x19,0x1b,0x1b,0x1d,0x20,0x20,0x24,0x25,0x27,0x29,0x2a,0x2d,0x2f,0x31,0x33,0x35,0x37,0x39,0x3b,0x3e,0x40,0x42,0x44,0x46,0x49,0x4b,0x4d,0x4f,0x52,0x54,0x57,0x59,0x5c,0x5e,0x60,0x62,0x64,0x67,0x68,0x6a,0x6c,0x6f,0x71,0x73,0x75,0x76,0x77,0x79,0x7c,0x7c,0x7e,0x80,0x81,0x82,0x83,0x83,0x85,0x86,0x86,0x87,0x87,0x87,0x87,0x87,0x87,0x87,0x86,0x86,0x84,0x83,0x83,0x82,0x81,0x80,0x7e,0x7c,0x7b,0x7a,0x78,0x76,0x75,0x73,0x71,0x6f,0x6c,0x6a,0x68,0x66,0x64,0x62,0x60,0x5d,0x5b,0x59,0x56,0x53,0x51,0x4f,0x4d,0x4b,0x48,0x46,0x44,0x42,0x40,0x3d,0x3b,0x39,0x37,0x34,0x33,0x31,0x2f,0x2d,0x2a,0x29,0x27,0x25,0x24,0x20,0x20,0x1e,0x1b,0x1a,0x19,0x17,0x16,0x14,0x12,0x11,0x11,0x0f,0x0d,0x0b,0x0a,0x09,0x08,0x07,0x06,0x04,0x04,0x03,0x02,0x01,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x02,0x02,0x03,0x04,0x05,0x07,0x08,0x09,0x0a,0x0b,0x0b,0x0e,0x10,0x10,0x12,0x14,0x16,0x17,0x17,0x1a,0x1c,0x1d,0x1f,0x21,0x21,0x24,0x26,0x28,0x2a,0x2a,0x2e,0x30,0x32,0x34,0x37,0x39,0x3b,0x3d,0x40,0x42,0x44,0x46,0x48,0x4b,0x4d,0x4f,0x51,0x54,0x56,0x59,0x5b,0x5d,0x60,0x62,0x64,0x67,0x6a,0x6c,0x6e,0x70,0x72,0x74,0x76,0x77,0x79,0x7b,0x7e,0x7e,0x80,0x82,0x83,0x84,0x85,0x86,0x88,0x89,0x89,0x89,0x8a,0x8a,0x8a,0x8a,0x8a,0x8a,0x8a,0x89,0x89,0x89,0x88,0x86,0x85,0x84,0x83,0x82,0x80,0x7e,0x7d,0x7b,0x79,0x77,0x76,0x73,0x71,0x70,0x6e,0x6c,0x69,0x67,0x64,0x62,0x5f,0x5d,0x5b,0x59,0x56,0x53,0x51,0x4f,0x4d,0x4a,0x48,0x46,0x44,0x42,0x3f,0x3d,0x3b,0x39,0x36,0x34,0x32,0x30,0x2e,0x2a,0x2a,0x28,0x26,0x24,0x22,0x21,0x1f,0x1d,0x1a,0x1a,0x17,0x17,0x15,0x13,0x12,0x10,0x0f,0x0d,0x0b,0x0b,0x0a,0x09,0x08,0x07,0x05,0x04,0x03,0x02,0x02,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x02,0x02,0x03,0x04,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0d,0x0e,0x10,0x11,0x13,0x14,0x16,0x17,0x19,0x1a,0x1c,0x1e,0x20,0x21,0x23,0x25,0x27,0x29,0x2b,0x2c,0x2f,0x31,0x33,0x35,0x38,0x3a,0x3c,0x3e,0x40,0x43,0x45,0x47,0x49,0x4c,0x4f,0x51,0x53,0x55,0x58,0x5b,0x5d,0x5f,0x62,0x65,0x67,0x6a,0x6d,0x6f,0x71,0x73,0x74,0x77,0x79,0x7a,0x7c,0x7f,0x81,0x82,0x84,0x85,0x87,0x88,0x8a,0x8b,0x8b,0x8c,0x8e,0x8e,0x8f,0x8f,0x8f,0x8f,0x8f,0x8f,0x8f,0x8e,0x8e,0x8c,0x8b,0x8b,0x8a,0x88,0x87,0x85,0x84,0x82,0x80,0x7e,0x7c,0x7a,0x79,0x77,0x74,0x73,0x71,0x6f,0x6c,0x6a,0x67,0x65,0x61,0x5f,0x5d,0x5c,0x59,0x55,0x53,0x51,0x4f,0x4b,0x49,0x47,0x45,0x43,0x40,0x3e,0x3c,0x3a,0x37,0x35,0x33,0x31,0x2e,0x2c,0x2b,0x29,0x27,0x25,0x23,0x21,0x1f,0x1e,0x1c,0x1a,0x19,0x17,0x15,0x13,0x13,0x11,0x10,0x0e,0x0d,0x0b,0x0a,0x09,0x08,0x07,0x05,0x04,0x03,0x02,0x02,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x02,0x03,0x04,0x05,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0f,0x10,0x12,0x14,0x15,0x17,0x18,0x1a,0x1b,0x1d,0x1e,0x20,0x22,0x25,0x26,0x28,0x2a,0x2c,0x2f,0x31,0x33,0x35,0x37,0x39,0x3c,0x3e,0x40,0x42,0x45,0x47,0x49,0x4c,0x4f,0x51,0x53,0x56,0x58,0x5b,0x5e,0x60,0x62,0x66,0x68,0x6a,0x6c,0x70,0x72,0x73,0x75,0x78,0x7a,0x7b,0x7e,0x80,0x83,0x83,0x86,0x88,0x89,0x8b,0x8c,0x8e,0x8f,0x8f,0x90,0x92,0x92,0x93,0x93,0x93,0x93,0x93,0x93,0x93,0x92,0x93,0x90,0x8f,0x8f,0x8e,0x8c,0x8b,0x89,0x88,0x86,0x84,0x82,0x80,0x7e,0x7b,0x7a,0x78,0x75,0x73,0x72,0x6f,0x6c,0x6a,0x68,0x65,0x62,0x60,0x5e,0x5b,0x58,0x56,0x53,0x51,0x4f,0x4c,0x49,0x47,0x45,0x42,0x40,0x3e,0x3c,0x39,0x37,0x35,0x33,0x30,0x2e,0x2c,0x2a,0x28,0x26,0x24,0x22,0x20,0x1e,0x1c,0x1b,0x1a,0x18,0x16,0x14,0x14,0x12,0x10,0x0f,0x0d,0x0c,0x0b,0x0a,0x09,0x08,0x06,0x05,0x04,0x03,0x02,0x01,0x01,0x01,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x02,0x02,0x03,0x04,0x05,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0e,0x0f,0x11,0x13,0x13,0x15,0x17,0x19,0x1a,0x1c,0x1e,0x1f,0x21,0x23,0x25,0x27,0x29,0x2b,0x2d,0x30,0x32,0x34,0x36,0x38,0x3b,0x3d,0x3f,0x41,0x43,0x46,0x49,0x4b,0x4d,0x51,0x53,0x55,0x58,0x5a,0x5d,0x60,0x62,0x65,0x68,0x6a,0x6d,0x6f,0x72,0x74,0x76,0x78,0x7a,0x7d,0x7f,0x81,0x83,0x86,0x88,0x8a,0x8b,0x8e,0x8f,0x90,0x92,0x93,0x94,0x96,0x96,0x97,0x97,0x97,0x97,0x97,0x97,0x97,0x97,0x97,0x96,0x95,0x94,0x93,0x92,0x90,0x8f,0x8d,0x8b,0x89,0x88,0x85,0x83,0x81,0x7f,0x7c,0x7a,0x78,0x76,0x74,0x71,0x6f,0x6d,0x6a,0x68,0x65,0x62,0x60,0x5d,0x5a,0x58,0x55,0x53,0x50,0x4d,0x4b,0x49,0x46,0x43,0x41,0x3f,0x3d,0x3a,0x38,0x36,0x34,0x32,0x2f,0x2d,0x2b,0x29,0x26,0x25,0x23,0x21,0x1f,0x1d,0x1c,0x1a,0x19,0x17,0x15,0x13,0x13,0x11,0x0f,0x0e,0x0c,0x0b,0x0a,0x09,0x08,0x06,0x05,0x04,0x03,0x02,0x02,0x01,0x01,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x02,0x03,0x03,0x04,0x05,0x07,0x08,0x09,0x0a,0x0c,0x0d,0x0e,0x10,0x11,0x13,0x15,0x16,0x18,0x19,0x1b,0x1c,0x1e,0x20,0x22,0x24,0x26,0x28,0x2a,0x2c,0x2e,0x31,0x33,0x35,0x37,0x39,0x3c,0x3e,0x40,0x42,0x46,0x48,0x4a,0x4d,0x50,0x52,0x55,0x57,0x5a,0x5c,0x5f,0x62,0x64,0x67,0x6a,0x6d,0x6f,0x71,0x73,0x76,0x79,0x7b,0x7d,0x80,0x82,0x84,0x86,0x89,0x8b,0x8d,0x8f,0x91,0x93,0x94,0x96,0x97,0x98,0x99,0x9a,0x9a,0x9b,0x9b,0x9b,0x9b,0x9b,0x9b,0x9b,0x9a,0x99,0x99,0x98,0x97,0x96,0x94,0x92,0x91,0x8f,0x8d,0x8b,0x88,0x86,0x84,0x82,0x7f,0x7d,0x7b,0x79,0x76,0x73,0x71,0x6f,0x6d,0x6a,0x67,0x64,0x62,0x5f,0x5c,0x5a,0x57,0x55,0x51,0x4f,0x4d,0x4a,0x48,0x45,0x42,0x40,0x3e,0x3b,0x39,0x37,0x35,0x33,0x30,0x2e,0x2c,0x2a,0x27,0x26,0x24,0x22,0x1f,0x1e,0x1c,0x1b,0x19,0x17,0x15,0x15,0x13,0x11,0x10,0x0e,0x0d,0x0c,0x0a,0x09,0x08,0x06,0x05,0x04,0x03,0x03,0x02,0x01,0x01,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x02,0x03,0x04,0x05,0x06,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0f,0x10,0x12,0x14,0x15,0x17,0x19,0x1a,0x1c,0x1d,0x1f,0x21,0x23,0x24,0x26,0x29,0x2b,0x2d,0x2f,0x32,0x34,0x36,0x38,0x3a,0x3d,0x3f,0x42,0x44,0x47,0x49,0x4c,0x4e,0x51,0x54,0x56,0x59,0x5b,0x5e,0x61,0x64,0x67,0x6a,0x6c,0x6f,0x71,0x73,0x77,0x79,0x7c,0x7e,0x80,0x83,0x85,0x88,0x8a,0x8d,0x8f,0x91,0x93,0x95,0x97,0x98,0x9a,0x9b,0x9c,0x9d,0x9f,0x9f,0xa0,0xa0,0xa0,0xa0,0xa0,0xa0,0xa0,0x9f,0x9f,0x9d,0x9c,0x9b,0x9a,0x98,0x96,0x95,0x93,0x91,0x8f,0x8c,0x8a,0x88,0x85,0x83,0x80,0x7e,0x7b,0x78,0x76,0x73,0x71,0x6f,0x6b,0x69,0x67,0x64,0x61,0x5e,0x5b,0x59,0x56,0x53,0x50,0x4e,0x4b,0x49,0x46,0x44,0x42,0x3f,0x3c,0x3a,0x38,0x36,0x34,0x31,0x2f,0x2d,0x2b,0x28,0x26,0x24,0x22,0x21,0x1f,0x1d,0x1c,0x1a,0x18,0x17,0x15,0x13,0x12,0x10,0x0f,0x0d,0x0c,0x0b,0x0a,0x09,0x07,0x06,0x05,0x04,0x03,0x02,0x01,0x01,0x01,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x02,0x02,0x03,0x04,0x05,0x06,0x08,0x09,0x0a,0x0b,0x0c,0x0e,0x0f,0x11,0x12,0x14,0x16,0x17,0x19,0x1a,0x1c,0x1e,0x1f,0x22,0x24,0x25,0x27,0x2a,0x2c,0x2e,0x30,0x33,0x35,0x37,0x39,0x3b,0x3f,0x41,0x43,0x45,0x49,0x4b,0x4e,0x50,0x53,0x57,0x59,0x5c,0x5e,0x61,0x64,0x67,0x6a,0x6d,0x70,0x72,0x73,0x77,0x79,0x7c,0x7f,0x81,0x84,0x87,0x89,0x8c,0x8e,0x91,0x93,0x95,0x97,0x99,0x9b,0x9c,0x9e,0x9f,0xa0,0xa1,0xa2,0xa3,0xa4,0xa4,0xa4,0xa4,0xa4,0xa4,0xa4,0xa3,0xa2,0xa1,0xa0,0x9f,0x9e,0x9c,0x9a,0x99,0x97,0x95,0x93,0x90,0x8e,0x8c,0x89,0x87,0x84,0x81,0x7e,0x7b,0x78,0x77,0x73,0x72,0x6f,0x6c,0x6a,0x67,0x64,0x61,0x5e,0x5c,0x59,0x56,0x53,0x50,0x4d,0x4b,0x48,0x45,0x43,0x41,0x3e,0x3b,0x39,0x37,0x35,0x32,0x30,0x2e,0x2c,0x29,0x27,0x25,0x23,0x22,0x1f,0x1e,0x1c,0x1a,0x18,0x17,0x16,0x14,0x12,0x11,0x0f,0x0e,0x0c,0x0b,0x09,0x09,0x07,0x06,0x05,0x04,0x03,0x02,0x02,0x01,0x01,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x02,0x02,0x03,0x04,0x05,0x06,0x08,0x09,0x0a,0x0c,0x0d,0x0e,0x10,0x11,0x13,0x15,0x16,0x18,0x1a,0x1c,0x1d,0x1e,0x20,0x22,0x24,0x26,0x29,0x2b,0x2d,0x30,0x31,0x34,0x36,0x38,0x3a,0x3c,0x41,0x42,0x44,0x47,0x4a,0x4c,0x4f,0x52,0x55,0x58,0x5b,0x5d,0x60,0x63,0x66,0x68,0x6c,0x6f,0x71,0x74,0x76,0x79,0x7c,0x7f,0x82,0x84,0x87,0x8a,0x8d,0x8f,0x91,0x94,0x97,0x99,0x9a,0x9d,0x9f,0xa0,0xa2,0xa3,0xa4,0xa5,0xa6,0xa8,0xa7,0xa9,0xa9,0xa9,0xa9,0xa9,0xa7,0xa8,0xa5,0xa5,0xa4,0xa3,0xa2,0xa0,0x9f,0x9c,0x9a,0x98,0x97,0x93,0x91,0x8f,0x8d,0x8a,0x87,0x84,0x81,0x7e,0x7b,0x79,0x76,0x74,0x71,0x6e,0x6c,0x68,0x65,0x62,0x60,0x5d,0x5b,0x57,0x54,0x52,0x4f,0x4c,0x4a,0x47,0x44,0x42,0x3f,0x3c,0x3a,0x38,0x36,0x33,0x31,0x30,0x2d,0x2a,0x29,0x26,0x24,0x21,0x21,0x1e,0x1d,0x1c,0x1a,0x18,0x16,0x14,0x13,0x11,0x10,0x0e,0x0d,0x0b,0x0a,0x09,0x07,0x06,0x05,0x04,0x03,0x02,0x02,0x01,0x01,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x01,0x01,0x02,0x02,0x03,0x04,0x05,0x06,0x07,0x09,0x0a,0x0b,0x0c,0x0e,0x0f,0x11,0x12,0x14,0x16,0x17,0x19,0x1b,0x1c,0x1e,0x1f,0x22,0x24,0x26,0x28,0x29,0x2b,0x2d,0x30,0x33,0x36,0x38,0x3a,0x3c,0x3e,0x42,0x44,0x45,0x49,0x4b,0x4e,0x51,0x54,0x57,0x5a,0x5d,0x5f,0x62,0x65,0x68,0x6a,0x6e,0x71,0x73,0x76,0x79,0x7b,0x7f,0x82,0x84,0x88,0x8b,0x8e,0x91,0x93,0x95,0x97,0x9b,0x9d,0x9e,0x9f,0xa3,0xa4,0xa6,0xa7,0xa8,0xa9,0xab,0xac,0xac,0xad,0xad,0xad,0xad,0xad,0xac,0xac,0xab,0xa9,0xa8,0xa7,0xa6,0xa4,0xa2,0x9f,0x9e,0x9c,0x9b,0x96,0x95,0x93,0x91,0x8e,0x8b,0x87,0x84,0x81,0x7e,0x7c,0x79,0x76,0x73,0x70,0x6e,0x6a,0x67,0x64,0x62,0x5f,0x5d,0x59,0x56,0x54,0x51,0x4e,0x4b,0x49,0x45,0x44,0x41,0x3e,0x3c,0x3a,0x38,0x35,0x33,0x30,0x2d,0x2a,0x29,0x28,0x26,0x23,0x21,0x1f,0x1e,0x1c,0x1a,0x19,0x17,0x15,0x14,0x12,0x11,0x0f,0x0e,0x0c,0x0b,0x0a,0x08,0x07,0x06,0x05,0x04,0x03,0x02,0x02,0x01,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x01,0x01,0x02,0x02,0x03,0x04,0x05,0x06,0x07,0x09,0x0a,0x0b,0x0d,0x0e,0x10,0x11,0x13,0x14,0x16,0x18,0x19,0x1b,0x1d,0x1e,0x1f,0x22,0x24,0x26,0x28,0x29,0x2d,0x2f,0x30,0x34,0x37,0x39,0x3b,0x3d,0x40,0x43,0x45,0x47,0x4a,0x4d,0x50,0x52,0x55,0x58,0x5c,0x5e,0x61,0x63,0x67,0x6a,0x6d,0x70,0x73,0x76,0x78,0x7b,0x7f,0x81,0x84,0x87,0x8b,0x8e,0x90,0x93,0x96,0x98,0x9b,0x9e,0xa0,0xa2,0xa3,0xa6,0xa8,0xa9,0xaa,0xac,0xae,0xaf,0xaf,0xb0,0xb0,0xb1,0xb1,0xb1,0xb0,0xb0,0xaf,0xaf,0xad,0xad,0xaa,0xa9,0xa8,0xa6,0xa3,0xa2,0xa0,0x9e,0x9a,0x98,0x96,0x93,0x90,0x8d,0x8b,0x87,0x84,0x81,0x7e,0x7b,0x78,0x75,0x72,0x70,0x6c,0x69,0x66,0x63,0x61,0x5e,0x5b,0x58,0x55,0x51,0x4e,0x4b,0x4a,0x47,0x45,0x43,0x40,0x3d,0x3b,0x39,0x36,0x34,0x30,0x2f,0x2c,0x29,0x28,0x26,0x23,0x22,0x1f,0x1e,0x1d,0x1b,0x19,0x18,0x16,0x14,0x12,0x11,0x10,0x0e,0x0c,0x0a,0x0a,0x08,0x07,0x06,0x05,0x04,0x03,0x02,0x02,0x01,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x01,0x01,0x02,0x03,0x04,0x04,0x05,0x06,0x08,0x0a,0x0b,0x0c,0x0d,0x0f,0x10,0x12,0x13,0x15,0x17,0x18,0x1a,0x1c,0x1d,0x1f,0x21,0x22,0x25,0x27,0x29,0x2b,0x2e,0x30,0x32,0x34,0x37,0x3a,0x3c,0x3e,0x40,0x44,0x46,0x49,0x4b,0x4e,0x51,0x53,0x57,0x5a,0x5d,0x60,0x62,0x66,0x68,0x6b,0x70,0x71,0x74,0x79,0x7a,0x7d,0x81,0x84,0x87,0x8b,0x8e,0x91,0x94,0x96,0x99,0x9b,0x9f,0xa1,0xa3,0xa5,0xa7,0xaa,0xac,0xae,0xaf,0xb1,0xb3,0xb2,0xb4,0xb5,0xb5,0xb5,0xb6,0xb5,0xb5,0xb5,0xb4,0xb2,0xb2,0xb0,0xaf,0xae,0xac,0xaa,0xa7,0xa5,0xa3,0xa1,0x9e,0x9b,0x99,0x96,0x93,0x90,0x8e,0x8a,0x87,0x84,0x80,0x7d,0x7a,0x77,0x74,0x71,0x6e,0x6b,0x68,0x66,0x62,0x60,0x5c,0x59,0x56,0x53,0x50,0x4d,0x4b,0x49,0x46,0x43,0x40,0x3e,0x3c,0x3a,0x36,0x34,0x32,0x30,0x2d,0x2b,0x29,0x27,0x24,0x22,0x21,0x1f,0x1d,0x1b,0x1a,0x18,0x16,0x15,0x13,0x12,0x10,0x0f,0x0d,0x0b,0x0b,0x09,0x08,0x06,0x05,0x04,0x04,0x03,0x01,0x01,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x01,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x0a,0x0b,0x0c,0x0e,0x0f,0x10,0x12,0x14,0x15,0x17,0x19,0x1a,0x1c,0x1e,0x1f,0x21,0x24,0x26,0x28,0x2a,0x2c,0x2f,0x31,0x33,0x35,0x38,0x3b,0x3d,0x3f,0x41,0x45,0x47,0x4a,0x4c,0x4f,0x52,0x56,0x59,0x5c,0x5f,0x62,0x64,0x67,0x6b,0x6e,0x71,0x74,0x77,0x7b,0x7d,0x80,0x83,0x87,0x8a,0x8e,0x90,0x93,0x97,0x9a,0x9c,0x9f,0xa3,0xa5,0xa7,0xa9,0xab,0xae,0xb0,0xb2,0xb3,0xb5,0xb6,0xb7,0xb9,0xb9,0xb9,0xb9,0xba,0xb9,0xb9,0xb9,0xb9,0xb6,0xb6,0xb4,0xb3,0xb2,0xb0,0xac,0xab,0xa9,0xa7,0xa5,0xa2,0x9f,0x9c,0x99,0x97,0x94,0x90,0x8d,0x8a,0x86,0x83,0x80,0x7d,0x7a,0x77,0x73,0x71,0x6e,0x6a,0x67,0x64,0x62,0x5e,0x5b,0x58,0x55,0x52,0x4f,0x4c,0x4a,0x47,0x44,0x41,0x3f,0x3d,0x3b,0x37,0x35,0x33,0x31,0x2e,0x2c,0x2a,0x28,0x26,0x23,0x21,0x1f,0x1e,0x1c,0x1a,0x19,0x17,0x15,0x13,0x12,0x10,0x0f,0x0d,0x0b,0x0b,0x09,0x08,0x07,0x06,0x05,0x04,0x03,0x01,0x01,0x01,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x01,0x02,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x0a,0x0a,0x0c,0x0e,0x10,0x11,0x12,0x14,0x16,0x18,0x19,0x1b,0x1d,0x1e,0x20,0x22,0x23,0x26,0x28,0x2a,0x2c,0x30,0x32,0x34,0x36,0x38,0x3b,0x3e,0x40,0x42,0x46,0x48,0x4b,0x4d,0x51,0x54,0x56,0x5a,0x5d,0x60,0x63,0x66,0x6a,0x6c,0x6f,0x73,0x76,0x79,0x7d,0x7f,0x82,0x85,0x89,0x8d,0x91,0x93,0x96,0x9a,0x9c,0x9f,0xa2,0xa5,0xa8,0xab,0xad,0xaf,0xb2,0xb4,0xb6,0xb7,0xb9,0xba,0xbc,0xbd,0xbe,0xbe,0xbe,0xbf,0xbe,0xbe,0xbe,0xbd,0xbb,0xba,0xb9,0xb7,0xb6,0xb4,0xb1,0xaf,0xad,0xaa,0xa7,0xa4,0xa2,0x9f,0x9c,0x99,0x96,0x93,0x90,0x8d,0x89,0x85,0x82,0x7f,0x7c,0x79,0x76,0x72,0x6f,0x6c,0x69,0x66,0x62,0x60,0x5d,0x5a,0x56,0x53,0x50,0x4d,0x4b,0x48,0x45,0x42,0x40,0x3e,0x3b,0x38,0x36,0x34,0x32,0x2f,0x2c,0x2a,0x28,0x26,0x23,0x22,0x20,0x1e,0x1c,0x1b,0x19,0x17,0x16,0x14,0x12,0x11,0x10,0x0e,0x0c,0x0a,0x09,0x08,0x07,0x06,0x05,0x04,0x03,0x02,0x02,0x01,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x01,0x02,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x0a,0x0a,0x0c,0x0e,0x10,0x11,0x13,0x15,0x17,0x17,0x19,0x1b,0x1d,0x1f,0x20,0x22,0x25,0x27,0x29,0x2b,0x2d,0x30,0x32,0x35,0x37,0x39,0x3c,0x3f,0x41,0x43,0x47,0x49,0x4c,0x4e,0x52,0x55,0x59,0x5b,0x5e,0x62,0x65,0x67,0x6a,0x6e,0x71,0x75,0x78,0x7b,0x7d,0x81,0x84,0x88,0x8c,0x8f,0x93,0x96,0x99,0x9c,0x9f,0xa2,0xa5,0xa8,0xab,0xae,0xb0,0xb2,0xb5,0xb7,0xb9,0xbb,0xbd,0xbf,0xc0,0xc1,0xc1,0xc2,0xc2,0xc3,0xc2,0xc2,0xc1,0xc1,0xbf,0xbe,0xbc,0xbb,0xb9,0xb7,0xb4,0xb2,0xb0,0xad,0xaa,0xa7,0xa5,0xa2,0x9e,0x9c,0x99,0x96,0x92,0x8f,0x8b,0x88,0x84,0x81,0x7d,0x7a,0x78,0x74,0x71,0x6d,0x6a,0x67,0x65,0x61,0x5e,0x5b,0x58,0x55,0x51,0x4e,0x4c,0x49,0x46,0x43,0x41,0x3f,0x3c,0x39,0x37,0x35,0x32,0x2f,0x2d,0x2b,0x29,0x27,0x24,0x22,0x20,0x1f,0x1c,0x1b,0x19,0x17,0x16,0x14,0x13,0x11,0x10,0x0e,0x0c,0x0a,0x09,0x08,0x07,0x06,0x05,0x04,0x03,0x02,0x02,0x01,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x01,0x01,0x03,0x03,0x04,0x05,0x06,0x08,0x0a,0x0b,0x0c,0x0d,0x0f,0x10,0x11,0x13,0x15,0x16,0x18,0x1a,0x1b,0x1e,0x1f,0x21,0x23,0x25,0x27,0x29,0x2b,0x2e,0x31,0x33,0x35,0x37,0x3b,0x3d,0x40,0x42,0x44,0x48,0x4a,0x4d,0x4f,0x53,0x56,0x5a,0x5d,0x60,0x62,0x66,0x69,0x6d,0x6f,0x72,0x76,0x79,0x7c,0x80,0x83,0x87,0x8a,0x8e,0x91,0x95,0x98,0x9b,0x9f,0xa2,0xa5,0xa8,0xab,0xae,0xb1,0xb3,0xb5,0xb9,0xbb,0xbd,0xbf,0xc1,0xc3,0xc5,0xc6,0xc6,0xc7,0xc7,0xc7,0xc7,0xc7,0xc6,0xc6,0xc5,0xc3,0xc1,0xbf,0xbd,0xbb,0xb9,0xb6,0xb3,0xb0,0xad,0xaa,0xa8,0xa5,0xa2,0x9e,0x9b,0x98,0x94,0x91,0x8d,0x8a,0x87,0x83,0x7f,0x7c,0x79,0x75,0x72,0x6f,0x6c,0x69,0x66,0x62,0x5f,0x5d,0x59,0x56,0x52,0x4f,0x4d,0x4a,0x47,0x44,0x42,0x3f,0x3c,0x3a,0x37,0x35,0x33,0x31,0x2e,0x2b,0x29,0x26,0x25,0x23,0x21,0x1f,0x1e,0x1b,0x1a,0x18,0x16,0x14,0x13,0x11,0x10,0x0e,0x0c,0x0c,0x0a,0x09,0x07,0x06,0x05,0x04,0x03,0x03,0x01,0x01,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x01,0x01,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0b,0x0b,0x0d,0x0f,0x11,0x12,0x13,0x15,0x17,0x19,0x1a,0x1c,0x1e,0x20,0x21,0x23,0x26,0x28,0x2a,0x2c,0x2e,0x32,0x34,0x36,0x38,0x3b,0x3e,0x40,0x43,0x46,0x49,0x4b,0x4e,0x50,0x54,0x57,0x5b,0x5e,0x61,0x64,0x67,0x6a,0x6d,0x71,0x74,0x78,0x7b,0x7f,0x83,0x86,0x8a,0x8d,0x91,0x95,0x99,0x9c,0x9f,0xa2,0xa5,0xa8,0xab,0xaf,0xb2,0xb4,0xb7,0xba,0xbd,0xbf,0xc1,0xc3,0xc5,0xc7,0xc9,0xca,0xca,0xcb,0xcb,0xcb,0xcb,0xcb,0xca,0xca,0xc9,0xc7,0xc5,0xc3,0xc1,0xbf,0xbd,0xba,0xb7,0xb4,0xb1,0xae,0xab,0xa8,0xa4,0xa2,0x9f,0x9c,0x98,0x94,0x90,0x8d,0x8a,0x86,0x82,0x7f,0x7b,0x77,0x74,0x70,0x6d,0x6a,0x67,0x64,0x61,0x5e,0x5a,0x57,0x53,0x50,0x4e,0x4b,0x48,0x45,0x43,0x40,0x3e,0x3a,0x38,0x36,0x34,0x31,0x2e,0x2c,0x2a,0x28,0x25,0x23,0x21,0x20,0x1d,0x1c,0x1a,0x18,0x17,0x15,0x13,0x12,0x11,0x0f,0x0d,0x0b,0x0a,0x09,0x08,0x07,0x06,0x05,0x04,0x03,0x01,0x01,0x00,0x00,0x00, +0x00,0x00,0x00,0x01,0x02,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0c,0x0e,0x10,0x11,0x12,0x14,0x16,0x17,0x19,0x1b,0x1c,0x1e,0x20,0x22,0x24,0x26,0x28,0x2a,0x2c,0x2f,0x32,0x34,0x36,0x39,0x3c,0x3f,0x41,0x44,0x47,0x4a,0x4c,0x50,0x51,0x55,0x58,0x5c,0x5f,0x62,0x67,0x69,0x6c,0x6f,0x73,0x76,0x79,0x7d,0x80,0x84,0x88,0x8b,0x8f,0x93,0x97,0x9b,0x9e,0xa1,0xa5,0xa8,0xab,0xae,0xb2,0xb5,0xb7,0xbb,0xbe,0xc0,0xc3,0xc5,0xc6,0xca,0xcb,0xcd,0xcf,0xcf,0xd0,0xd0,0xd1,0xd0,0xd0,0xcf,0xcf,0xcd,0xcb,0xc8,0xc6,0xc5,0xc3,0xbf,0xbd,0xbb,0xb7,0xb4,0xb1,0xae,0xab,0xa8,0xa4,0xa1,0x9e,0x9a,0x96,0x92,0x8f,0x8b,0x87,0x83,0x80,0x7d,0x79,0x76,0x72,0x6f,0x6c,0x69,0x66,0x63,0x5f,0x5b,0x58,0x54,0x51,0x50,0x4c,0x49,0x46,0x44,0x42,0x3f,0x3c,0x39,0x36,0x34,0x33,0x30,0x2c,0x2a,0x28,0x25,0x24,0x22,0x20,0x1e,0x1c,0x1b,0x19,0x17,0x15,0x14,0x12,0x11,0x0f,0x0e,0x0c,0x0a,0x09,0x08,0x07,0x06,0x05,0x04,0x02,0x02,0x01,0x01,0x00,0x00, +0x00,0x00,0x00,0x01,0x02,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0d,0x0e,0x10,0x11,0x13,0x14,0x16,0x18,0x1a,0x1b,0x1e,0x1f,0x21,0x23,0x25,0x27,0x29,0x2b,0x2e,0x31,0x33,0x35,0x38,0x3a,0x3d,0x40,0x43,0x44,0x47,0x4a,0x4e,0x50,0x53,0x57,0x5a,0x5e,0x61,0x64,0x68,0x6b,0x6e,0x71,0x75,0x78,0x7b,0x7f,0x82,0x86,0x8a,0x8d,0x91,0x95,0x99,0x9d,0xa0,0xa3,0xa7,0xab,0xae,0xb1,0xb5,0xb8,0xbc,0xbf,0xc2,0xc4,0xc7,0xc9,0xcb,0xce,0xcf,0xd1,0xd3,0xd4,0xd5,0xd5,0xd5,0xd5,0xd5,0xd4,0xd3,0xd1,0xcf,0xcd,0xcb,0xc9,0xc7,0xc3,0xc1,0xbf,0xbb,0xb8,0xb4,0xb1,0xae,0xab,0xa7,0xa3,0xa0,0x9c,0x98,0x94,0x91,0x8d,0x89,0x85,0x82,0x7f,0x7b,0x78,0x74,0x71,0x6e,0x6b,0x67,0x64,0x61,0x5d,0x5a,0x56,0x53,0x50,0x4e,0x4b,0x48,0x44,0x42,0x3f,0x3c,0x3a,0x38,0x35,0x32,0x30,0x2e,0x2b,0x29,0x26,0x25,0x23,0x21,0x1f,0x1d,0x1b,0x19,0x18,0x16,0x14,0x13,0x11,0x10,0x0e,0x0d,0x0b,0x09,0x08,0x07,0x06,0x05,0x04,0x02,0x02,0x01,0x01,0x00,0x00, +0x00,0x00,0x00,0x01,0x02,0x02,0x03,0x04,0x05,0x06,0x07,0x09,0x0a,0x0c,0x0c,0x0e,0x10,0x11,0x13,0x14,0x16,0x18,0x1a,0x1b,0x1e,0x1f,0x21,0x23,0x25,0x27,0x2a,0x2c,0x2e,0x31,0x34,0x36,0x38,0x3a,0x3d,0x40,0x43,0x46,0x49,0x4c,0x4f,0x50,0x54,0x58,0x5b,0x5f,0x62,0x65,0x69,0x6c,0x6f,0x72,0x76,0x78,0x7c,0x80,0x84,0x88,0x8c,0x8f,0x93,0x97,0x9b,0x9f,0xa2,0xa5,0xa9,0xad,0xb0,0xb3,0xb7,0xba,0xbe,0xc2,0xc5,0xc7,0xca,0xcc,0xcf,0xd3,0xd3,0xd5,0xd8,0xd9,0xda,0xda,0xd9,0xda,0xda,0xd9,0xd8,0xd6,0xd3,0xd2,0xcf,0xcc,0xca,0xc7,0xc4,0xc2,0xbe,0xba,0xb6,0xb3,0xb0,0xad,0xa9,0xa5,0xa2,0x9e,0x9a,0x96,0x93,0x8f,0x8b,0x87,0x84,0x80,0x7c,0x79,0x75,0x72,0x6f,0x6c,0x68,0x65,0x62,0x5e,0x5b,0x57,0x54,0x50,0x4f,0x4b,0x48,0x46,0x43,0x40,0x3d,0x3a,0x38,0x36,0x33,0x31,0x2e,0x2c,0x2a,0x27,0x25,0x23,0x21,0x1f,0x1d,0x1b,0x19,0x18,0x16,0x14,0x13,0x11,0x10,0x0e,0x0c,0x0b,0x0a,0x08,0x07,0x06,0x05,0x04,0x02,0x02,0x01,0x01,0x00,0x00, +0x00,0x00,0x00,0x01,0x01,0x03,0x03,0x04,0x05,0x06,0x07,0x09,0x0b,0x0b,0x0d,0x0f,0x11,0x12,0x13,0x15,0x17,0x18,0x1a,0x1c,0x1d,0x20,0x22,0x23,0x25,0x28,0x2a,0x2c,0x2f,0x32,0x34,0x36,0x39,0x3b,0x3e,0x41,0x44,0x46,0x49,0x4d,0x4f,0x52,0x55,0x59,0x5c,0x60,0x63,0x66,0x6a,0x6d,0x70,0x73,0x77,0x7a,0x7f,0x82,0x85,0x89,0x8d,0x91,0x95,0x99,0x9c,0xa0,0xa5,0xa7,0xab,0xaf,0xb2,0xb6,0xba,0xbd,0xc1,0xc5,0xc8,0xcb,0xce,0xd0,0xd3,0xd6,0xd8,0xda,0xdb,0xdc,0xdd,0xdd,0xde,0xdd,0xdd,0xdc,0xdb,0xd9,0xd8,0xd5,0xd3,0xd0,0xce,0xca,0xc7,0xc5,0xc1,0xbd,0xb9,0xb5,0xb2,0xaf,0xab,0xa7,0xa5,0xa1,0x9d,0x99,0x94,0x91,0x8d,0x89,0x85,0x81,0x7e,0x7a,0x76,0x73,0x70,0x6d,0x69,0x66,0x63,0x5f,0x5c,0x58,0x55,0x52,0x4f,0x4c,0x49,0x46,0x43,0x40,0x3d,0x3b,0x39,0x36,0x33,0x31,0x2f,0x2c,0x2a,0x27,0x25,0x23,0x22,0x1f,0x1d,0x1c,0x1a,0x18,0x16,0x15,0x13,0x12,0x10,0x0f,0x0d,0x0b,0x0a,0x09,0x07,0x06,0x05,0x04,0x03,0x03,0x01,0x01,0x00,0x00, +0x00,0x00,0x00,0x01,0x01,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0d,0x0f,0x11,0x12,0x14,0x15,0x17,0x19,0x1b,0x1c,0x1e,0x20,0x22,0x24,0x26,0x27,0x2a,0x2d,0x2f,0x31,0x35,0x37,0x39,0x3c,0x3e,0x41,0x44,0x47,0x4a,0x4c,0x50,0x53,0x56,0x5a,0x5d,0x61,0x64,0x67,0x6b,0x6e,0x71,0x74,0x78,0x7c,0x80,0x83,0x87,0x8b,0x8f,0x93,0x97,0x9b,0x9f,0xa3,0xa6,0xaa,0xae,0xb2,0xb5,0xb9,0xbd,0xc0,0xc4,0xc8,0xca,0xcf,0xd2,0xd4,0xd7,0xda,0xdc,0xde,0xdf,0xe0,0xe1,0xe1,0xe2,0xe1,0xe1,0xe0,0xdf,0xdd,0xdc,0xd9,0xd7,0xd4,0xd2,0xce,0xcb,0xc8,0xc4,0xc0,0xbc,0xb9,0xb5,0xb2,0xae,0xaa,0xa6,0xa2,0x9e,0x9a,0x96,0x93,0x8f,0x8b,0x87,0x83,0x7f,0x7b,0x77,0x74,0x71,0x6e,0x6a,0x67,0x64,0x60,0x5d,0x59,0x56,0x53,0x50,0x4c,0x49,0x47,0x44,0x41,0x3e,0x3c,0x39,0x37,0x34,0x31,0x2f,0x2c,0x29,0x27,0x26,0x24,0x22,0x1f,0x1e,0x1c,0x1a,0x19,0x17,0x15,0x14,0x12,0x10,0x0f,0x0d,0x0b,0x0a,0x09,0x08,0x07,0x06,0x05,0x04,0x03,0x01,0x01,0x00,0x00, +0x00,0x00,0x01,0x01,0x01,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0c,0x0e,0x0f,0x11,0x13,0x14,0x15,0x17,0x19,0x1b,0x1d,0x1e,0x21,0x22,0x24,0x26,0x29,0x2b,0x2d,0x30,0x33,0x35,0x37,0x3a,0x3c,0x3f,0x42,0x44,0x48,0x4b,0x4e,0x51,0x53,0x56,0x5a,0x5d,0x61,0x64,0x67,0x6b,0x6f,0x72,0x75,0x79,0x7d,0x81,0x84,0x88,0x8c,0x91,0x94,0x98,0x9c,0xa0,0xa4,0xa8,0xac,0xb0,0xb4,0xb7,0xbb,0xbf,0xc3,0xc6,0xca,0xce,0xd2,0xd5,0xd8,0xda,0xde,0xe0,0xe2,0xe3,0xe5,0xe6,0xe6,0xe6,0xe6,0xe6,0xe5,0xe3,0xe1,0xe0,0xdd,0xda,0xd8,0xd5,0xd1,0xce,0xca,0xc6,0xc3,0xbf,0xbb,0xb7,0xb3,0xaf,0xab,0xa8,0xa4,0xa0,0x9c,0x98,0x94,0x90,0x8c,0x88,0x84,0x80,0x7c,0x78,0x75,0x72,0x6f,0x6b,0x67,0x64,0x60,0x5d,0x59,0x56,0x53,0x51,0x4d,0x4a,0x48,0x44,0x41,0x3e,0x3c,0x3a,0x37,0x34,0x32,0x30,0x2d,0x2b,0x28,0x26,0x24,0x22,0x21,0x1e,0x1d,0x1b,0x18,0x17,0x15,0x14,0x13,0x11,0x0f,0x0e,0x0c,0x0a,0x09,0x08,0x07,0x06,0x05,0x04,0x03,0x01,0x01,0x01,0x00, +0x00,0x00,0x01,0x01,0x02,0x02,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0c,0x0e,0x0f,0x11,0x13,0x14,0x16,0x18,0x19,0x1b,0x1d,0x1f,0x21,0x23,0x25,0x27,0x28,0x2b,0x2e,0x30,0x32,0x35,0x38,0x3a,0x3d,0x3f,0x42,0x45,0x48,0x4b,0x4e,0x51,0x54,0x57,0x5b,0x5e,0x62,0x65,0x68,0x6c,0x70,0x73,0x76,0x7a,0x7e,0x82,0x85,0x89,0x8d,0x92,0x96,0x9a,0x9e,0xa2,0xa6,0xa9,0xad,0xb1,0xb5,0xb9,0xbd,0xc1,0xc5,0xc8,0xcc,0xd0,0xd4,0xd8,0xdb,0xdd,0xe1,0xe3,0xe5,0xe7,0xe8,0xe9,0xe9,0xea,0xe9,0xe9,0xe8,0xe7,0xe5,0xe3,0xe0,0xdd,0xdb,0xd8,0xd4,0xd0,0xcc,0xc8,0xc5,0xc1,0xbd,0xb9,0xb5,0xb1,0xad,0xa9,0xa5,0xa1,0x9d,0x99,0x96,0x91,0x8d,0x89,0x85,0x81,0x7d,0x79,0x76,0x73,0x6f,0x6b,0x68,0x65,0x61,0x5e,0x5a,0x57,0x54,0x50,0x4e,0x4b,0x47,0x45,0x42,0x3f,0x3d,0x3a,0x38,0x34,0x32,0x30,0x2d,0x2a,0x28,0x27,0x25,0x23,0x20,0x1f,0x1d,0x1b,0x19,0x17,0x16,0x14,0x13,0x11,0x0f,0x0e,0x0c,0x0a,0x09,0x08,0x07,0x06,0x05,0x04,0x02,0x02,0x01,0x01,0x00, +0x00,0x00,0x01,0x01,0x02,0x02,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0c,0x0e,0x0f,0x11,0x13,0x14,0x16,0x18,0x19,0x1b,0x1d,0x1f,0x21,0x23,0x25,0x27,0x2a,0x2c,0x2e,0x31,0x34,0x36,0x38,0x3a,0x3d,0x40,0x43,0x45,0x49,0x4c,0x4f,0x52,0x54,0x58,0x5c,0x5f,0x63,0x66,0x69,0x6d,0x70,0x73,0x77,0x7b,0x7f,0x83,0x86,0x8b,0x8f,0x93,0x97,0x9b,0x9f,0xa3,0xa7,0xab,0xaf,0xb3,0xb7,0xbb,0xbf,0xc3,0xc7,0xca,0xcf,0xd3,0xd7,0xda,0xdd,0xe0,0xe4,0xe6,0xe8,0xea,0xeb,0xed,0xed,0xed,0xed,0xed,0xeb,0xea,0xe9,0xe7,0xe3,0xe0,0xdd,0xda,0xd6,0xd3,0xce,0xca,0xc7,0xc3,0xbe,0xbb,0xb6,0xb2,0xae,0xab,0xa7,0xa3,0x9f,0x9a,0x97,0x92,0x8e,0x8b,0x86,0x82,0x7e,0x7a,0x77,0x73,0x70,0x6c,0x69,0x66,0x62,0x5f,0x5b,0x58,0x54,0x52,0x4e,0x4b,0x49,0x45,0x42,0x3f,0x3d,0x3a,0x38,0x35,0x33,0x31,0x2e,0x2c,0x29,0x27,0x25,0x23,0x20,0x1f,0x1d,0x1b,0x19,0x17,0x16,0x14,0x13,0x11,0x0f,0x0e,0x0c,0x0a,0x09,0x08,0x07,0x06,0x05,0x04,0x02,0x02,0x01,0x01,0x00, +0x00,0x00,0x01,0x01,0x02,0x02,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0c,0x0e,0x0f,0x11,0x13,0x14,0x16,0x18,0x19,0x1b,0x1d,0x1f,0x21,0x23,0x25,0x27,0x2a,0x2c,0x2f,0x31,0x33,0x36,0x38,0x3b,0x3d,0x40,0x43,0x46,0x49,0x4c,0x4f,0x52,0x55,0x58,0x5c,0x5f,0x63,0x66,0x6a,0x6e,0x71,0x74,0x78,0x7c,0x80,0x84,0x88,0x8b,0x8f,0x94,0x98,0x9c,0xa0,0xa4,0xa8,0xac,0xb1,0xb5,0xb9,0xbd,0xc1,0xc5,0xca,0xce,0xd3,0xd6,0xda,0xde,0xe1,0xe3,0xe7,0xea,0xec,0xee,0xef,0xf1,0xf1,0xf1,0xf1,0xf1,0xef,0xee,0xeb,0xe9,0xe6,0xe3,0xe1,0xde,0xda,0xd6,0xd2,0xce,0xc9,0xc5,0xc0,0xbd,0xb8,0xb4,0xb0,0xac,0xa8,0xa4,0xa0,0x9b,0x98,0x93,0x8f,0x8b,0x87,0x83,0x7f,0x7b,0x77,0x74,0x71,0x6d,0x69,0x66,0x62,0x5f,0x5b,0x58,0x55,0x51,0x4f,0x4c,0x48,0x46,0x43,0x40,0x3d,0x3b,0x38,0x36,0x33,0x31,0x2e,0x2b,0x29,0x27,0x25,0x23,0x20,0x1f,0x1d,0x1b,0x19,0x17,0x16,0x14,0x13,0x11,0x0f,0x0e,0x0c,0x0a,0x09,0x08,0x07,0x06,0x05,0x04,0x02,0x02,0x01,0x01,0x00, +0x00,0x00,0x01,0x01,0x02,0x02,0x04,0x05,0x06,0x07,0x08,0x09,0x0b,0x0d,0x0e,0x10,0x11,0x13,0x14,0x16,0x18,0x19,0x1b,0x1d,0x20,0x21,0x23,0x25,0x27,0x2a,0x2c,0x2f,0x31,0x34,0x37,0x39,0x3b,0x3e,0x41,0x44,0x47,0x49,0x4c,0x50,0x52,0x55,0x59,0x5d,0x60,0x64,0x67,0x6a,0x6e,0x71,0x75,0x78,0x7c,0x80,0x84,0x89,0x8c,0x90,0x95,0x99,0x9e,0xa2,0xa5,0xa9,0xad,0xb3,0xb7,0xba,0xbf,0xc2,0xc6,0xcb,0xcf,0xd4,0xd8,0xdc,0xe0,0xe3,0xe6,0xe9,0xec,0xef,0xf1,0xf2,0xf4,0xf4,0xf4,0xf4,0xf4,0xf2,0xf1,0xee,0xeb,0xe9,0xe6,0xe3,0xe0,0xdc,0xd7,0xd3,0xcf,0xca,0xc6,0xc2,0xbf,0xb9,0xb5,0xb3,0xad,0xa8,0xa6,0xa2,0x9c,0x99,0x94,0x90,0x8c,0x89,0x84,0x81,0x7d,0x78,0x75,0x71,0x6d,0x6a,0x67,0x63,0x60,0x5c,0x59,0x55,0x53,0x4f,0x4c,0x49,0x46,0x43,0x40,0x3e,0x3b,0x39,0x37,0x34,0x31,0x2e,0x2b,0x29,0x27,0x25,0x23,0x20,0x1f,0x1d,0x1b,0x19,0x17,0x16,0x14,0x13,0x11,0x10,0x0e,0x0c,0x0b,0x09,0x08,0x07,0x06,0x05,0x04,0x02,0x02,0x01,0x01,0x00, +0x00,0x00,0x01,0x01,0x02,0x02,0x04,0x05,0x06,0x07,0x08,0x09,0x0b,0x0d,0x0e,0x10,0x12,0x13,0x14,0x16,0x17,0x1a,0x1c,0x1d,0x20,0x22,0x23,0x25,0x27,0x2a,0x2c,0x2f,0x31,0x34,0x37,0x39,0x3c,0x3e,0x41,0x44,0x47,0x4a,0x4d,0x50,0x53,0x56,0x59,0x5d,0x61,0x65,0x68,0x6b,0x6f,0x72,0x76,0x79,0x7d,0x81,0x85,0x89,0x8e,0x92,0x96,0x9a,0x9e,0xa2,0xa7,0xab,0xaf,0xb4,0xb8,0xbc,0xc0,0xc4,0xc8,0xcd,0xd1,0xd6,0xda,0xde,0xe2,0xe5,0xe9,0xeb,0xee,0xf1,0xf3,0xf6,0xf7,0xf8,0xf8,0xf8,0xf7,0xf5,0xf3,0xf1,0xee,0xeb,0xe8,0xe5,0xe2,0xde,0xd9,0xd5,0xd1,0xcc,0xc8,0xc4,0xc0,0xbb,0xb7,0xb4,0xaf,0xaa,0xa6,0xa2,0x9e,0x9a,0x96,0x92,0x8d,0x89,0x85,0x81,0x7d,0x79,0x76,0x72,0x6e,0x6b,0x67,0x64,0x60,0x5c,0x59,0x56,0x53,0x50,0x4d,0x49,0x47,0x44,0x41,0x3e,0x3c,0x39,0x37,0x34,0x31,0x2e,0x2b,0x29,0x27,0x25,0x23,0x22,0x1f,0x1d,0x1b,0x1a,0x17,0x16,0x14,0x13,0x11,0x10,0x0e,0x0c,0x0b,0x09,0x08,0x07,0x06,0x05,0x04,0x02,0x02,0x01,0x01,0x00, +0x00,0x00,0x01,0x01,0x02,0x02,0x04,0x05,0x06,0x07,0x09,0x0a,0x0b,0x0c,0x0e,0x10,0x12,0x13,0x15,0x16,0x17,0x1a,0x1c,0x1d,0x1f,0x22,0x24,0x25,0x27,0x29,0x2c,0x2f,0x31,0x34,0x37,0x3a,0x3c,0x3e,0x41,0x44,0x47,0x4a,0x4d,0x51,0x53,0x56,0x5a,0x5e,0x61,0x65,0x68,0x6b,0x6f,0x73,0x76,0x7a,0x7e,0x82,0x86,0x89,0x8e,0x92,0x96,0x9a,0x9f,0xa3,0xa8,0xac,0xaf,0xb4,0xb8,0xbd,0xc1,0xc6,0xca,0xcf,0xd3,0xd7,0xdb,0xdf,0xe3,0xe6,0xea,0xed,0xf0,0xf3,0xf5,0xf9,0xf9,0xfb,0xfa,0xfb,0xf9,0xf7,0xf5,0xf3,0xf0,0xed,0xea,0xe6,0xe3,0xdf,0xdb,0xd7,0xd3,0xce,0xca,0xc5,0xc1,0xbc,0xb8,0xb3,0xaf,0xab,0xa7,0xa3,0x9e,0x9a,0x96,0x92,0x8d,0x89,0x84,0x81,0x7d,0x79,0x76,0x73,0x6f,0x6b,0x68,0x64,0x61,0x5d,0x5a,0x56,0x52,0x50,0x4d,0x49,0x47,0x44,0x41,0x3e,0x3c,0x3a,0x37,0x34,0x31,0x2f,0x2c,0x29,0x27,0x25,0x24,0x22,0x1f,0x1d,0x1b,0x1a,0x18,0x16,0x15,0x13,0x11,0x10,0x0e,0x0c,0x0b,0x0a,0x09,0x07,0x06,0x05,0x04,0x02,0x02,0x01,0x01,0x00, +0x00,0x00,0x01,0x01,0x02,0x02,0x04,0x05,0x06,0x07,0x09,0x0a,0x0b,0x0c,0x0e,0x10,0x12,0x13,0x15,0x16,0x18,0x1a,0x1c,0x1e,0x1f,0x22,0x24,0x26,0x27,0x29,0x2c,0x2f,0x31,0x34,0x37,0x3a,0x3c,0x3e,0x41,0x44,0x48,0x4a,0x4d,0x51,0x54,0x57,0x5a,0x5e,0x61,0x65,0x68,0x6c,0x70,0x73,0x76,0x7a,0x7e,0x82,0x86,0x8a,0x8f,0x93,0x97,0x9b,0x9f,0xa3,0xa8,0xac,0xb0,0xb5,0xb9,0xbe,0xc2,0xc6,0xca,0xcf,0xd4,0xd8,0xdd,0xe1,0xe5,0xe8,0xeb,0xef,0xf2,0xf6,0xf8,0xfa,0xfc,0xfc,0xfd,0xfc,0xfc,0xfa,0xf8,0xf5,0xf2,0xee,0xeb,0xe8,0xe4,0xe0,0xdd,0xd8,0xd4,0xce,0xc9,0xc5,0xc2,0xbd,0xb9,0xb4,0xb0,0xac,0xa7,0xa3,0x9f,0x9b,0x97,0x93,0x8e,0x8a,0x85,0x82,0x7e,0x7a,0x76,0x73,0x6f,0x6b,0x67,0x64,0x61,0x5d,0x5a,0x57,0x54,0x50,0x4d,0x4a,0x47,0x44,0x41,0x3e,0x3c,0x3a,0x37,0x34,0x31,0x2f,0x2c,0x29,0x27,0x26,0x24,0x21,0x1f,0x1e,0x1c,0x19,0x18,0x16,0x15,0x13,0x11,0x10,0x0e,0x0c,0x0b,0x0a,0x09,0x07,0x06,0x05,0x04,0x02,0x02,0x01,0x01,0x00, +0x00,0x00,0x01,0x01,0x02,0x02,0x04,0x05,0x06,0x07,0x09,0x0a,0x0b,0x0d,0x0f,0x10,0x12,0x13,0x15,0x16,0x18,0x1a,0x1c,0x1e,0x1f,0x22,0x24,0x26,0x28,0x2b,0x2d,0x2f,0x32,0x35,0x37,0x3a,0x3c,0x3f,0x42,0x45,0x48,0x4a,0x4d,0x51,0x54,0x57,0x5a,0x5e,0x61,0x64,0x68,0x6c,0x70,0x73,0x77,0x7b,0x7f,0x83,0x87,0x8a,0x8f,0x93,0x97,0x9b,0xa0,0xa4,0xa9,0xad,0xb0,0xb5,0xb9,0xbe,0xc2,0xc7,0xcb,0xd0,0xd4,0xd8,0xdd,0xe1,0xe6,0xe9,0xec,0xf0,0xf3,0xf7,0xf9,0xfc,0xfd,0xfe,0xfe,0xfe,0xfd,0xfb,0xf9,0xf6,0xf3,0xef,0xec,0xe9,0xe5,0xe1,0xdc,0xd8,0xd4,0xcf,0xca,0xc6,0xc2,0xbd,0xb9,0xb4,0xb0,0xac,0xa8,0xa4,0x9f,0x9b,0x97,0x93,0x8e,0x8a,0x86,0x82,0x7e,0x7a,0x77,0x73,0x6f,0x6c,0x68,0x64,0x61,0x5d,0x5a,0x57,0x54,0x50,0x4d,0x4a,0x47,0x44,0x41,0x3f,0x3c,0x3a,0x36,0x34,0x32,0x2f,0x2d,0x2a,0x28,0x26,0x24,0x21,0x1f,0x1e,0x1c,0x19,0x18,0x16,0x15,0x13,0x12,0x10,0x0f,0x0d,0x0b,0x0a,0x09,0x07,0x06,0x05,0x04,0x02,0x02,0x01,0x01,0x00, +0x00,0x00,0x01,0x01,0x02,0x02,0x04,0x05,0x06,0x07,0x09,0x0a,0x0b,0x0d,0x0f,0x10,0x12,0x13,0x15,0x16,0x18,0x1a,0x1c,0x1e,0x1f,0x22,0x24,0x26,0x28,0x2b,0x2d,0x30,0x32,0x34,0x37,0x3a,0x3c,0x3f,0x42,0x45,0x47,0x4b,0x4e,0x50,0x54,0x57,0x5a,0x5e,0x61,0x64,0x68,0x6c,0x70,0x73,0x77,0x7b,0x7f,0x83,0x87,0x8a,0x8f,0x93,0x97,0x9b,0xa0,0xa4,0xa9,0xad,0xb2,0xb5,0xb9,0xbe,0xc2,0xc7,0xcb,0xd0,0xd5,0xd9,0xde,0xe2,0xe6,0xe9,0xed,0xf1,0xf4,0xf8,0xfb,0xfc,0xfd,0xfe,0xfe,0xfe,0xfd,0xfc,0xfa,0xf7,0xf4,0xf0,0xed,0xe9,0xe5,0xe1,0xde,0xd9,0xd5,0xcf,0xca,0xc6,0xc2,0xbd,0xb9,0xb5,0xb1,0xad,0xa8,0xa4,0x9f,0x9b,0x97,0x93,0x8e,0x8a,0x86,0x82,0x7e,0x7a,0x77,0x73,0x6f,0x6c,0x68,0x64,0x61,0x5d,0x5a,0x57,0x54,0x50,0x4d,0x4b,0x47,0x44,0x41,0x3f,0x3c,0x3a,0x36,0x34,0x32,0x2f,0x2c,0x2a,0x28,0x26,0x24,0x21,0x1f,0x1e,0x1c,0x19,0x18,0x16,0x15,0x13,0x12,0x10,0x0f,0x0d,0x0b,0x0a,0x09,0x07,0x06,0x05,0x04,0x02,0x02,0x01,0x01,0x00, +0x00,0x00,0x01,0x01,0x02,0x02,0x04,0x05,0x06,0x07,0x09,0x0a,0x0b,0x0d,0x0f,0x10,0x12,0x13,0x15,0x16,0x18,0x1a,0x1c,0x1e,0x1f,0x22,0x24,0x26,0x28,0x2b,0x2d,0x30,0x32,0x34,0x37,0x3a,0x3c,0x3f,0x42,0x45,0x47,0x4b,0x4e,0x50,0x54,0x57,0x5a,0x5e,0x61,0x64,0x68,0x6c,0x70,0x73,0x77,0x7b,0x7f,0x83,0x87,0x8a,0x8f,0x93,0x97,0x9b,0xa0,0xa4,0xa9,0xad,0xb1,0xb6,0xba,0xbe,0xc2,0xc7,0xcb,0xd0,0xd5,0xd9,0xde,0xe2,0xe6,0xea,0xed,0xf1,0xf4,0xf8,0xfa,0xfd,0xfe,0xfe,0xff,0xfe,0xfe,0xfc,0xfa,0xf7,0xf4,0xf0,0xed,0xea,0xe6,0xe2,0xdd,0xd9,0xd5,0xcf,0xca,0xc6,0xc2,0xbd,0xb9,0xb6,0xb1,0xad,0xa8,0xa4,0x9f,0x9b,0x97,0x93,0x8e,0x8a,0x86,0x82,0x7e,0x7a,0x77,0x73,0x6f,0x6c,0x68,0x64,0x61,0x5d,0x5a,0x57,0x54,0x50,0x4d,0x4b,0x47,0x44,0x41,0x3f,0x3c,0x3a,0x36,0x34,0x32,0x2f,0x2c,0x2a,0x28,0x26,0x24,0x21,0x1f,0x1e,0x1c,0x19,0x18,0x16,0x15,0x13,0x12,0x10,0x0f,0x0d,0x0b,0x0a,0x09,0x07,0x06,0x05,0x04,0x02,0x02,0x01,0x01,0x00, +0x00,0x00,0x01,0x01,0x02,0x02,0x04,0x05,0x06,0x07,0x09,0x0a,0x0b,0x0d,0x0f,0x10,0x12,0x13,0x15,0x16,0x18,0x1a,0x1c,0x1e,0x1f,0x22,0x24,0x26,0x28,0x2b,0x2d,0x30,0x32,0x34,0x37,0x3a,0x3c,0x3f,0x42,0x45,0x47,0x4b,0x4e,0x50,0x54,0x57,0x5a,0x5e,0x61,0x64,0x68,0x6c,0x70,0x73,0x77,0x7b,0x7f,0x83,0x87,0x8a,0x8f,0x93,0x97,0x9b,0xa0,0xa4,0xa9,0xad,0xb2,0xb5,0xb9,0xbe,0xc2,0xc7,0xcb,0xd0,0xd5,0xd9,0xde,0xe2,0xe6,0xe9,0xed,0xf1,0xf4,0xf8,0xfb,0xfc,0xfd,0xfe,0xfe,0xfe,0xfd,0xfc,0xfa,0xf7,0xf4,0xf0,0xed,0xe9,0xe5,0xe1,0xdd,0xd9,0xd5,0xcf,0xca,0xc6,0xc2,0xbd,0xb9,0xb5,0xb1,0xad,0xa8,0xa4,0x9f,0x9b,0x97,0x93,0x8e,0x8a,0x86,0x82,0x7e,0x7a,0x77,0x73,0x6f,0x6c,0x68,0x64,0x61,0x5d,0x5a,0x57,0x54,0x50,0x4d,0x4b,0x47,0x44,0x41,0x3f,0x3c,0x3a,0x36,0x34,0x32,0x2f,0x2c,0x2a,0x28,0x26,0x24,0x21,0x1f,0x1e,0x1c,0x19,0x18,0x16,0x15,0x13,0x12,0x10,0x0f,0x0d,0x0b,0x0a,0x09,0x07,0x06,0x05,0x04,0x02,0x02,0x01,0x01,0x00, +0x00,0x00,0x01,0x01,0x02,0x02,0x04,0x05,0x06,0x07,0x09,0x0a,0x0b,0x0d,0x0f,0x10,0x12,0x13,0x15,0x16,0x18,0x1a,0x1c,0x1e,0x1f,0x22,0x24,0x26,0x28,0x2a,0x2d,0x2f,0x32,0x35,0x37,0x3a,0x3c,0x3f,0x42,0x45,0x48,0x4a,0x4d,0x51,0x54,0x57,0x5a,0x5e,0x61,0x64,0x68,0x6c,0x70,0x73,0x77,0x7b,0x7f,0x83,0x87,0x8a,0x8f,0x93,0x97,0x9b,0xa0,0xa4,0xa9,0xad,0xb0,0xb5,0xb9,0xbe,0xc2,0xc7,0xcb,0xd0,0xd4,0xd8,0xdd,0xe1,0xe6,0xe9,0xec,0xf0,0xf3,0xf7,0xf9,0xfc,0xfd,0xfe,0xfe,0xfe,0xfd,0xfb,0xf9,0xf6,0xf3,0xef,0xec,0xe9,0xe5,0xe1,0xdc,0xd8,0xd4,0xcf,0xca,0xc6,0xc2,0xbd,0xb9,0xb4,0xb0,0xac,0xa8,0xa4,0x9f,0x9b,0x97,0x93,0x8e,0x8a,0x86,0x82,0x7e,0x7a,0x77,0x73,0x6f,0x6c,0x68,0x64,0x61,0x5d,0x5a,0x57,0x54,0x50,0x4d,0x4a,0x47,0x44,0x41,0x3f,0x3c,0x3a,0x36,0x34,0x32,0x2f,0x2d,0x2a,0x28,0x26,0x24,0x21,0x1f,0x1e,0x1c,0x19,0x18,0x16,0x15,0x13,0x12,0x10,0x0f,0x0d,0x0b,0x0a,0x09,0x07,0x06,0x05,0x04,0x02,0x02,0x01,0x01,0x00, +0x00,0x00,0x01,0x01,0x02,0x02,0x04,0x05,0x06,0x07,0x09,0x0a,0x0b,0x0c,0x0e,0x10,0x12,0x13,0x15,0x16,0x18,0x1a,0x1c,0x1e,0x1f,0x22,0x24,0x26,0x27,0x29,0x2c,0x2f,0x31,0x34,0x37,0x3a,0x3c,0x3e,0x41,0x44,0x48,0x4a,0x4d,0x51,0x54,0x57,0x5a,0x5e,0x61,0x65,0x68,0x6c,0x70,0x73,0x76,0x7a,0x7e,0x82,0x86,0x8a,0x8f,0x93,0x97,0x9b,0x9f,0xa3,0xa8,0xac,0xb0,0xb5,0xb9,0xbe,0xc2,0xc6,0xca,0xcf,0xd4,0xd8,0xdd,0xe1,0xe5,0xe8,0xea,0xef,0xf2,0xf5,0xf8,0xfa,0xfb,0xfc,0xfc,0xfc,0xfb,0xf9,0xf7,0xf5,0xf2,0xee,0xeb,0xe8,0xe4,0xe0,0xdd,0xd8,0xd4,0xce,0xc9,0xc5,0xc2,0xbd,0xb9,0xb3,0xb0,0xac,0xa7,0xa3,0x9f,0x9b,0x97,0x93,0x8e,0x8a,0x85,0x82,0x7e,0x7a,0x76,0x73,0x6f,0x6b,0x67,0x64,0x61,0x5d,0x5a,0x57,0x54,0x50,0x4d,0x4a,0x47,0x44,0x41,0x3e,0x3c,0x3a,0x37,0x34,0x31,0x2f,0x2c,0x29,0x27,0x26,0x24,0x21,0x1f,0x1e,0x1c,0x19,0x18,0x16,0x15,0x13,0x11,0x10,0x0e,0x0c,0x0b,0x0a,0x09,0x07,0x06,0x05,0x04,0x02,0x02,0x01,0x01,0x00, +0x00,0x00,0x01,0x01,0x02,0x02,0x04,0x05,0x06,0x07,0x09,0x0a,0x0b,0x0d,0x0e,0x10,0x12,0x13,0x15,0x16,0x17,0x1a,0x1c,0x1d,0x1f,0x22,0x24,0x25,0x27,0x2a,0x2c,0x2f,0x31,0x34,0x37,0x3a,0x3c,0x3e,0x41,0x44,0x47,0x4a,0x4d,0x51,0x53,0x56,0x5a,0x5e,0x61,0x65,0x68,0x6b,0x6f,0x73,0x76,0x7a,0x7e,0x82,0x86,0x89,0x8e,0x92,0x96,0x9a,0x9f,0xa3,0xa8,0xac,0xaf,0xb4,0xb8,0xbd,0xc1,0xc6,0xca,0xcf,0xd3,0xd7,0xdb,0xdf,0xe3,0xe6,0xea,0xed,0xf0,0xf3,0xf5,0xf8,0xf9,0xfa,0xfa,0xfa,0xf9,0xf7,0xf5,0xf3,0xf0,0xed,0xea,0xe6,0xe3,0xdf,0xdb,0xd7,0xd3,0xce,0xca,0xc5,0xc1,0xbc,0xb8,0xb4,0xaf,0xab,0xa7,0xa3,0x9e,0x9a,0x96,0x92,0x8d,0x89,0x84,0x81,0x7d,0x79,0x76,0x73,0x6f,0x6b,0x68,0x64,0x61,0x5d,0x5a,0x56,0x52,0x50,0x4d,0x49,0x47,0x44,0x41,0x3e,0x3c,0x3a,0x37,0x34,0x31,0x2f,0x2c,0x29,0x27,0x25,0x24,0x22,0x1f,0x1d,0x1b,0x1a,0x18,0x16,0x15,0x13,0x11,0x10,0x0e,0x0c,0x0b,0x0a,0x09,0x07,0x06,0x05,0x04,0x02,0x02,0x01,0x01,0x00, +0x00,0x00,0x01,0x01,0x02,0x02,0x04,0x05,0x06,0x07,0x08,0x09,0x0b,0x0d,0x0e,0x10,0x11,0x13,0x14,0x16,0x17,0x19,0x1b,0x1d,0x20,0x21,0x23,0x25,0x27,0x2a,0x2c,0x2f,0x31,0x34,0x37,0x39,0x3b,0x3e,0x41,0x44,0x47,0x49,0x4c,0x50,0x53,0x56,0x59,0x5d,0x60,0x64,0x67,0x6b,0x6f,0x72,0x75,0x79,0x7d,0x81,0x85,0x89,0x8e,0x92,0x95,0x99,0x9e,0xa2,0xa6,0xaa,0xaf,0xb4,0xb8,0xbb,0xbf,0xc4,0xc8,0xcd,0xd1,0xd5,0xd9,0xdd,0xe1,0xe4,0xe8,0xeb,0xee,0xf1,0xf3,0xf5,0xf6,0xf7,0xf7,0xf7,0xf6,0xf5,0xf3,0xf1,0xee,0xeb,0xe8,0xe4,0xe2,0xde,0xd9,0xd5,0xd1,0xcc,0xc8,0xc4,0xbf,0xba,0xb6,0xb4,0xaf,0xaa,0xa6,0xa2,0x9e,0x99,0x96,0x92,0x8c,0x89,0x85,0x81,0x7d,0x78,0x75,0x72,0x6e,0x6a,0x67,0x63,0x60,0x5c,0x59,0x56,0x53,0x4f,0x4c,0x49,0x46,0x43,0x40,0x3e,0x3b,0x39,0x37,0x34,0x31,0x2e,0x2b,0x29,0x27,0x25,0x23,0x22,0x1f,0x1d,0x1b,0x19,0x17,0x16,0x14,0x13,0x11,0x10,0x0e,0x0c,0x0b,0x09,0x08,0x07,0x06,0x05,0x04,0x02,0x02,0x01,0x01,0x00, +0x00,0x00,0x01,0x01,0x02,0x02,0x04,0x05,0x06,0x07,0x08,0x09,0x0b,0x0d,0x0e,0x10,0x11,0x13,0x14,0x16,0x18,0x19,0x1b,0x1d,0x1f,0x21,0x23,0x25,0x27,0x2a,0x2c,0x2f,0x31,0x34,0x37,0x39,0x3b,0x3e,0x41,0x44,0x47,0x49,0x4c,0x50,0x52,0x55,0x59,0x5d,0x60,0x64,0x67,0x6a,0x6e,0x71,0x75,0x78,0x7c,0x80,0x84,0x89,0x8c,0x90,0x95,0x99,0x9d,0xa1,0xa5,0xa9,0xad,0xb2,0xb6,0xba,0xbe,0xc2,0xc6,0xcb,0xcf,0xd4,0xd8,0xdc,0xe0,0xe3,0xe5,0xe9,0xec,0xef,0xf1,0xf2,0xf3,0xf4,0xf4,0xf4,0xf3,0xf2,0xf1,0xee,0xeb,0xe9,0xe6,0xe3,0xe0,0xdc,0xd7,0xd3,0xcf,0xca,0xc6,0xc2,0xbe,0xb9,0xb5,0xb2,0xad,0xa8,0xa5,0xa1,0x9c,0x99,0x94,0x90,0x8c,0x88,0x84,0x80,0x7c,0x78,0x75,0x71,0x6d,0x6a,0x67,0x63,0x60,0x5c,0x59,0x55,0x53,0x4f,0x4c,0x49,0x46,0x43,0x40,0x3e,0x3b,0x39,0x37,0x34,0x31,0x2e,0x2b,0x29,0x27,0x25,0x23,0x20,0x1f,0x1d,0x1b,0x19,0x17,0x16,0x14,0x13,0x11,0x10,0x0e,0x0c,0x0b,0x09,0x08,0x07,0x06,0x05,0x04,0x02,0x02,0x01,0x01,0x00, +0x00,0x00,0x01,0x01,0x02,0x02,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0c,0x0e,0x0f,0x11,0x13,0x14,0x16,0x18,0x19,0x1b,0x1d,0x1f,0x21,0x23,0x25,0x27,0x2a,0x2c,0x2f,0x31,0x33,0x36,0x38,0x3b,0x3d,0x40,0x43,0x46,0x49,0x4c,0x4f,0x52,0x55,0x58,0x5c,0x5f,0x63,0x66,0x6a,0x6e,0x71,0x74,0x78,0x7c,0x80,0x84,0x87,0x8b,0x8f,0x94,0x98,0x9c,0xa0,0xa4,0xa8,0xac,0xb0,0xb4,0xb9,0xbc,0xc0,0xc4,0xc9,0xcd,0xd2,0xd5,0xd9,0xdd,0xe0,0xe2,0xe7,0xe9,0xeb,0xed,0xee,0xf1,0xf0,0xf0,0xf0,0xf1,0xee,0xed,0xeb,0xe9,0xe5,0xe2,0xe0,0xdd,0xd9,0xd5,0xd1,0xcd,0xc8,0xc4,0xc0,0xbc,0xb8,0xb4,0xb0,0xac,0xa8,0xa4,0xa0,0x9b,0x98,0x93,0x8f,0x8b,0x87,0x83,0x7f,0x7b,0x77,0x74,0x71,0x6d,0x69,0x66,0x62,0x5f,0x5b,0x58,0x55,0x51,0x4f,0x4c,0x48,0x46,0x43,0x40,0x3d,0x3b,0x38,0x35,0x33,0x31,0x2e,0x2b,0x29,0x27,0x25,0x23,0x20,0x1f,0x1d,0x1b,0x19,0x17,0x16,0x14,0x13,0x11,0x0f,0x0e,0x0c,0x0a,0x09,0x08,0x07,0x06,0x05,0x04,0x02,0x02,0x01,0x01,0x00, +0x00,0x00,0x01,0x01,0x02,0x02,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0c,0x0e,0x0f,0x11,0x13,0x14,0x16,0x18,0x19,0x1b,0x1d,0x1f,0x21,0x23,0x25,0x27,0x2a,0x2c,0x2e,0x31,0x34,0x36,0x38,0x3a,0x3d,0x40,0x43,0x45,0x49,0x4c,0x4f,0x52,0x54,0x58,0x5c,0x5f,0x63,0x66,0x69,0x6d,0x70,0x73,0x77,0x7b,0x7f,0x83,0x86,0x8b,0x8f,0x93,0x97,0x9b,0x9f,0xa3,0xa7,0xab,0xaf,0xb3,0xb7,0xbb,0xbf,0xc3,0xc7,0xca,0xce,0xd3,0xd7,0xda,0xdd,0xe0,0xe4,0xe6,0xe8,0xea,0xeb,0xec,0xed,0xed,0xed,0xec,0xeb,0xea,0xe8,0xe6,0xe3,0xe0,0xdd,0xda,0xd6,0xd3,0xce,0xca,0xc7,0xc3,0xbe,0xbb,0xb6,0xb2,0xae,0xab,0xa7,0xa3,0x9f,0x9a,0x97,0x92,0x8e,0x8b,0x86,0x82,0x7e,0x7a,0x77,0x73,0x70,0x6c,0x69,0x66,0x62,0x5f,0x5b,0x58,0x54,0x52,0x4e,0x4b,0x49,0x45,0x42,0x3f,0x3d,0x3a,0x38,0x35,0x33,0x31,0x2e,0x2c,0x29,0x27,0x25,0x23,0x20,0x1f,0x1d,0x1b,0x19,0x17,0x16,0x14,0x13,0x11,0x0f,0x0e,0x0c,0x0a,0x09,0x08,0x07,0x06,0x05,0x04,0x02,0x02,0x01,0x01,0x00, +0x00,0x00,0x01,0x01,0x02,0x02,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0c,0x0e,0x0f,0x11,0x13,0x14,0x16,0x18,0x19,0x1b,0x1d,0x1f,0x21,0x23,0x25,0x27,0x28,0x2b,0x2e,0x30,0x32,0x35,0x38,0x3a,0x3d,0x3f,0x42,0x45,0x48,0x4b,0x4e,0x51,0x54,0x57,0x5b,0x5e,0x62,0x65,0x68,0x6c,0x70,0x73,0x76,0x7a,0x7e,0x82,0x85,0x89,0x8d,0x92,0x96,0x9a,0x9e,0xa2,0xa6,0xa9,0xad,0xb1,0xb5,0xb9,0xbd,0xc1,0xc5,0xc8,0xcc,0xd0,0xd4,0xd8,0xdb,0xdd,0xe1,0xe3,0xe5,0xe7,0xe8,0xe9,0xe9,0xea,0xe9,0xe9,0xe8,0xe7,0xe5,0xe3,0xe0,0xdd,0xdb,0xd8,0xd4,0xd0,0xcc,0xc8,0xc5,0xc1,0xbd,0xb9,0xb5,0xb1,0xad,0xa9,0xa5,0xa1,0x9d,0x99,0x96,0x91,0x8d,0x89,0x85,0x81,0x7d,0x79,0x76,0x73,0x6f,0x6b,0x68,0x65,0x61,0x5e,0x5a,0x57,0x54,0x50,0x4e,0x4b,0x47,0x45,0x42,0x3f,0x3d,0x3a,0x38,0x34,0x32,0x30,0x2d,0x2a,0x28,0x27,0x25,0x23,0x20,0x1f,0x1d,0x1b,0x19,0x17,0x16,0x14,0x13,0x11,0x0f,0x0e,0x0c,0x0a,0x09,0x08,0x07,0x06,0x05,0x04,0x02,0x02,0x01,0x01,0x00, +0x00,0x00,0x01,0x01,0x01,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0c,0x0e,0x0f,0x11,0x13,0x14,0x15,0x17,0x19,0x1b,0x1d,0x1e,0x21,0x22,0x24,0x26,0x28,0x2b,0x2d,0x30,0x32,0x35,0x37,0x3a,0x3c,0x3f,0x42,0x44,0x48,0x4b,0x4d,0x51,0x53,0x56,0x5a,0x5d,0x61,0x64,0x67,0x6b,0x6f,0x72,0x75,0x79,0x7d,0x81,0x84,0x88,0x8c,0x91,0x94,0x98,0x9c,0xa0,0xa4,0xa8,0xac,0xb0,0xb4,0xb7,0xbb,0xbf,0xc3,0xc6,0xca,0xce,0xd2,0xd5,0xd8,0xda,0xde,0xdf,0xe1,0xe3,0xe4,0xe5,0xe5,0xe6,0xe5,0xe5,0xe4,0xe3,0xe1,0xdf,0xdd,0xda,0xd8,0xd5,0xd1,0xce,0xca,0xc6,0xc3,0xbf,0xbb,0xb7,0xb3,0xaf,0xab,0xa8,0xa4,0xa0,0x9c,0x98,0x94,0x90,0x8c,0x88,0x84,0x80,0x7c,0x78,0x75,0x72,0x6f,0x6b,0x67,0x64,0x60,0x5d,0x59,0x56,0x53,0x51,0x4d,0x4a,0x48,0x44,0x41,0x3e,0x3c,0x3a,0x37,0x34,0x32,0x30,0x2d,0x2a,0x28,0x26,0x24,0x22,0x21,0x1e,0x1d,0x1b,0x18,0x17,0x15,0x14,0x13,0x11,0x0f,0x0e,0x0c,0x0a,0x09,0x08,0x07,0x06,0x05,0x04,0x03,0x01,0x01,0x01,0x00, +0x00,0x00,0x00,0x01,0x01,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0d,0x0f,0x11,0x12,0x14,0x15,0x17,0x19,0x1b,0x1c,0x1e,0x20,0x22,0x24,0x26,0x27,0x2a,0x2d,0x2f,0x31,0x35,0x37,0x39,0x3c,0x3e,0x41,0x44,0x47,0x4a,0x4c,0x50,0x53,0x56,0x5a,0x5d,0x61,0x64,0x67,0x6b,0x6e,0x71,0x74,0x78,0x7c,0x80,0x83,0x87,0x8b,0x8f,0x92,0x96,0x9a,0x9f,0xa3,0xa6,0xa9,0xad,0xb1,0xb4,0xb9,0xbd,0xc0,0xc4,0xc7,0xca,0xce,0xd1,0xd4,0xd6,0xda,0xdb,0xdd,0xdf,0xe0,0xe1,0xe1,0xe2,0xe1,0xe1,0xe0,0xdf,0xdd,0xdb,0xd9,0xd6,0xd4,0xd1,0xcd,0xca,0xc7,0xc3,0xc0,0xbc,0xb8,0xb4,0xb2,0xae,0xaa,0xa6,0xa2,0x9e,0x9a,0x96,0x92,0x8e,0x8a,0x86,0x82,0x7f,0x7b,0x77,0x74,0x71,0x6e,0x6a,0x67,0x64,0x60,0x5d,0x59,0x56,0x53,0x50,0x4c,0x49,0x47,0x44,0x41,0x3e,0x3c,0x39,0x37,0x34,0x31,0x2f,0x2c,0x29,0x27,0x26,0x24,0x22,0x1f,0x1e,0x1c,0x1a,0x19,0x17,0x15,0x14,0x12,0x10,0x0f,0x0d,0x0b,0x0a,0x09,0x08,0x07,0x06,0x05,0x04,0x03,0x01,0x01,0x00,0x00, +0x00,0x00,0x00,0x01,0x01,0x03,0x03,0x04,0x05,0x06,0x07,0x09,0x0b,0x0c,0x0c,0x0f,0x11,0x12,0x13,0x15,0x17,0x18,0x1a,0x1c,0x1d,0x20,0x22,0x23,0x25,0x28,0x2a,0x2c,0x2f,0x32,0x34,0x36,0x39,0x3a,0x3e,0x41,0x44,0x46,0x49,0x4d,0x4f,0x52,0x55,0x59,0x5c,0x60,0x63,0x66,0x6a,0x6d,0x70,0x73,0x77,0x7a,0x7e,0x82,0x85,0x89,0x8d,0x91,0x95,0x99,0x9c,0xa0,0xa4,0xa7,0xab,0xaf,0xb2,0xb6,0xba,0xbd,0xc1,0xc4,0xc7,0xca,0xce,0xd0,0xd2,0xd6,0xd8,0xda,0xdb,0xdc,0xdd,0xdd,0xdd,0xdd,0xdd,0xdc,0xdb,0xd9,0xd8,0xd5,0xd2,0xd0,0xce,0xca,0xc7,0xc4,0xc0,0xbd,0xb9,0xb5,0xb2,0xaf,0xab,0xa7,0xa4,0xa0,0x9c,0x98,0x94,0x91,0x8d,0x89,0x84,0x81,0x7e,0x7a,0x76,0x73,0x70,0x6d,0x69,0x66,0x63,0x5f,0x5c,0x58,0x55,0x52,0x4f,0x4c,0x49,0x46,0x43,0x40,0x3d,0x3a,0x39,0x36,0x34,0x31,0x2f,0x2c,0x2a,0x27,0x25,0x23,0x22,0x1f,0x1d,0x1c,0x1a,0x18,0x16,0x15,0x13,0x12,0x10,0x0f,0x0c,0x0b,0x0a,0x09,0x07,0x06,0x05,0x04,0x02,0x03,0x01,0x01,0x00,0x00, +0x00,0x00,0x00,0x01,0x02,0x02,0x03,0x04,0x05,0x06,0x07,0x09,0x0a,0x0c,0x0d,0x0e,0x10,0x11,0x13,0x14,0x16,0x18,0x1a,0x1b,0x1e,0x1f,0x21,0x23,0x25,0x27,0x2a,0x2c,0x2e,0x31,0x34,0x36,0x38,0x3a,0x3d,0x40,0x43,0x46,0x49,0x4c,0x4f,0x50,0x54,0x58,0x5b,0x5f,0x62,0x65,0x69,0x6c,0x6f,0x72,0x76,0x78,0x7c,0x80,0x84,0x88,0x8c,0x8f,0x93,0x97,0x9b,0x9f,0xa2,0xa5,0xa9,0xad,0xb0,0xb3,0xb7,0xba,0xbe,0xc2,0xc5,0xc7,0xca,0xcc,0xcf,0xd2,0xd3,0xd5,0xd7,0xd8,0xd9,0xd9,0xd9,0xd9,0xd9,0xd8,0xd7,0xd5,0xd3,0xd1,0xcf,0xcc,0xca,0xc7,0xc4,0xc2,0xbe,0xba,0xb6,0xb3,0xb0,0xad,0xa9,0xa5,0xa2,0x9e,0x9a,0x96,0x93,0x8f,0x8b,0x87,0x84,0x80,0x7c,0x79,0x75,0x72,0x6f,0x6c,0x68,0x65,0x62,0x5e,0x5b,0x57,0x54,0x50,0x4f,0x4b,0x48,0x46,0x43,0x40,0x3d,0x3a,0x38,0x36,0x33,0x31,0x2e,0x2c,0x2a,0x27,0x25,0x23,0x21,0x1f,0x1d,0x1b,0x19,0x18,0x16,0x14,0x13,0x11,0x10,0x0e,0x0d,0x0b,0x0a,0x08,0x07,0x06,0x05,0x04,0x02,0x02,0x01,0x01,0x00,0x00, +0x00,0x00,0x00,0x01,0x02,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0d,0x0e,0x10,0x11,0x13,0x14,0x16,0x18,0x1a,0x1b,0x1e,0x1f,0x21,0x22,0x24,0x27,0x29,0x2b,0x2e,0x31,0x33,0x35,0x38,0x39,0x3c,0x3f,0x43,0x44,0x47,0x4a,0x4d,0x50,0x52,0x56,0x59,0x5d,0x60,0x63,0x67,0x6b,0x6e,0x71,0x75,0x78,0x7b,0x7e,0x82,0x86,0x8a,0x8d,0x91,0x95,0x99,0x9d,0xa0,0xa3,0xa7,0xaa,0xad,0xb0,0xb4,0xb7,0xbb,0xbe,0xc1,0xc4,0xc6,0xc8,0xcb,0xce,0xce,0xd0,0xd3,0xd4,0xd5,0xd5,0xd5,0xd5,0xd5,0xd4,0xd3,0xd0,0xce,0xcd,0xcb,0xc8,0xc6,0xc3,0xc0,0xbe,0xba,0xb7,0xb3,0xb0,0xad,0xaa,0xa6,0xa3,0xa0,0x9c,0x98,0x94,0x91,0x8d,0x89,0x85,0x82,0x7e,0x7a,0x78,0x74,0x71,0x6e,0x6b,0x66,0x63,0x60,0x5c,0x59,0x55,0x52,0x50,0x4d,0x4b,0x48,0x44,0x42,0x3f,0x3c,0x39,0x38,0x35,0x32,0x30,0x2e,0x2b,0x29,0x26,0x24,0x22,0x21,0x1e,0x1d,0x1b,0x19,0x18,0x16,0x14,0x13,0x11,0x0f,0x0e,0x0d,0x0a,0x09,0x08,0x07,0x06,0x05,0x04,0x02,0x02,0x01,0x01,0x00,0x00, +0x00,0x00,0x00,0x01,0x02,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0c,0x0e,0x10,0x11,0x12,0x14,0x16,0x17,0x19,0x1b,0x1c,0x1e,0x20,0x22,0x24,0x26,0x28,0x2a,0x2c,0x2f,0x32,0x34,0x36,0x39,0x3c,0x3f,0x41,0x44,0x47,0x4a,0x4c,0x4f,0x51,0x55,0x58,0x5c,0x5f,0x62,0x66,0x69,0x6c,0x6f,0x73,0x76,0x79,0x7d,0x80,0x84,0x88,0x8b,0x8f,0x93,0x97,0x9b,0x9e,0xa1,0xa5,0xa7,0xaa,0xad,0xb1,0xb4,0xb7,0xbb,0xbe,0xc0,0xc2,0xc4,0xc6,0xc9,0xcb,0xcd,0xce,0xce,0xcf,0xcf,0xd0,0xcf,0xcf,0xce,0xce,0xcd,0xcb,0xc8,0xc6,0xc4,0xc2,0xbf,0xbd,0xbb,0xb7,0xb4,0xb0,0xad,0xaa,0xa8,0xa3,0xa1,0x9e,0x9a,0x96,0x92,0x8f,0x8b,0x87,0x83,0x80,0x7d,0x79,0x76,0x72,0x6f,0x6c,0x69,0x65,0x62,0x5f,0x5b,0x58,0x54,0x51,0x4f,0x4c,0x49,0x46,0x44,0x41,0x3f,0x3b,0x39,0x36,0x34,0x33,0x2f,0x2c,0x2a,0x28,0x25,0x24,0x22,0x20,0x1e,0x1c,0x1b,0x19,0x17,0x15,0x14,0x12,0x11,0x0f,0x0e,0x0c,0x0a,0x09,0x08,0x07,0x06,0x05,0x04,0x02,0x02,0x01,0x01,0x00,0x00, +0x00,0x00,0x00,0x00,0x01,0x01,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0b,0x0b,0x0d,0x0f,0x11,0x12,0x13,0x15,0x17,0x19,0x1a,0x1c,0x1e,0x20,0x21,0x23,0x26,0x28,0x2a,0x2c,0x2e,0x32,0x34,0x36,0x38,0x3b,0x3e,0x40,0x43,0x46,0x49,0x4b,0x4e,0x50,0x54,0x57,0x5b,0x5e,0x61,0x64,0x67,0x6a,0x6d,0x71,0x74,0x78,0x7b,0x7e,0x82,0x85,0x89,0x8c,0x90,0x94,0x98,0x9b,0x9e,0xa1,0xa4,0xa7,0xaa,0xae,0xb1,0xb4,0xb7,0xba,0xbc,0xbe,0xc0,0xc2,0xc5,0xc7,0xc9,0xca,0xc9,0xca,0xca,0xcb,0xca,0xca,0xc9,0xca,0xc9,0xc7,0xc4,0xc2,0xc0,0xbe,0xbc,0xb9,0xb7,0xb3,0xb0,0xad,0xaa,0xa7,0xa4,0xa1,0x9e,0x9b,0x97,0x93,0x8f,0x8c,0x89,0x85,0x81,0x7e,0x7b,0x77,0x74,0x70,0x6d,0x6a,0x67,0x63,0x60,0x5e,0x5a,0x57,0x53,0x50,0x4e,0x4b,0x48,0x45,0x43,0x40,0x3e,0x3a,0x38,0x36,0x34,0x31,0x2e,0x2c,0x2a,0x28,0x25,0x23,0x21,0x20,0x1d,0x1c,0x1a,0x18,0x17,0x15,0x13,0x12,0x11,0x0f,0x0d,0x0b,0x0a,0x09,0x08,0x07,0x06,0x05,0x04,0x03,0x01,0x01,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x01,0x01,0x03,0x03,0x04,0x05,0x06,0x08,0x0a,0x0b,0x0c,0x0d,0x0f,0x10,0x11,0x13,0x15,0x16,0x18,0x1a,0x1b,0x1e,0x1f,0x21,0x23,0x25,0x27,0x29,0x2b,0x2e,0x31,0x33,0x35,0x37,0x3b,0x3d,0x40,0x42,0x44,0x48,0x4a,0x4d,0x4f,0x53,0x56,0x5a,0x5d,0x60,0x62,0x66,0x69,0x6d,0x6f,0x72,0x76,0x79,0x7c,0x80,0x83,0x87,0x8a,0x8e,0x91,0x95,0x98,0x9b,0x9f,0xa2,0xa5,0xa8,0xab,0xae,0xb1,0xb3,0xb5,0xb9,0xbb,0xbd,0xbe,0xc0,0xc2,0xc4,0xc5,0xc5,0xc6,0xc6,0xc7,0xc6,0xc6,0xc5,0xc5,0xc4,0xc2,0xc0,0xbe,0xbd,0xbb,0xb8,0xb5,0xb3,0xb0,0xad,0xaa,0xa8,0xa5,0xa2,0x9e,0x9b,0x98,0x94,0x91,0x8d,0x8a,0x87,0x83,0x7f,0x7c,0x79,0x75,0x72,0x6f,0x6c,0x69,0x66,0x62,0x5f,0x5d,0x59,0x56,0x52,0x4f,0x4d,0x4a,0x47,0x44,0x42,0x3f,0x3c,0x3a,0x37,0x35,0x33,0x31,0x2e,0x2b,0x29,0x26,0x25,0x23,0x21,0x1f,0x1e,0x1b,0x1a,0x18,0x16,0x14,0x13,0x11,0x10,0x0e,0x0c,0x0c,0x0a,0x09,0x07,0x06,0x05,0x04,0x03,0x03,0x01,0x01,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x01,0x02,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x0a,0x0a,0x0c,0x0e,0x10,0x11,0x13,0x15,0x17,0x17,0x19,0x1b,0x1d,0x1f,0x20,0x22,0x25,0x27,0x29,0x2b,0x2d,0x30,0x32,0x35,0x37,0x39,0x3c,0x3f,0x41,0x43,0x47,0x49,0x4c,0x4e,0x52,0x55,0x59,0x5b,0x5e,0x62,0x65,0x67,0x6a,0x6e,0x71,0x75,0x78,0x7b,0x7d,0x81,0x84,0x88,0x8c,0x8f,0x93,0x96,0x99,0x9c,0x9f,0xa2,0xa5,0xa8,0xab,0xae,0xb0,0xb2,0xb5,0xb7,0xb9,0xbb,0xbd,0xbf,0xc0,0xc1,0xc1,0xc2,0xc2,0xc3,0xc2,0xc2,0xc1,0xc1,0xbf,0xbe,0xbc,0xbb,0xb9,0xb7,0xb4,0xb2,0xb0,0xad,0xaa,0xa7,0xa5,0xa2,0x9e,0x9c,0x99,0x96,0x92,0x8f,0x8b,0x88,0x84,0x81,0x7d,0x7a,0x78,0x74,0x71,0x6d,0x6a,0x67,0x65,0x61,0x5e,0x5b,0x58,0x55,0x51,0x4e,0x4c,0x49,0x46,0x43,0x41,0x3f,0x3c,0x39,0x37,0x35,0x32,0x2f,0x2d,0x2b,0x29,0x27,0x24,0x22,0x20,0x1f,0x1c,0x1b,0x19,0x17,0x16,0x14,0x13,0x11,0x10,0x0e,0x0c,0x0a,0x09,0x08,0x07,0x06,0x05,0x04,0x03,0x02,0x02,0x01,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x01,0x02,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x0a,0x0a,0x0c,0x0e,0x10,0x11,0x12,0x14,0x16,0x18,0x19,0x1b,0x1d,0x1e,0x20,0x22,0x23,0x26,0x28,0x2a,0x2c,0x30,0x32,0x34,0x36,0x38,0x3b,0x3e,0x40,0x42,0x46,0x48,0x4b,0x4d,0x51,0x54,0x56,0x5a,0x5d,0x60,0x63,0x66,0x69,0x6c,0x6f,0x73,0x76,0x79,0x7d,0x7f,0x82,0x85,0x89,0x8d,0x91,0x93,0x96,0x99,0x9c,0x9e,0xa2,0xa5,0xa8,0xaa,0xad,0xaf,0xb1,0xb3,0xb5,0xb6,0xb8,0xb9,0xbc,0xbc,0xbd,0xbd,0xbd,0xbe,0xbd,0xbd,0xbd,0xbc,0xba,0xb9,0xb8,0xb6,0xb5,0xb3,0xb0,0xaf,0xad,0xaa,0xa7,0xa4,0xa2,0x9e,0x9b,0x99,0x96,0x93,0x90,0x8d,0x89,0x85,0x82,0x7f,0x7c,0x79,0x75,0x72,0x6f,0x6c,0x69,0x66,0x62,0x60,0x5d,0x5a,0x56,0x53,0x50,0x4d,0x4b,0x48,0x45,0x42,0x40,0x3e,0x3b,0x38,0x36,0x34,0x32,0x2f,0x2c,0x2a,0x28,0x26,0x23,0x22,0x20,0x1e,0x1c,0x1b,0x19,0x17,0x16,0x14,0x12,0x11,0x10,0x0e,0x0c,0x0a,0x09,0x08,0x07,0x06,0x05,0x04,0x03,0x02,0x02,0x01,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x01,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x0a,0x0b,0x0c,0x0e,0x0f,0x10,0x12,0x14,0x15,0x17,0x19,0x1a,0x1c,0x1e,0x1f,0x21,0x23,0x26,0x28,0x2a,0x2c,0x2f,0x31,0x33,0x35,0x38,0x3b,0x3d,0x3f,0x41,0x45,0x47,0x4a,0x4c,0x4f,0x52,0x56,0x58,0x5b,0x5f,0x61,0x64,0x67,0x6b,0x6e,0x71,0x73,0x76,0x7b,0x7c,0x7f,0x82,0x87,0x8a,0x8e,0x90,0x93,0x97,0x99,0x9c,0x9e,0xa2,0xa4,0xa6,0xa9,0xab,0xad,0xaf,0xb1,0xb2,0xb4,0xb5,0xb7,0xb8,0xb9,0xb9,0xb9,0xba,0xb9,0xb9,0xb9,0xb8,0xb6,0xb5,0xb4,0xb2,0xb1,0xaf,0xac,0xab,0xa9,0xa6,0xa4,0xa1,0x9e,0x9c,0x99,0x96,0x93,0x90,0x8d,0x8a,0x85,0x82,0x7f,0x7c,0x79,0x76,0x73,0x71,0x6e,0x69,0x67,0x64,0x62,0x5e,0x5b,0x58,0x55,0x52,0x4f,0x4c,0x4a,0x47,0x44,0x41,0x3f,0x3d,0x3b,0x37,0x35,0x33,0x31,0x2e,0x2c,0x2a,0x28,0x26,0x23,0x21,0x1f,0x1e,0x1c,0x1a,0x19,0x17,0x15,0x13,0x12,0x10,0x0f,0x0d,0x0b,0x0b,0x0a,0x08,0x07,0x06,0x05,0x04,0x03,0x01,0x01,0x01,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x01,0x01,0x02,0x03,0x04,0x04,0x05,0x06,0x08,0x0a,0x0b,0x0c,0x0d,0x0f,0x10,0x12,0x13,0x15,0x17,0x18,0x1a,0x1c,0x1d,0x1f,0x21,0x22,0x24,0x26,0x28,0x2b,0x2e,0x30,0x32,0x34,0x37,0x3a,0x3c,0x3e,0x40,0x44,0x46,0x49,0x4b,0x4e,0x51,0x53,0x57,0x5a,0x5d,0x60,0x62,0x65,0x68,0x6b,0x70,0x71,0x74,0x78,0x7a,0x7d,0x81,0x84,0x87,0x8b,0x8d,0x90,0x93,0x96,0x99,0x9b,0x9f,0xa1,0xa3,0xa5,0xa7,0xaa,0xab,0xae,0xaf,0xb1,0xb2,0xb2,0xb3,0xb4,0xb4,0xb4,0xb5,0xb4,0xb4,0xb4,0xb3,0xb2,0xb2,0xb0,0xaf,0xae,0xab,0xaa,0xa7,0xa5,0xa3,0xa1,0x9e,0x9b,0x99,0x96,0x93,0x90,0x8d,0x8a,0x87,0x83,0x80,0x7d,0x7a,0x77,0x74,0x71,0x6e,0x6b,0x68,0x65,0x62,0x60,0x5c,0x59,0x56,0x53,0x50,0x4d,0x4b,0x49,0x46,0x43,0x40,0x3e,0x3c,0x3a,0x36,0x34,0x32,0x30,0x2d,0x2b,0x28,0x26,0x24,0x22,0x21,0x1f,0x1d,0x1b,0x1a,0x18,0x16,0x15,0x13,0x12,0x10,0x0f,0x0d,0x0b,0x0b,0x09,0x08,0x06,0x05,0x04,0x04,0x03,0x01,0x01,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x01,0x01,0x02,0x02,0x03,0x04,0x05,0x06,0x07,0x09,0x0a,0x0b,0x0d,0x0e,0x10,0x11,0x13,0x14,0x16,0x18,0x19,0x1b,0x1d,0x1e,0x1f,0x22,0x24,0x26,0x28,0x29,0x2d,0x2f,0x30,0x34,0x37,0x39,0x3b,0x3d,0x40,0x43,0x45,0x47,0x4a,0x4d,0x50,0x52,0x55,0x58,0x5c,0x5e,0x61,0x63,0x67,0x6a,0x6d,0x70,0x73,0x76,0x78,0x7b,0x7f,0x81,0x84,0x87,0x8b,0x8e,0x90,0x93,0x96,0x98,0x9b,0x9e,0xa0,0xa2,0xa3,0xa6,0xa8,0xa9,0xaa,0xac,0xae,0xaf,0xae,0xb0,0xb0,0xb1,0xb1,0xb1,0xb0,0xb0,0xae,0xaf,0xad,0xac,0xaa,0xa9,0xa8,0xa6,0xa3,0xa2,0xa0,0x9e,0x9a,0x98,0x96,0x93,0x90,0x8d,0x8b,0x86,0x83,0x81,0x7e,0x7b,0x78,0x75,0x72,0x70,0x6c,0x69,0x66,0x63,0x61,0x5e,0x5b,0x58,0x55,0x51,0x4e,0x4b,0x4a,0x47,0x45,0x43,0x40,0x3d,0x3b,0x39,0x36,0x34,0x30,0x2f,0x2c,0x29,0x28,0x26,0x24,0x22,0x1f,0x1e,0x1d,0x1b,0x19,0x18,0x16,0x14,0x12,0x11,0x10,0x0e,0x0c,0x0a,0x0a,0x08,0x07,0x06,0x05,0x04,0x03,0x02,0x02,0x01,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x09,0x0a,0x0b,0x0c,0x0d,0x0f,0x10,0x12,0x13,0x15,0x17,0x18,0x1a,0x1c,0x1d,0x1f,0x22,0x24,0x26,0x28,0x29,0x2b,0x2d,0x30,0x32,0x35,0x37,0x39,0x3b,0x3e,0x41,0x43,0x45,0x49,0x4b,0x4e,0x51,0x53,0x56,0x5a,0x5c,0x5f,0x61,0x65,0x68,0x69,0x6e,0x71,0x72,0x76,0x79,0x7b,0x7e,0x81,0x83,0x87,0x8a,0x8d,0x90,0x92,0x94,0x97,0x9a,0x9c,0x9e,0x9f,0xa2,0xa4,0xa5,0xa6,0xa7,0xa8,0xab,0xab,0xac,0xac,0xad,0xad,0xad,0xac,0xac,0xab,0xaa,0xa8,0xa7,0xa6,0xa5,0xa4,0xa2,0x9f,0x9e,0x9c,0x9a,0x96,0x94,0x92,0x90,0x8d,0x8a,0x86,0x84,0x81,0x7e,0x7b,0x79,0x76,0x73,0x70,0x6e,0x6a,0x67,0x64,0x61,0x5f,0x5c,0x59,0x56,0x53,0x51,0x4e,0x4a,0x49,0x45,0x43,0x41,0x3e,0x3b,0x39,0x37,0x34,0x32,0x30,0x2d,0x2a,0x29,0x28,0x26,0x23,0x21,0x1f,0x1d,0x1c,0x1a,0x18,0x17,0x15,0x13,0x12,0x10,0x0f,0x0d,0x0c,0x0b,0x0a,0x08,0x07,0x06,0x05,0x04,0x03,0x02,0x01,0x01,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x02,0x02,0x03,0x04,0x05,0x06,0x08,0x09,0x0a,0x0c,0x0d,0x0e,0x10,0x11,0x13,0x15,0x16,0x18,0x1a,0x1b,0x1d,0x1e,0x20,0x22,0x24,0x26,0x28,0x2b,0x2d,0x2f,0x31,0x34,0x36,0x38,0x3a,0x3c,0x40,0x42,0x44,0x47,0x4a,0x4c,0x4f,0x52,0x55,0x58,0x5b,0x5d,0x60,0x63,0x66,0x68,0x6c,0x6f,0x71,0x74,0x76,0x78,0x7b,0x7e,0x82,0x84,0x87,0x8a,0x8d,0x8f,0x91,0x94,0x96,0x98,0x9a,0x9d,0x9e,0xa0,0xa1,0xa2,0xa4,0xa5,0xa5,0xa7,0xa7,0xa8,0xa8,0xa8,0xa8,0xa8,0xa7,0xa7,0xa5,0xa5,0xa4,0xa2,0xa1,0xa0,0x9e,0x9c,0x9a,0x98,0x96,0x93,0x91,0x8f,0x8d,0x8a,0x87,0x83,0x81,0x7e,0x7b,0x78,0x76,0x74,0x71,0x6e,0x6c,0x68,0x65,0x62,0x60,0x5d,0x5b,0x57,0x54,0x52,0x4f,0x4b,0x49,0x47,0x44,0x42,0x3f,0x3c,0x3a,0x38,0x36,0x33,0x31,0x2f,0x2d,0x2a,0x28,0x26,0x24,0x21,0x20,0x1e,0x1d,0x1b,0x19,0x18,0x16,0x14,0x13,0x11,0x10,0x0e,0x0d,0x0b,0x0a,0x09,0x07,0x06,0x05,0x04,0x03,0x02,0x02,0x01,0x01,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x02,0x02,0x03,0x04,0x05,0x06,0x08,0x09,0x0a,0x0b,0x0c,0x0e,0x0f,0x11,0x12,0x14,0x16,0x17,0x19,0x1a,0x1c,0x1e,0x1f,0x22,0x24,0x25,0x27,0x2a,0x2c,0x2e,0x30,0x33,0x35,0x37,0x39,0x3b,0x3e,0x41,0x43,0x45,0x48,0x4b,0x4d,0x50,0x53,0x56,0x58,0x5b,0x5d,0x60,0x63,0x66,0x69,0x6c,0x6f,0x71,0x73,0x76,0x78,0x7b,0x7e,0x80,0x83,0x86,0x89,0x8b,0x8d,0x90,0x92,0x94,0x96,0x99,0x9a,0x9c,0x9d,0x9e,0xa0,0xa1,0xa2,0xa3,0xa3,0xa4,0xa4,0xa4,0xa4,0xa4,0xa3,0xa3,0xa2,0xa1,0xa0,0x9e,0x9d,0x9c,0x9a,0x98,0x96,0x94,0x92,0x8f,0x8d,0x8b,0x89,0x86,0x83,0x80,0x7e,0x7b,0x78,0x76,0x73,0x71,0x6e,0x6b,0x69,0x66,0x63,0x60,0x5d,0x5b,0x58,0x55,0x52,0x50,0x4d,0x4b,0x47,0x45,0x43,0x41,0x3d,0x3b,0x39,0x37,0x35,0x32,0x30,0x2e,0x2c,0x29,0x27,0x25,0x23,0x22,0x1f,0x1e,0x1c,0x1a,0x18,0x16,0x16,0x14,0x12,0x11,0x0f,0x0e,0x0c,0x0b,0x0a,0x09,0x07,0x06,0x05,0x04,0x03,0x02,0x02,0x01,0x01,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x02,0x03,0x04,0x05,0x06,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0f,0x10,0x12,0x14,0x15,0x17,0x19,0x1a,0x1c,0x1d,0x1f,0x21,0x23,0x24,0x26,0x29,0x2b,0x2d,0x2f,0x32,0x34,0x36,0x38,0x3a,0x3d,0x3f,0x42,0x44,0x47,0x49,0x4c,0x4e,0x50,0x54,0x56,0x59,0x5b,0x5e,0x61,0x64,0x67,0x6a,0x6c,0x6f,0x71,0x73,0x77,0x79,0x7c,0x7e,0x80,0x83,0x85,0x87,0x8a,0x8d,0x8f,0x91,0x92,0x95,0x96,0x98,0x99,0x9a,0x9b,0x9c,0x9e,0x9e,0x9f,0x9f,0x9f,0x9f,0x9f,0x9f,0x9f,0x9e,0x9e,0x9c,0x9b,0x9a,0x99,0x98,0x96,0x94,0x92,0x90,0x8f,0x8c,0x8a,0x87,0x85,0x82,0x80,0x7e,0x7b,0x78,0x76,0x73,0x71,0x6f,0x6b,0x69,0x67,0x64,0x61,0x5e,0x5b,0x59,0x56,0x53,0x50,0x4e,0x4b,0x48,0x46,0x44,0x42,0x3f,0x3c,0x3a,0x38,0x36,0x34,0x31,0x2f,0x2d,0x2b,0x28,0x26,0x24,0x22,0x21,0x1f,0x1d,0x1c,0x1a,0x18,0x17,0x15,0x13,0x12,0x10,0x0f,0x0d,0x0c,0x0b,0x0a,0x09,0x07,0x06,0x05,0x04,0x03,0x02,0x01,0x01,0x01,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x02,0x03,0x03,0x04,0x05,0x07,0x08,0x09,0x0a,0x0c,0x0d,0x0e,0x10,0x11,0x13,0x15,0x16,0x18,0x19,0x1b,0x1c,0x1e,0x20,0x22,0x24,0x26,0x28,0x2a,0x2c,0x2e,0x31,0x33,0x35,0x37,0x39,0x3c,0x3e,0x40,0x42,0x46,0x48,0x4a,0x4d,0x50,0x52,0x55,0x57,0x5a,0x5c,0x5f,0x62,0x64,0x67,0x6a,0x6d,0x6f,0x71,0x73,0x76,0x79,0x7b,0x7d,0x80,0x82,0x84,0x86,0x89,0x8b,0x8d,0x8f,0x91,0x93,0x94,0x96,0x97,0x98,0x99,0x9a,0x9a,0x9b,0x9b,0x9b,0x9b,0x9b,0x9b,0x9b,0x9a,0x99,0x99,0x98,0x97,0x96,0x94,0x92,0x91,0x8f,0x8d,0x8b,0x88,0x86,0x84,0x82,0x7f,0x7d,0x7b,0x79,0x76,0x73,0x71,0x6f,0x6d,0x6a,0x67,0x64,0x62,0x5f,0x5c,0x5a,0x57,0x55,0x51,0x4f,0x4d,0x4a,0x48,0x45,0x42,0x40,0x3e,0x3b,0x39,0x37,0x35,0x33,0x30,0x2e,0x2c,0x2a,0x27,0x26,0x24,0x22,0x1f,0x1e,0x1c,0x1b,0x19,0x17,0x15,0x15,0x13,0x11,0x10,0x0e,0x0d,0x0c,0x0a,0x09,0x08,0x06,0x05,0x04,0x03,0x03,0x02,0x01,0x01,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x02,0x02,0x03,0x04,0x05,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0e,0x0f,0x11,0x13,0x13,0x15,0x17,0x19,0x1a,0x1c,0x1e,0x1f,0x21,0x23,0x25,0x27,0x29,0x2b,0x2d,0x30,0x32,0x34,0x36,0x38,0x3b,0x3d,0x3f,0x41,0x43,0x46,0x49,0x4b,0x4d,0x51,0x53,0x55,0x58,0x5a,0x5d,0x60,0x62,0x65,0x68,0x6a,0x6d,0x6f,0x72,0x74,0x76,0x78,0x7a,0x7c,0x7f,0x81,0x83,0x86,0x87,0x89,0x8b,0x8d,0x8f,0x90,0x91,0x93,0x93,0x95,0x96,0x96,0x97,0x97,0x97,0x97,0x97,0x97,0x97,0x96,0x96,0x94,0x93,0x93,0x91,0x90,0x8e,0x8d,0x8b,0x89,0x87,0x85,0x83,0x81,0x7f,0x7c,0x7a,0x78,0x76,0x74,0x71,0x6f,0x6d,0x6a,0x68,0x65,0x62,0x60,0x5d,0x5a,0x58,0x55,0x53,0x50,0x4d,0x4b,0x49,0x46,0x43,0x41,0x3f,0x3d,0x3a,0x38,0x36,0x34,0x32,0x2f,0x2d,0x2b,0x29,0x26,0x25,0x23,0x21,0x1f,0x1d,0x1c,0x1a,0x19,0x17,0x15,0x13,0x13,0x11,0x0f,0x0e,0x0c,0x0b,0x0a,0x09,0x08,0x06,0x05,0x04,0x03,0x02,0x02,0x01,0x01,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x02,0x03,0x04,0x05,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0f,0x10,0x12,0x14,0x15,0x17,0x18,0x1a,0x1b,0x1d,0x1e,0x20,0x22,0x25,0x26,0x28,0x2a,0x2c,0x2f,0x30,0x32,0x34,0x36,0x39,0x3b,0x3d,0x3f,0x42,0x44,0x47,0x49,0x4c,0x4e,0x50,0x52,0x55,0x57,0x5a,0x5d,0x5f,0x61,0x65,0x68,0x6a,0x6b,0x6f,0x71,0x73,0x75,0x78,0x7a,0x7b,0x7d,0x7f,0x82,0x83,0x85,0x87,0x89,0x8b,0x8c,0x8d,0x8f,0x8f,0x90,0x92,0x92,0x93,0x93,0x93,0x93,0x93,0x93,0x93,0x92,0x92,0x90,0x8f,0x8f,0x8d,0x8c,0x8a,0x89,0x87,0x85,0x83,0x81,0x7f,0x7d,0x7b,0x7a,0x77,0x75,0x73,0x71,0x6e,0x6b,0x6a,0x68,0x64,0x61,0x5f,0x5d,0x5a,0x57,0x55,0x52,0x50,0x4e,0x4c,0x49,0x47,0x44,0x41,0x3f,0x3d,0x3b,0x38,0x36,0x34,0x32,0x30,0x2e,0x2c,0x2a,0x28,0x26,0x24,0x22,0x20,0x1e,0x1c,0x1b,0x1a,0x18,0x16,0x13,0x14,0x12,0x10,0x0f,0x0d,0x0c,0x0b,0x0a,0x09,0x08,0x06,0x05,0x04,0x03,0x02,0x01,0x01,0x01,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x02,0x02,0x03,0x04,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0d,0x0e,0x10,0x11,0x12,0x14,0x16,0x17,0x19,0x1a,0x1c,0x1e,0x20,0x21,0x23,0x24,0x27,0x29,0x2b,0x2c,0x2e,0x30,0x32,0x34,0x38,0x39,0x3b,0x3d,0x40,0x42,0x45,0x47,0x49,0x4c,0x4f,0x51,0x53,0x55,0x58,0x5b,0x5d,0x5f,0x62,0x65,0x67,0x69,0x6c,0x6e,0x70,0x72,0x73,0x77,0x78,0x7a,0x7c,0x7f,0x80,0x81,0x83,0x85,0x87,0x88,0x8a,0x8a,0x8b,0x8c,0x8d,0x8d,0x8e,0x8e,0x8e,0x8e,0x8e,0x8e,0x8e,0x8d,0x8d,0x8c,0x8b,0x8a,0x8a,0x88,0x86,0x85,0x83,0x81,0x80,0x7e,0x7c,0x7a,0x78,0x76,0x74,0x72,0x70,0x6e,0x6b,0x69,0x67,0x65,0x61,0x5f,0x5d,0x5b,0x58,0x55,0x53,0x51,0x4f,0x4b,0x49,0x47,0x45,0x42,0x3f,0x3d,0x3b,0x39,0x36,0x34,0x32,0x30,0x2e,0x2c,0x2b,0x29,0x27,0x24,0x23,0x21,0x1f,0x1e,0x1c,0x1a,0x19,0x17,0x15,0x14,0x12,0x11,0x10,0x0d,0x0d,0x0b,0x0a,0x09,0x08,0x07,0x05,0x04,0x03,0x02,0x02,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x02,0x02,0x03,0x04,0x05,0x07,0x08,0x09,0x0a,0x0b,0x0b,0x0e,0x10,0x10,0x12,0x14,0x16,0x17,0x17,0x1a,0x1c,0x1d,0x1f,0x21,0x21,0x24,0x26,0x28,0x2a,0x2a,0x2e,0x30,0x32,0x34,0x37,0x39,0x3b,0x3d,0x40,0x42,0x44,0x46,0x48,0x4b,0x4d,0x4f,0x51,0x54,0x56,0x59,0x5b,0x5d,0x60,0x62,0x64,0x67,0x6a,0x6c,0x6e,0x70,0x72,0x73,0x76,0x77,0x79,0x7b,0x7d,0x7e,0x80,0x82,0x83,0x84,0x85,0x86,0x87,0x89,0x89,0x89,0x8a,0x8a,0x8a,0x8a,0x8a,0x8a,0x8a,0x89,0x88,0x88,0x87,0x86,0x85,0x84,0x82,0x82,0x80,0x7d,0x7d,0x7b,0x79,0x77,0x76,0x73,0x71,0x70,0x6e,0x6c,0x69,0x67,0x64,0x62,0x5f,0x5d,0x5b,0x59,0x55,0x53,0x51,0x4f,0x4d,0x4a,0x48,0x46,0x44,0x42,0x3f,0x3d,0x3b,0x39,0x36,0x34,0x32,0x30,0x2e,0x2a,0x2a,0x28,0x26,0x24,0x22,0x21,0x1f,0x1d,0x1a,0x1a,0x17,0x17,0x15,0x13,0x12,0x10,0x0f,0x0d,0x0b,0x0b,0x0a,0x09,0x08,0x07,0x05,0x04,0x03,0x02,0x02,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x02,0x02,0x03,0x04,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0e,0x11,0x11,0x12,0x14,0x16,0x17,0x18,0x1a,0x1b,0x1d,0x1f,0x20,0x24,0x24,0x26,0x28,0x29,0x2c,0x2e,0x30,0x32,0x35,0x37,0x39,0x3b,0x3e,0x40,0x42,0x44,0x46,0x49,0x4b,0x4d,0x4f,0x52,0x54,0x56,0x59,0x5c,0x5e,0x60,0x62,0x64,0x67,0x68,0x6a,0x6c,0x6f,0x71,0x72,0x74,0x75,0x77,0x79,0x7b,0x7b,0x7e,0x7f,0x80,0x81,0x82,0x82,0x84,0x85,0x85,0x86,0x86,0x86,0x86,0x86,0x86,0x86,0x85,0x85,0x83,0x82,0x82,0x81,0x80,0x7f,0x7e,0x7b,0x7b,0x79,0x77,0x75,0x74,0x72,0x71,0x6e,0x6c,0x6a,0x68,0x66,0x64,0x62,0x60,0x5d,0x5b,0x59,0x56,0x53,0x51,0x4f,0x4d,0x4b,0x48,0x46,0x44,0x42,0x40,0x3d,0x3b,0x39,0x37,0x34,0x32,0x30,0x2e,0x2c,0x29,0x28,0x26,0x24,0x24,0x20,0x1f,0x1d,0x1b,0x1a,0x18,0x17,0x16,0x14,0x12,0x11,0x11,0x0f,0x0c,0x0b,0x0a,0x09,0x08,0x07,0x06,0x04,0x03,0x02,0x02,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x02,0x03,0x05,0x06,0x06,0x07,0x08,0x09,0x0a,0x0c,0x0d,0x0f,0x11,0x12,0x13,0x15,0x16,0x17,0x19,0x1b,0x1d,0x1e,0x20,0x22,0x23,0x25,0x27,0x28,0x2b,0x2d,0x2f,0x31,0x33,0x35,0x37,0x39,0x3c,0x3e,0x40,0x41,0x43,0x46,0x49,0x4b,0x4d,0x50,0x52,0x53,0x56,0x58,0x5c,0x5e,0x60,0x61,0x64,0x65,0x67,0x69,0x6b,0x6e,0x6f,0x71,0x72,0x74,0x76,0x78,0x78,0x7a,0x7b,0x7c,0x7d,0x7e,0x7f,0x80,0x81,0x81,0x82,0x82,0x82,0x82,0x82,0x82,0x82,0x81,0x80,0x80,0x7f,0x7e,0x7d,0x7c,0x7b,0x7a,0x78,0x78,0x76,0x74,0x72,0x71,0x6f,0x6e,0x6b,0x69,0x67,0x66,0x63,0x61,0x60,0x5e,0x5b,0x58,0x56,0x54,0x52,0x4f,0x4d,0x4b,0x49,0x45,0x43,0x41,0x3f,0x3e,0x3b,0x39,0x37,0x35,0x32,0x31,0x2f,0x2d,0x2b,0x28,0x27,0x25,0x23,0x22,0x20,0x1e,0x1c,0x1b,0x19,0x17,0x16,0x15,0x13,0x12,0x11,0x0f,0x0d,0x0c,0x0a,0x09,0x08,0x07,0x06,0x06,0x04,0x03,0x02,0x01,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x02,0x02,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0e,0x10,0x11,0x13,0x14,0x15,0x17,0x18,0x1a,0x1c,0x1d,0x1f,0x21,0x22,0x24,0x25,0x28,0x2a,0x2c,0x2d,0x2f,0x32,0x34,0x35,0x37,0x3a,0x3c,0x3e,0x40,0x42,0x45,0x46,0x48,0x4a,0x4d,0x4f,0x51,0x53,0x55,0x58,0x5a,0x5c,0x5e,0x60,0x62,0x64,0x66,0x68,0x6a,0x6c,0x6d,0x6f,0x70,0x72,0x74,0x76,0x76,0x77,0x78,0x79,0x7a,0x7b,0x7c,0x7d,0x7d,0x7e,0x7e,0x7e,0x7e,0x7e,0x7e,0x7e,0x7d,0x7d,0x7c,0x7b,0x7a,0x79,0x78,0x77,0x76,0x76,0x74,0x72,0x70,0x6f,0x6d,0x6c,0x6a,0x68,0x66,0x64,0x62,0x60,0x5e,0x5c,0x5a,0x57,0x55,0x53,0x51,0x4f,0x4c,0x4a,0x48,0x46,0x45,0x42,0x40,0x3e,0x3c,0x39,0x37,0x35,0x34,0x31,0x2f,0x2d,0x2b,0x2a,0x27,0x25,0x24,0x22,0x20,0x1f,0x1d,0x1b,0x1a,0x18,0x17,0x15,0x14,0x12,0x10,0x10,0x0e,0x0c,0x0b,0x0a,0x09,0x08,0x07,0x06,0x05,0x03,0x02,0x02,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x02,0x02,0x04,0x05,0x06,0x07,0x08,0x08,0x09,0x0b,0x0c,0x0d,0x0f,0x11,0x12,0x13,0x15,0x16,0x18,0x19,0x1b,0x1d,0x1e,0x20,0x21,0x23,0x24,0x27,0x28,0x2a,0x2c,0x2f,0x30,0x32,0x34,0x36,0x39,0x3a,0x3c,0x3e,0x40,0x43,0x45,0x47,0x48,0x4b,0x4d,0x4f,0x51,0x53,0x56,0x58,0x5a,0x5b,0x5e,0x60,0x62,0x63,0x66,0x67,0x69,0x6a,0x6c,0x6d,0x6f,0x71,0x72,0x73,0x74,0x75,0x76,0x77,0x77,0x78,0x79,0x79,0x7a,0x7a,0x7a,0x7a,0x7a,0x7a,0x7a,0x79,0x78,0x78,0x77,0x77,0x76,0x75,0x74,0x73,0x72,0x71,0x6f,0x6d,0x6c,0x6a,0x69,0x67,0x65,0x63,0x61,0x60,0x5d,0x5b,0x5a,0x58,0x55,0x53,0x51,0x4f,0x4d,0x4a,0x48,0x47,0x45,0x42,0x40,0x3e,0x3c,0x3a,0x38,0x36,0x34,0x32,0x30,0x2e,0x2c,0x2a,0x28,0x26,0x24,0x23,0x21,0x1f,0x1d,0x1d,0x1b,0x19,0x17,0x16,0x15,0x13,0x12,0x11,0x0f,0x0d,0x0c,0x0b,0x09,0x08,0x08,0x07,0x06,0x05,0x03,0x02,0x02,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x02,0x02,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0e,0x10,0x11,0x13,0x14,0x15,0x17,0x18,0x1a,0x1c,0x1d,0x1f,0x20,0x22,0x23,0x26,0x27,0x29,0x2b,0x2d,0x2f,0x31,0x33,0x34,0x37,0x39,0x3b,0x3d,0x3e,0x41,0x43,0x45,0x47,0x48,0x4b,0x4d,0x4f,0x51,0x53,0x55,0x57,0x59,0x5b,0x5d,0x5f,0x61,0x62,0x64,0x66,0x67,0x69,0x6a,0x6c,0x6e,0x6f,0x70,0x71,0x72,0x73,0x73,0x74,0x75,0x76,0x76,0x76,0x77,0x77,0x77,0x77,0x77,0x76,0x76,0x75,0x75,0x74,0x73,0x73,0x72,0x71,0x70,0x6f,0x6e,0x6c,0x6a,0x69,0x67,0x66,0x64,0x62,0x61,0x5f,0x5c,0x5b,0x59,0x57,0x55,0x52,0x51,0x4f,0x4d,0x4b,0x48,0x47,0x45,0x43,0x40,0x3e,0x3d,0x3b,0x39,0x36,0x34,0x33,0x31,0x2e,0x2d,0x2b,0x29,0x27,0x25,0x23,0x22,0x20,0x1e,0x1c,0x1c,0x1a,0x18,0x17,0x15,0x14,0x13,0x11,0x10,0x0e,0x0c,0x0b,0x0a,0x09,0x08,0x07,0x06,0x05,0x04,0x02,0x02,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x02,0x02,0x04,0x05,0x06,0x07,0x08,0x08,0x09,0x0b,0x0d,0x0d,0x0f,0x11,0x12,0x13,0x14,0x16,0x17,0x19,0x1b,0x1c,0x1e,0x1f,0x21,0x22,0x24,0x26,0x28,0x2a,0x2b,0x2e,0x2f,0x31,0x33,0x36,0x37,0x39,0x3b,0x3e,0x3f,0x41,0x43,0x45,0x46,0x49,0x4b,0x4d,0x4f,0x51,0x53,0x55,0x56,0x59,0x5b,0x5d,0x5e,0x60,0x62,0x62,0x65,0x66,0x68,0x6a,0x6b,0x6c,0x6d,0x6e,0x6f,0x6f,0x70,0x71,0x71,0x72,0x73,0x73,0x73,0x73,0x73,0x73,0x73,0x73,0x73,0x72,0x71,0x71,0x70,0x6f,0x6f,0x6e,0x6d,0x6c,0x6a,0x69,0x67,0x66,0x65,0x62,0x61,0x60,0x5e,0x5c,0x5a,0x58,0x56,0x55,0x53,0x50,0x4f,0x4d,0x4b,0x49,0x46,0x45,0x43,0x41,0x3f,0x3d,0x3b,0x39,0x37,0x35,0x33,0x31,0x2f,0x2e,0x2b,0x2a,0x28,0x25,0x24,0x22,0x21,0x1f,0x1e,0x1c,0x1b,0x19,0x17,0x16,0x14,0x13,0x12,0x11,0x0f,0x0d,0x0d,0x0b,0x09,0x08,0x08,0x07,0x06,0x04,0x04,0x02,0x02,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x03,0x02,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0c,0x0c,0x0e,0x10,0x11,0x13,0x14,0x15,0x17,0x19,0x19,0x1b,0x1d,0x1e,0x20,0x21,0x23,0x25,0x27,0x28,0x2b,0x2c,0x2e,0x2f,0x31,0x34,0x35,0x37,0x39,0x3a,0x3e,0x3f,0x40,0x42,0x45,0x46,0x48,0x4a,0x4b,0x4f,0x4f,0x52,0x53,0x56,0x57,0x59,0x5b,0x5c,0x5e,0x60,0x61,0x62,0x64,0x66,0x67,0x68,0x69,0x6a,0x6b,0x6b,0x6c,0x6d,0x6d,0x6e,0x6f,0x6f,0x6f,0x6f,0x6f,0x6f,0x6f,0x6f,0x6f,0x6e,0x6d,0x6d,0x6c,0x6b,0x6b,0x6a,0x69,0x68,0x66,0x65,0x63,0x62,0x61,0x60,0x5e,0x5c,0x5b,0x59,0x56,0x55,0x53,0x52,0x4f,0x4f,0x4b,0x4a,0x48,0x45,0x45,0x42,0x40,0x3f,0x3d,0x3a,0x39,0x37,0x35,0x33,0x31,0x2f,0x2e,0x2b,0x2a,0x28,0x26,0x25,0x23,0x21,0x20,0x1e,0x1d,0x1b,0x19,0x19,0x17,0x15,0x14,0x13,0x11,0x10,0x0e,0x0c,0x0b,0x0a,0x09,0x08,0x07,0x06,0x05,0x03,0x02,0x03,0x01,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x02,0x04,0x05,0x06,0x07,0x07,0x08,0x09,0x0b,0x0d,0x0e,0x0e,0x11,0x12,0x13,0x14,0x16,0x18,0x17,0x19,0x1c,0x1d,0x1f,0x20,0x22,0x24,0x26,0x27,0x29,0x2b,0x2c,0x2e,0x2f,0x33,0x34,0x36,0x37,0x39,0x3b,0x3d,0x3f,0x40,0x42,0x44,0x46,0x48,0x49,0x4c,0x4d,0x4f,0x50,0x53,0x54,0x56,0x58,0x59,0x5b,0x5d,0x5e,0x5f,0x61,0x62,0x64,0x65,0x66,0x67,0x67,0x68,0x69,0x69,0x6a,0x6b,0x6b,0x6b,0x6c,0x6c,0x6c,0x6c,0x6c,0x6b,0x6b,0x6a,0x6a,0x69,0x69,0x68,0x67,0x67,0x66,0x65,0x63,0x62,0x60,0x5f,0x5e,0x5d,0x5b,0x59,0x58,0x56,0x54,0x52,0x50,0x4f,0x4d,0x4c,0x49,0x48,0x46,0x43,0x42,0x40,0x3f,0x3d,0x3a,0x39,0x37,0x35,0x34,0x31,0x2f,0x2e,0x2c,0x29,0x29,0x27,0x25,0x24,0x22,0x20,0x1f,0x1d,0x1c,0x19,0x17,0x17,0x16,0x13,0x13,0x12,0x11,0x0f,0x0e,0x0d,0x0b,0x09,0x08,0x07,0x07,0x06,0x05,0x04,0x02,0x01,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x02,0x03,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0b,0x0b,0x0c,0x0e,0x10,0x10,0x11,0x14,0x15,0x16,0x17,0x19,0x1b,0x1c,0x1e,0x1f,0x21,0x22,0x24,0x26,0x27,0x29,0x2b,0x2c,0x2e,0x2f,0x32,0x34,0x36,0x37,0x39,0x3b,0x3d,0x3e,0x40,0x42,0x44,0x46,0x47,0x49,0x4b,0x4c,0x4e,0x50,0x52,0x54,0x55,0x57,0x58,0x5a,0x5b,0x5d,0x5e,0x5e,0x61,0x62,0x63,0x64,0x64,0x65,0x66,0x65,0x67,0x68,0x68,0x67,0x68,0x68,0x68,0x68,0x68,0x67,0x68,0x66,0x67,0x65,0x66,0x65,0x64,0x64,0x63,0x62,0x60,0x5f,0x5e,0x5d,0x5b,0x5a,0x57,0x56,0x55,0x53,0x52,0x50,0x4e,0x4c,0x4b,0x49,0x47,0x46,0x44,0x41,0x40,0x3e,0x3d,0x3b,0x39,0x37,0x36,0x34,0x32,0x2f,0x2e,0x2c,0x2b,0x29,0x27,0x26,0x24,0x22,0x20,0x1f,0x1e,0x1c,0x1b,0x19,0x17,0x15,0x15,0x13,0x11,0x10,0x10,0x0d,0x0c,0x0b,0x09,0x09,0x08,0x07,0x06,0x05,0x04,0x02,0x03,0x01,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x02,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x0a,0x0b,0x0c,0x0e,0x0e,0x10,0x11,0x12,0x13,0x14,0x16,0x19,0x19,0x1a,0x1c,0x1d,0x1f,0x20,0x22,0x25,0x25,0x27,0x29,0x2a,0x2c,0x2d,0x30,0x32,0x34,0x35,0x37,0x39,0x3b,0x3c,0x3e,0x40,0x42,0x44,0x45,0x47,0x49,0x4a,0x4b,0x4d,0x4f,0x51,0x51,0x53,0x55,0x56,0x57,0x59,0x5a,0x5b,0x5d,0x5e,0x5f,0x60,0x60,0x61,0x62,0x62,0x63,0x64,0x64,0x64,0x64,0x64,0x64,0x64,0x64,0x64,0x64,0x63,0x63,0x62,0x62,0x61,0x60,0x60,0x5f,0x5e,0x5c,0x5b,0x5a,0x59,0x57,0x56,0x55,0x52,0x51,0x51,0x4f,0x4d,0x4b,0x4a,0x49,0x47,0x45,0x44,0x42,0x3f,0x3e,0x3c,0x3b,0x39,0x37,0x35,0x34,0x32,0x2f,0x2d,0x2c,0x2a,0x29,0x28,0x25,0x25,0x23,0x20,0x1e,0x1d,0x1c,0x1a,0x19,0x19,0x16,0x14,0x13,0x13,0x11,0x10,0x0e,0x0d,0x0b,0x0b,0x09,0x08,0x07,0x06,0x05,0x04,0x03,0x02,0x02,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x02,0x03,0x04,0x05,0x05,0x06,0x07,0x09,0x0a,0x0b,0x0c,0x0d,0x0f,0x10,0x11,0x12,0x14,0x16,0x17,0x18,0x19,0x1b,0x1c,0x1e,0x20,0x21,0x23,0x24,0x26,0x27,0x29,0x2a,0x2c,0x2d,0x2f,0x32,0x34,0x36,0x37,0x39,0x39,0x3c,0x3e,0x40,0x42,0x43,0x45,0x46,0x48,0x48,0x4a,0x4c,0x4e,0x4f,0x50,0x52,0x53,0x54,0x56,0x57,0x58,0x5a,0x5b,0x5c,0x5d,0x5d,0x5e,0x5f,0x5f,0x60,0x60,0x61,0x61,0x61,0x61,0x61,0x61,0x61,0x61,0x61,0x60,0x60,0x5f,0x5f,0x5e,0x5d,0x5d,0x5c,0x5b,0x59,0x58,0x57,0x56,0x54,0x53,0x52,0x51,0x4f,0x4e,0x4c,0x4b,0x48,0x48,0x46,0x44,0x42,0x42,0x40,0x3d,0x3c,0x39,0x39,0x37,0x35,0x34,0x32,0x30,0x2d,0x2c,0x2a,0x29,0x27,0x26,0x24,0x23,0x21,0x1f,0x1d,0x1c,0x1b,0x19,0x18,0x17,0x16,0x14,0x12,0x11,0x10,0x0f,0x0d,0x0c,0x0c,0x0a,0x08,0x07,0x06,0x05,0x05,0x04,0x03,0x01,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x02,0x02,0x03,0x04,0x05,0x06,0x07,0x07,0x09,0x0a,0x0b,0x0c,0x0e,0x0f,0x10,0x12,0x14,0x15,0x16,0x17,0x19,0x1a,0x1b,0x1d,0x1f,0x1f,0x21,0x23,0x24,0x26,0x27,0x29,0x2a,0x2c,0x2e,0x2f,0x32,0x33,0x35,0x36,0x38,0x3a,0x3b,0x3d,0x3f,0x40,0x42,0x43,0x45,0x46,0x48,0x4a,0x4b,0x4c,0x4d,0x4f,0x50,0x51,0x52,0x53,0x54,0x56,0x57,0x58,0x59,0x59,0x5a,0x5b,0x5b,0x5c,0x5c,0x5d,0x5d,0x5d,0x5d,0x5d,0x5d,0x5d,0x5d,0x5d,0x5c,0x5c,0x5b,0x5b,0x5a,0x59,0x59,0x58,0x57,0x55,0x54,0x53,0x52,0x51,0x50,0x4f,0x4d,0x4c,0x4a,0x49,0x47,0x46,0x45,0x43,0x41,0x3f,0x3f,0x3d,0x3b,0x39,0x38,0x36,0x35,0x33,0x31,0x2f,0x2d,0x2c,0x2a,0x29,0x27,0x26,0x24,0x23,0x21,0x1f,0x1e,0x1c,0x1b,0x1a,0x19,0x17,0x16,0x15,0x14,0x12,0x10,0x0f,0x0e,0x0c,0x0b,0x0a,0x09,0x07,0x07,0x06,0x05,0x04,0x03,0x02,0x02,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x02,0x03,0x04,0x04,0x05,0x06,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x10,0x12,0x13,0x14,0x15,0x16,0x18,0x19,0x1a,0x1b,0x1d,0x1f,0x1f,0x21,0x23,0x25,0x26,0x27,0x29,0x2a,0x2c,0x2e,0x2f,0x32,0x33,0x35,0x36,0x38,0x39,0x3b,0x3d,0x3e,0x40,0x41,0x42,0x44,0x45,0x47,0x49,0x4a,0x4b,0x4c,0x4d,0x4e,0x4f,0x50,0x51,0x53,0x54,0x55,0x56,0x56,0x57,0x57,0x58,0x59,0x59,0x5a,0x5a,0x5a,0x5a,0x5a,0x5a,0x5a,0x5a,0x5a,0x59,0x59,0x58,0x57,0x57,0x56,0x56,0x55,0x54,0x52,0x51,0x50,0x4f,0x4e,0x4d,0x4c,0x4b,0x4a,0x49,0x47,0x45,0x44,0x42,0x41,0x3f,0x3d,0x3d,0x3b,0x39,0x37,0x36,0x35,0x33,0x32,0x2f,0x2e,0x2c,0x2a,0x29,0x27,0x26,0x25,0x23,0x21,0x1f,0x1f,0x1d,0x1b,0x1a,0x19,0x18,0x16,0x15,0x14,0x12,0x11,0x0f,0x0e,0x0d,0x0c,0x0b,0x0a,0x09,0x07,0x06,0x05,0x04,0x04,0x03,0x02,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x02,0x02,0x03,0x04,0x05,0x06,0x06,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0f,0x11,0x12,0x13,0x14,0x15,0x17,0x18,0x19,0x1a,0x1c,0x1e,0x1e,0x20,0x22,0x23,0x25,0x26,0x28,0x2a,0x2a,0x2c,0x2e,0x30,0x31,0x33,0x34,0x36,0x37,0x39,0x3b,0x3c,0x3e,0x3f,0x40,0x41,0x43,0x44,0x45,0x47,0x49,0x4a,0x4b,0x4c,0x4d,0x4e,0x4f,0x50,0x51,0x52,0x53,0x53,0x54,0x54,0x55,0x55,0x56,0x56,0x57,0x57,0x57,0x57,0x57,0x57,0x57,0x56,0x56,0x55,0x55,0x54,0x54,0x53,0x53,0x51,0x51,0x50,0x4f,0x4e,0x4d,0x4c,0x4b,0x4a,0x49,0x47,0x45,0x44,0x43,0x41,0x40,0x3f,0x3d,0x3b,0x3b,0x39,0x37,0x35,0x34,0x33,0x31,0x2f,0x2e,0x2c,0x2a,0x29,0x27,0x26,0x25,0x23,0x22,0x20,0x1e,0x1e,0x1c,0x1a,0x19,0x18,0x17,0x15,0x14,0x13,0x11,0x10,0x0e,0x0d,0x0c,0x0b,0x0a,0x09,0x08,0x06,0x06,0x05,0x04,0x03,0x02,0x02,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x02,0x03,0x03,0x04,0x05,0x07,0x08,0x08,0x09,0x0a,0x0b,0x0c,0x0e,0x10,0x11,0x12,0x13,0x14,0x16,0x17,0x18,0x19,0x1b,0x1d,0x1e,0x1f,0x21,0x22,0x23,0x25,0x26,0x27,0x29,0x2b,0x2c,0x2e,0x2f,0x31,0x32,0x34,0x35,0x37,0x39,0x3a,0x3c,0x3d,0x3e,0x3f,0x41,0x43,0x44,0x45,0x46,0x47,0x48,0x49,0x4a,0x4b,0x4c,0x4d,0x4f,0x4f,0x50,0x51,0x50,0x52,0x51,0x52,0x52,0x53,0x54,0x54,0x54,0x54,0x54,0x54,0x54,0x53,0x53,0x52,0x51,0x52,0x50,0x51,0x50,0x4f,0x4f,0x4c,0x4c,0x4b,0x4a,0x49,0x48,0x47,0x46,0x45,0x43,0x42,0x40,0x3f,0x3e,0x3d,0x3b,0x39,0x39,0x37,0x35,0x34,0x32,0x31,0x2f,0x2d,0x2b,0x2b,0x29,0x27,0x26,0x25,0x23,0x22,0x20,0x1e,0x1e,0x1d,0x1b,0x19,0x18,0x17,0x16,0x14,0x13,0x12,0x10,0x0f,0x0d,0x0c,0x0b,0x0a,0x09,0x08,0x08,0x06,0x05,0x04,0x03,0x03,0x02,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x02,0x03,0x04,0x04,0x06,0x06,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x10,0x11,0x12,0x14,0x15,0x16,0x17,0x18,0x19,0x1a,0x1d,0x1e,0x1f,0x20,0x22,0x23,0x24,0x27,0x27,0x29,0x2a,0x2c,0x2e,0x2e,0x31,0x31,0x33,0x35,0x36,0x37,0x39,0x3a,0x3b,0x3c,0x3e,0x40,0x41,0x43,0x43,0x44,0x45,0x46,0x47,0x48,0x49,0x4a,0x4b,0x4c,0x4c,0x4d,0x4e,0x4e,0x4f,0x4f,0x50,0x50,0x50,0x50,0x50,0x50,0x50,0x50,0x50,0x50,0x4f,0x4f,0x4f,0x4e,0x4e,0x4d,0x4c,0x4c,0x4b,0x4a,0x49,0x48,0x47,0x46,0x45,0x44,0x43,0x43,0x41,0x3f,0x3d,0x3c,0x3b,0x3a,0x38,0x36,0x36,0x35,0x33,0x31,0x31,0x2e,0x2e,0x2b,0x2a,0x29,0x27,0x26,0x24,0x23,0x22,0x20,0x1f,0x1e,0x1d,0x1a,0x19,0x18,0x17,0x16,0x15,0x13,0x11,0x11,0x0f,0x0e,0x0d,0x0c,0x0b,0x0a,0x09,0x08,0x06,0x05,0x04,0x04,0x03,0x02,0x01,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x02,0x02,0x03,0x04,0x05,0x05,0x06,0x07,0x08,0x0a,0x0b,0x0c,0x0d,0x0f,0x0f,0x11,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1a,0x1c,0x1e,0x1e,0x20,0x21,0x23,0x25,0x26,0x27,0x29,0x2a,0x2b,0x2c,0x2e,0x2f,0x31,0x33,0x34,0x35,0x37,0x38,0x39,0x3a,0x3b,0x3c,0x3e,0x40,0x40,0x41,0x42,0x43,0x44,0x45,0x46,0x47,0x48,0x49,0x49,0x4a,0x4b,0x4b,0x4c,0x4c,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4c,0x4c,0x4c,0x4b,0x4b,0x4a,0x49,0x49,0x48,0x47,0x46,0x45,0x44,0x43,0x42,0x41,0x40,0x40,0x3e,0x3c,0x3b,0x3a,0x39,0x38,0x36,0x34,0x34,0x34,0x31,0x2f,0x2e,0x2c,0x2b,0x2a,0x28,0x27,0x26,0x24,0x22,0x21,0x20,0x1e,0x1e,0x1c,0x1a,0x18,0x18,0x17,0x16,0x15,0x14,0x12,0x10,0x0f,0x0e,0x0d,0x0c,0x0b,0x0a,0x08,0x07,0x06,0x05,0x05,0x04,0x03,0x02,0x02,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x02,0x03,0x03,0x04,0x06,0x06,0x07,0x08,0x08,0x09,0x0a,0x0c,0x0e,0x0d,0x10,0x12,0x13,0x14,0x15,0x16,0x17,0x19,0x19,0x1a,0x1d,0x1e,0x1e,0x1f,0x21,0x23,0x24,0x26,0x27,0x28,0x2a,0x2b,0x2c,0x2e,0x30,0x31,0x32,0x33,0x35,0x36,0x37,0x38,0x39,0x3a,0x3c,0x3d,0x3e,0x3f,0x40,0x41,0x42,0x43,0x44,0x45,0x46,0x46,0x47,0x48,0x47,0x49,0x48,0x49,0x49,0x49,0x4a,0x4a,0x4b,0x4b,0x4b,0x4a,0x4a,0x49,0x49,0x49,0x48,0x49,0x47,0x48,0x47,0x46,0x46,0x45,0x44,0x43,0x42,0x41,0x40,0x3f,0x3e,0x3d,0x3b,0x3a,0x39,0x38,0x37,0x36,0x34,0x32,0x32,0x31,0x2f,0x2d,0x2c,0x2b,0x2a,0x28,0x27,0x26,0x24,0x23,0x20,0x1f,0x1e,0x1e,0x1c,0x1a,0x19,0x18,0x17,0x16,0x15,0x14,0x13,0x12,0x10,0x0d,0x0d,0x0c,0x0a,0x09,0x08,0x08,0x07,0x06,0x06,0x03,0x03,0x03,0x02,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x02,0x02,0x04,0x04,0x05,0x07,0x08,0x08,0x09,0x0a,0x0a,0x0c,0x0c,0x0e,0x10,0x11,0x12,0x13,0x14,0x15,0x17,0x19,0x19,0x1b,0x1d,0x1e,0x1f,0x1f,0x21,0x22,0x24,0x25,0x26,0x28,0x29,0x2a,0x2c,0x2e,0x2f,0x30,0x31,0x33,0x34,0x35,0x36,0x37,0x38,0x3a,0x3b,0x3c,0x3d,0x3e,0x3f,0x3f,0x40,0x41,0x42,0x43,0x43,0x44,0x44,0x45,0x45,0x46,0x46,0x47,0x47,0x47,0x47,0x47,0x47,0x47,0x47,0x47,0x47,0x46,0x46,0x46,0x45,0x45,0x44,0x44,0x43,0x43,0x42,0x41,0x40,0x3f,0x3f,0x3e,0x3d,0x3c,0x3b,0x39,0x38,0x37,0x36,0x35,0x34,0x32,0x30,0x30,0x2e,0x2d,0x2b,0x2a,0x29,0x28,0x26,0x25,0x24,0x22,0x21,0x1f,0x1f,0x1e,0x1d,0x1a,0x19,0x19,0x16,0x15,0x14,0x13,0x12,0x11,0x10,0x0e,0x0c,0x0b,0x0a,0x0a,0x09,0x08,0x08,0x07,0x05,0x04,0x04,0x02,0x02,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x02,0x03,0x04,0x05,0x05,0x06,0x07,0x08,0x09,0x0b,0x0b,0x0c,0x0e,0x0f,0x10,0x11,0x12,0x13,0x14,0x16,0x17,0x18,0x19,0x1b,0x1c,0x1d,0x1e,0x1f,0x21,0x22,0x24,0x25,0x25,0x26,0x28,0x2a,0x2b,0x2d,0x2e,0x2f,0x31,0x32,0x33,0x34,0x35,0x36,0x38,0x39,0x39,0x3a,0x3b,0x3c,0x3c,0x3e,0x3e,0x3f,0x40,0x40,0x41,0x41,0x42,0x42,0x43,0x43,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x43,0x43,0x43,0x42,0x42,0x41,0x41,0x40,0x40,0x3f,0x3e,0x3e,0x3c,0x3c,0x3b,0x3a,0x39,0x39,0x37,0x36,0x35,0x34,0x33,0x32,0x30,0x2e,0x2e,0x2c,0x2b,0x29,0x28,0x26,0x25,0x25,0x24,0x22,0x20,0x1f,0x1e,0x1d,0x1c,0x1b,0x19,0x18,0x17,0x15,0x14,0x13,0x12,0x11,0x10,0x0f,0x0e,0x0c,0x0b,0x0a,0x09,0x08,0x07,0x06,0x05,0x05,0x04,0x03,0x02,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x03,0x03,0x04,0x05,0x06,0x06,0x07,0x08,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,0x10,0x11,0x12,0x13,0x15,0x16,0x17,0x18,0x19,0x1a,0x1b,0x1c,0x1d,0x1f,0x20,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x2a,0x2b,0x2c,0x2e,0x2f,0x30,0x31,0x32,0x33,0x35,0x36,0x36,0x37,0x38,0x39,0x3a,0x3a,0x3c,0x3d,0x3d,0x3d,0x3e,0x3e,0x3f,0x3f,0x40,0x40,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x40,0x40,0x40,0x3f,0x3f,0x3e,0x3e,0x3d,0x3d,0x3d,0x3b,0x3a,0x3a,0x39,0x38,0x37,0x36,0x36,0x34,0x33,0x32,0x31,0x30,0x2f,0x2d,0x2b,0x2b,0x29,0x28,0x27,0x26,0x25,0x24,0x23,0x22,0x20,0x1e,0x1d,0x1c,0x1b,0x1a,0x19,0x18,0x17,0x16,0x14,0x13,0x12,0x11,0x10,0x0f,0x0e,0x0d,0x0c,0x0a,0x09,0x08,0x07,0x06,0x06,0x05,0x04,0x03,0x03,0x01,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x03,0x03,0x04,0x05,0x06,0x06,0x07,0x08,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,0x10,0x11,0x12,0x14,0x15,0x16,0x17,0x18,0x19,0x1a,0x1b,0x1c,0x1e,0x1f,0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x28,0x29,0x2a,0x2c,0x2d,0x2e,0x2f,0x30,0x31,0x33,0x34,0x34,0x35,0x36,0x37,0x37,0x38,0x39,0x3a,0x3a,0x3b,0x3b,0x3c,0x3d,0x3d,0x3d,0x3e,0x3e,0x3e,0x3e,0x3f,0x3f,0x3f,0x3f,0x3f,0x3e,0x3e,0x3e,0x3e,0x3d,0x3d,0x3d,0x3c,0x3b,0x3b,0x3a,0x39,0x39,0x38,0x37,0x37,0x36,0x35,0x34,0x34,0x32,0x31,0x30,0x2f,0x2e,0x2d,0x2b,0x29,0x29,0x28,0x26,0x25,0x24,0x23,0x22,0x21,0x20,0x1f,0x1d,0x1c,0x1b,0x1a,0x19,0x18,0x17,0x16,0x15,0x13,0x12,0x11,0x10,0x0f,0x0e,0x0d,0x0c,0x0b,0x09,0x08,0x07,0x06,0x06,0x05,0x04,0x03,0x03,0x01,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x02,0x02,0x03,0x04,0x04,0x05,0x06,0x07,0x07,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,0x10,0x11,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1a,0x1b,0x1d,0x1e,0x1f,0x20,0x21,0x22,0x23,0x24,0x25,0x27,0x28,0x29,0x2a,0x2b,0x2c,0x2d,0x2e,0x2f,0x31,0x32,0x32,0x33,0x34,0x35,0x35,0x36,0x36,0x38,0x38,0x39,0x39,0x3a,0x3a,0x3a,0x3b,0x3b,0x3c,0x3c,0x3c,0x3c,0x3c,0x3c,0x3c,0x3c,0x3c,0x3c,0x3b,0x3b,0x3b,0x3a,0x3a,0x3a,0x39,0x39,0x38,0x38,0x36,0x36,0x35,0x35,0x34,0x33,0x32,0x32,0x30,0x2f,0x2e,0x2d,0x2c,0x2b,0x2a,0x29,0x28,0x26,0x25,0x24,0x23,0x22,0x21,0x20,0x1f,0x1e,0x1c,0x1b,0x1a,0x19,0x18,0x17,0x16,0x15,0x14,0x12,0x11,0x10,0x0f,0x0e,0x0d,0x0c,0x0b,0x0a,0x08,0x07,0x07,0x06,0x05,0x04,0x04,0x02,0x02,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x02,0x02,0x03,0x04,0x04,0x05,0x06,0x07,0x07,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,0x10,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x18,0x19,0x1b,0x1c,0x1d,0x1e,0x1f,0x20,0x21,0x22,0x23,0x25,0x25,0x27,0x28,0x29,0x2a,0x2b,0x2c,0x2d,0x2d,0x2f,0x30,0x31,0x32,0x32,0x33,0x34,0x34,0x35,0x36,0x36,0x37,0x37,0x38,0x38,0x38,0x39,0x39,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x39,0x39,0x38,0x38,0x38,0x37,0x37,0x36,0x36,0x35,0x34,0x34,0x33,0x32,0x32,0x31,0x30,0x2f,0x2d,0x2d,0x2c,0x2b,0x2a,0x29,0x28,0x27,0x25,0x24,0x23,0x22,0x21,0x20,0x1f,0x1e,0x1d,0x1c,0x1a,0x19,0x18,0x18,0x17,0x16,0x15,0x14,0x13,0x11,0x10,0x0f,0x0e,0x0d,0x0c,0x0b,0x0a,0x09,0x07,0x07,0x06,0x05,0x04,0x04,0x03,0x02,0x02,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x02,0x02,0x03,0x04,0x05,0x05,0x06,0x08,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,0x11,0x12,0x13,0x13,0x14,0x15,0x16,0x17,0x18,0x1a,0x1b,0x1c,0x1d,0x1d,0x1e,0x1f,0x20,0x22,0x23,0x23,0x25,0x26,0x26,0x27,0x28,0x29,0x2a,0x2a,0x2d,0x2d,0x2d,0x2e,0x2f,0x30,0x31,0x32,0x32,0x34,0x33,0x34,0x34,0x34,0x35,0x35,0x37,0x37,0x37,0x37,0x36,0x36,0x36,0x36,0x36,0x37,0x37,0x37,0x37,0x35,0x35,0x34,0x34,0x34,0x33,0x34,0x32,0x32,0x31,0x30,0x2f,0x2e,0x2d,0x2d,0x2d,0x2a,0x2a,0x29,0x28,0x27,0x26,0x26,0x25,0x23,0x22,0x21,0x20,0x1f,0x1e,0x1d,0x1d,0x1c,0x1b,0x19,0x18,0x17,0x16,0x15,0x14,0x13,0x13,0x12,0x10,0x0f,0x0e,0x0d,0x0c,0x0b,0x0a,0x08,0x08,0x08,0x06,0x05,0x05,0x04,0x03,0x02,0x02,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x02,0x02,0x02,0x03,0x05,0x05,0x06,0x08,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x19,0x19,0x1a,0x1b,0x1b,0x1c,0x1e,0x1f,0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x26,0x27,0x29,0x28,0x2a,0x2b,0x2b,0x2c,0x2d,0x2d,0x2e,0x30,0x30,0x31,0x31,0x31,0x32,0x32,0x33,0x33,0x34,0x34,0x34,0x34,0x34,0x34,0x34,0x34,0x34,0x34,0x34,0x34,0x34,0x33,0x33,0x32,0x32,0x31,0x31,0x31,0x30,0x2f,0x2e,0x2d,0x2d,0x2c,0x2b,0x2b,0x2a,0x28,0x28,0x27,0x26,0x26,0x25,0x24,0x23,0x22,0x21,0x20,0x1f,0x1e,0x1c,0x1b,0x1b,0x1a,0x19,0x18,0x17,0x16,0x15,0x14,0x13,0x12,0x11,0x10,0x0e,0x0e,0x0d,0x0c,0x0b,0x0a,0x09,0x08,0x08,0x05,0x05,0x05,0x03,0x02,0x02,0x02,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x02,0x02,0x03,0x03,0x05,0x05,0x06,0x08,0x07,0x09,0x0a,0x0b,0x0c,0x0d,0x0c,0x0e,0x0f,0x11,0x12,0x13,0x14,0x15,0x16,0x16,0x17,0x18,0x19,0x1b,0x1c,0x1c,0x1d,0x1f,0x20,0x20,0x21,0x22,0x23,0x24,0x24,0x25,0x27,0x28,0x27,0x29,0x2a,0x2a,0x2b,0x2b,0x2c,0x2c,0x2e,0x2e,0x2f,0x2f,0x30,0x30,0x31,0x31,0x31,0x31,0x31,0x31,0x32,0x32,0x32,0x32,0x32,0x31,0x31,0x31,0x31,0x31,0x31,0x30,0x30,0x2f,0x2f,0x2e,0x2e,0x2c,0x2c,0x2b,0x2b,0x2a,0x2a,0x29,0x27,0x28,0x26,0x25,0x24,0x24,0x23,0x22,0x21,0x20,0x1f,0x1e,0x1d,0x1c,0x1c,0x1b,0x19,0x18,0x17,0x17,0x16,0x15,0x14,0x13,0x12,0x11,0x0f,0x0e,0x0c,0x0d,0x0c,0x0b,0x0a,0x09,0x07,0x08,0x06,0x05,0x05,0x03,0x03,0x02,0x02,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x02,0x03,0x04,0x05,0x05,0x06,0x07,0x07,0x08,0x09,0x0a,0x0b,0x0b,0x0d,0x0e,0x0f,0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x18,0x19,0x19,0x1a,0x1a,0x1b,0x1d,0x1e,0x1e,0x1f,0x20,0x21,0x22,0x22,0x23,0x24,0x26,0x26,0x27,0x28,0x28,0x29,0x29,0x2a,0x2a,0x2b,0x2c,0x2c,0x2c,0x2d,0x2d,0x2e,0x2e,0x2e,0x2e,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2f,0x2e,0x2e,0x2e,0x2e,0x2d,0x2d,0x2c,0x2c,0x2c,0x2b,0x2a,0x2a,0x29,0x29,0x28,0x28,0x26,0x26,0x26,0x24,0x23,0x22,0x22,0x21,0x20,0x1f,0x1e,0x1d,0x1c,0x1b,0x1a,0x1a,0x19,0x19,0x18,0x16,0x14,0x14,0x13,0x12,0x11,0x10,0x0f,0x0e,0x0d,0x0b,0x0b,0x0a,0x09,0x08,0x07,0x07,0x06,0x05,0x05,0x03,0x03,0x02,0x01,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x02,0x02,0x03,0x04,0x05,0x05,0x06,0x07,0x07,0x08,0x09,0x0a,0x0a,0x0c,0x0d,0x0e,0x0f,0x10,0x11,0x11,0x12,0x14,0x15,0x16,0x17,0x17,0x18,0x19,0x1a,0x1b,0x1c,0x1d,0x1e,0x1e,0x1f,0x1f,0x21,0x22,0x21,0x24,0x23,0x25,0x26,0x26,0x27,0x26,0x28,0x28,0x29,0x2a,0x2a,0x29,0x2b,0x2a,0x2c,0x2b,0x2b,0x2b,0x2c,0x2c,0x2d,0x2c,0x2c,0x2c,0x2d,0x2c,0x2c,0x2b,0x2b,0x2b,0x2c,0x2a,0x2b,0x29,0x2a,0x2a,0x29,0x28,0x28,0x26,0x27,0x26,0x26,0x23,0x23,0x24,0x21,0x22,0x21,0x1f,0x1f,0x1e,0x1e,0x1d,0x1c,0x1b,0x1a,0x19,0x18,0x17,0x17,0x16,0x15,0x13,0x12,0x11,0x11,0x10,0x0f,0x0e,0x0d,0x0c,0x0a,0x0a,0x09,0x08,0x07,0x07,0x06,0x05,0x05,0x04,0x03,0x02,0x02,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x02,0x02,0x03,0x03,0x05,0x05,0x06,0x07,0x07,0x08,0x0a,0x0a,0x0a,0x0c,0x0d,0x0d,0x0e,0x0f,0x10,0x11,0x13,0x13,0x14,0x15,0x16,0x17,0x17,0x18,0x1a,0x1a,0x1b,0x1c,0x1c,0x1d,0x1e,0x1f,0x1f,0x21,0x21,0x22,0x22,0x23,0x23,0x24,0x25,0x25,0x25,0x26,0x27,0x27,0x27,0x28,0x28,0x29,0x29,0x29,0x29,0x29,0x29,0x2a,0x2a,0x2a,0x2a,0x2a,0x29,0x29,0x29,0x29,0x29,0x29,0x28,0x28,0x27,0x27,0x27,0x26,0x25,0x25,0x25,0x24,0x23,0x23,0x22,0x22,0x21,0x20,0x1f,0x1f,0x1e,0x1d,0x1c,0x1c,0x1b,0x1a,0x19,0x18,0x17,0x17,0x16,0x15,0x13,0x13,0x13,0x11,0x10,0x0f,0x0e,0x0d,0x0d,0x0c,0x0a,0x0a,0x09,0x08,0x07,0x07,0x06,0x05,0x05,0x03,0x03,0x02,0x02,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x02,0x03,0x03,0x04,0x05,0x05,0x06,0x06,0x07,0x09,0x09,0x09,0x0b,0x0c,0x0c,0x0d,0x0e,0x0f,0x11,0x11,0x11,0x13,0x14,0x14,0x15,0x16,0x17,0x17,0x19,0x1a,0x1a,0x1b,0x1c,0x1c,0x1d,0x1e,0x1e,0x1f,0x1f,0x21,0x21,0x22,0x22,0x23,0x23,0x24,0x25,0x25,0x25,0x26,0x26,0x27,0x27,0x27,0x27,0x27,0x27,0x27,0x28,0x28,0x28,0x28,0x28,0x27,0x27,0x27,0x27,0x27,0x27,0x27,0x26,0x26,0x25,0x25,0x24,0x24,0x23,0x23,0x22,0x22,0x21,0x21,0x1f,0x1f,0x1e,0x1e,0x1d,0x1c,0x1c,0x1b,0x1a,0x1a,0x18,0x17,0x17,0x16,0x15,0x14,0x14,0x13,0x11,0x11,0x10,0x0f,0x0e,0x0d,0x0c,0x0c,0x0b,0x09,0x09,0x08,0x07,0x06,0x06,0x05,0x05,0x03,0x03,0x02,0x02,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x02,0x02,0x03,0x04,0x05,0x05,0x06,0x06,0x08,0x08,0x08,0x0a,0x0b,0x0b,0x0c,0x0d,0x0e,0x0f,0x0f,0x11,0x12,0x13,0x13,0x14,0x15,0x15,0x17,0x17,0x17,0x19,0x1a,0x1a,0x1b,0x1c,0x1c,0x1d,0x1e,0x1e,0x1f,0x1f,0x20,0x20,0x21,0x21,0x22,0x23,0x23,0x23,0x24,0x24,0x25,0x25,0x25,0x25,0x25,0x25,0x26,0x26,0x26,0x26,0x26,0x26,0x26,0x25,0x25,0x25,0x25,0x25,0x25,0x24,0x24,0x23,0x23,0x22,0x22,0x21,0x21,0x20,0x20,0x1f,0x1f,0x1e,0x1d,0x1d,0x1c,0x1c,0x1b,0x1a,0x1a,0x19,0x17,0x17,0x16,0x15,0x15,0x14,0x13,0x13,0x12,0x11,0x0f,0x0f,0x0e,0x0d,0x0c,0x0b,0x0b,0x0a,0x08,0x08,0x07,0x06,0x06,0x05,0x05,0x04,0x02,0x02,0x01,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x02,0x02,0x03,0x04,0x04,0x05,0x06,0x06,0x08,0x08,0x09,0x0a,0x0a,0x0b,0x0c,0x0c,0x0d,0x0f,0x10,0x11,0x11,0x12,0x13,0x13,0x14,0x15,0x16,0x17,0x17,0x18,0x19,0x19,0x1a,0x1a,0x1c,0x1c,0x1d,0x1d,0x1e,0x1e,0x1f,0x1f,0x20,0x20,0x21,0x21,0x22,0x22,0x22,0x23,0x23,0x23,0x23,0x23,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x23,0x23,0x23,0x23,0x23,0x22,0x22,0x22,0x21,0x21,0x20,0x20,0x1f,0x1f,0x1e,0x1e,0x1d,0x1d,0x1c,0x1b,0x1a,0x1a,0x19,0x19,0x18,0x17,0x17,0x16,0x15,0x14,0x13,0x13,0x12,0x11,0x10,0x10,0x0e,0x0d,0x0c,0x0c,0x0b,0x0a,0x0a,0x08,0x08,0x08,0x06,0x06,0x05,0x04,0x04,0x03,0x02,0x02,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x02,0x02,0x03,0x03,0x04,0x05,0x05,0x07,0x07,0x08,0x09,0x09,0x0a,0x0b,0x0b,0x0c,0x0d,0x0d,0x0f,0x10,0x11,0x11,0x12,0x12,0x13,0x15,0x15,0x15,0x16,0x17,0x17,0x18,0x18,0x1a,0x1a,0x1b,0x1b,0x1c,0x1c,0x1c,0x1e,0x1d,0x1e,0x1f,0x1f,0x1f,0x1f,0x21,0x20,0x20,0x20,0x20,0x22,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x20,0x20,0x20,0x20,0x21,0x1f,0x1f,0x1f,0x1e,0x1e,0x1d,0x1e,0x1c,0x1c,0x1c,0x1b,0x1b,0x1a,0x19,0x18,0x18,0x17,0x17,0x16,0x15,0x15,0x14,0x13,0x12,0x12,0x11,0x11,0x10,0x0e,0x0d,0x0e,0x0c,0x0b,0x0b,0x0a,0x09,0x09,0x07,0x07,0x06,0x05,0x05,0x04,0x03,0x03,0x02,0x02,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x02,0x02,0x03,0x03,0x03,0x05,0x06,0x06,0x07,0x08,0x08,0x09,0x0a,0x0a,0x0c,0x0b,0x0b,0x0e,0x0e,0x0f,0x10,0x11,0x10,0x12,0x12,0x14,0x13,0x14,0x15,0x15,0x17,0x16,0x18,0x19,0x19,0x1a,0x1a,0x1b,0x1b,0x1b,0x1c,0x1c,0x1d,0x1d,0x1d,0x1e,0x1e,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1e,0x1e,0x1d,0x1d,0x1d,0x1c,0x1c,0x1b,0x1b,0x1b,0x1a,0x1a,0x19,0x18,0x18,0x16,0x17,0x15,0x15,0x14,0x14,0x14,0x12,0x12,0x10,0x11,0x10,0x0f,0x0e,0x0e,0x0b,0x0b,0x0b,0x0a,0x0a,0x09,0x08,0x08,0x06,0x06,0x05,0x05,0x03,0x03,0x03,0x02,0x02,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x02,0x02,0x03,0x03,0x04,0x05,0x06,0x05,0x07,0x08,0x08,0x09,0x09,0x0b,0x0b,0x0b,0x0c,0x0c,0x0d,0x0e,0x0f,0x10,0x11,0x11,0x12,0x13,0x14,0x13,0x15,0x15,0x16,0x16,0x17,0x18,0x18,0x19,0x19,0x19,0x1a,0x1a,0x1b,0x1b,0x1b,0x1c,0x1c,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1c,0x1c,0x1b,0x1b,0x1b,0x1a,0x1a,0x19,0x19,0x19,0x18,0x18,0x17,0x16,0x16,0x15,0x15,0x13,0x14,0x12,0x12,0x10,0x11,0x10,0x0f,0x0e,0x0d,0x0c,0x0c,0x0b,0x0b,0x0a,0x09,0x09,0x08,0x08,0x07,0x06,0x06,0x05,0x04,0x03,0x03,0x02,0x02,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x03,0x02,0x03,0x04,0x05,0x05,0x06,0x06,0x07,0x07,0x0a,0x09,0x0b,0x0a,0x0b,0x0d,0x0c,0x0d,0x0e,0x0f,0x11,0x10,0x11,0x12,0x12,0x13,0x13,0x14,0x14,0x15,0x16,0x16,0x17,0x17,0x17,0x18,0x18,0x19,0x19,0x19,0x1a,0x1a,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1a,0x1a,0x19,0x19,0x19,0x18,0x18,0x17,0x17,0x17,0x16,0x16,0x15,0x14,0x14,0x13,0x13,0x12,0x12,0x11,0x10,0x10,0x0f,0x0e,0x0d,0x0c,0x0d,0x0b,0x0a,0x0b,0x09,0x08,0x07,0x07,0x06,0x06,0x05,0x05,0x04,0x03,0x02,0x03,0x01,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x02,0x03,0x03,0x04,0x04,0x05,0x06,0x06,0x07,0x08,0x08,0x09,0x09,0x0a,0x0b,0x0b,0x0c,0x0c,0x0d,0x0e,0x0f,0x10,0x10,0x11,0x11,0x12,0x12,0x13,0x14,0x14,0x15,0x15,0x16,0x16,0x16,0x17,0x17,0x18,0x18,0x18,0x19,0x18,0x19,0x19,0x19,0x19,0x1a,0x1a,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x1a,0x19,0x19,0x19,0x19,0x19,0x18,0x19,0x18,0x18,0x18,0x17,0x17,0x16,0x16,0x16,0x15,0x15,0x14,0x13,0x13,0x12,0x12,0x11,0x11,0x10,0x11,0x0f,0x0e,0x0d,0x0c,0x0c,0x0b,0x0b,0x0a,0x09,0x09,0x08,0x07,0x07,0x06,0x06,0x05,0x04,0x04,0x03,0x02,0x02,0x01,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x02,0x02,0x03,0x04,0x04,0x05,0x05,0x06,0x06,0x07,0x08,0x08,0x09,0x09,0x0a,0x0a,0x0b,0x0b,0x0d,0x0d,0x0e,0x0f,0x0f,0x10,0x10,0x11,0x11,0x12,0x12,0x13,0x13,0x14,0x14,0x14,0x15,0x15,0x16,0x16,0x16,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x16,0x16,0x16,0x15,0x15,0x14,0x14,0x14,0x13,0x13,0x12,0x12,0x11,0x11,0x10,0x10,0x0f,0x0f,0x0e,0x0d,0x0d,0x0b,0x0b,0x0a,0x0a,0x09,0x09,0x08,0x08,0x07,0x06,0x06,0x05,0x05,0x04,0x04,0x02,0x02,0x02,0x01,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x02,0x02,0x03,0x03,0x04,0x04,0x05,0x05,0x06,0x07,0x07,0x08,0x08,0x09,0x09,0x0a,0x0a,0x0b,0x0b,0x0d,0x0d,0x0e,0x0e,0x0f,0x0f,0x10,0x11,0x11,0x12,0x12,0x12,0x13,0x13,0x13,0x14,0x14,0x14,0x15,0x15,0x15,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x15,0x15,0x15,0x14,0x14,0x14,0x13,0x13,0x13,0x12,0x12,0x12,0x11,0x10,0x10,0x0f,0x0f,0x0e,0x0e,0x0d,0x0d,0x0b,0x0b,0x0a,0x0a,0x09,0x09,0x08,0x08,0x07,0x07,0x06,0x05,0x05,0x04,0x04,0x03,0x03,0x02,0x02,0x01,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x02,0x02,0x02,0x03,0x03,0x04,0x05,0x06,0x06,0x06,0x07,0x07,0x08,0x08,0x09,0x09,0x0a,0x0b,0x0b,0x0c,0x0c,0x0d,0x0d,0x0e,0x0e,0x0f,0x10,0x10,0x11,0x11,0x11,0x11,0x12,0x12,0x13,0x13,0x13,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x13,0x13,0x13,0x12,0x12,0x11,0x11,0x11,0x11,0x10,0x10,0x0f,0x0e,0x0e,0x0d,0x0d,0x0c,0x0c,0x0b,0x0b,0x0a,0x09,0x09,0x08,0x08,0x07,0x07,0x06,0x06,0x05,0x05,0x04,0x03,0x03,0x02,0x02,0x02,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x01,0x02,0x02,0x03,0x03,0x04,0x05,0x05,0x06,0x06,0x07,0x07,0x07,0x08,0x08,0x09,0x0a,0x0a,0x0b,0x0b,0x0c,0x0c,0x0c,0x0d,0x0e,0x0e,0x0f,0x0f,0x10,0x10,0x10,0x11,0x11,0x11,0x11,0x12,0x12,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x12,0x12,0x11,0x11,0x11,0x11,0x10,0x10,0x10,0x0f,0x0f,0x0e,0x0d,0x0d,0x0c,0x0c,0x0c,0x0b,0x0b,0x0a,0x0a,0x09,0x08,0x08,0x07,0x07,0x07,0x06,0x06,0x05,0x04,0x04,0x03,0x03,0x02,0x02,0x01,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x02,0x02,0x02,0x03,0x04,0x04,0x05,0x05,0x06,0x06,0x06,0x07,0x07,0x08,0x09,0x09,0x09,0x0a,0x0a,0x0b,0x0b,0x0b,0x0c,0x0c,0x0d,0x0d,0x0e,0x0e,0x0e,0x0f,0x0f,0x10,0x10,0x10,0x10,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x12,0x12,0x12,0x12,0x12,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x10,0x10,0x10,0x0f,0x0f,0x0f,0x0e,0x0e,0x0e,0x0d,0x0d,0x0c,0x0c,0x0b,0x0b,0x0b,0x0a,0x0a,0x09,0x09,0x09,0x08,0x07,0x07,0x06,0x06,0x06,0x05,0x05,0x04,0x03,0x03,0x02,0x02,0x02,0x01,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x01,0x02,0x02,0x02,0x03,0x04,0x03,0x05,0x05,0x06,0x06,0x06,0x07,0x08,0x08,0x07,0x09,0x09,0x0a,0x0a,0x0a,0x0b,0x0a,0x0c,0x0b,0x0c,0x0c,0x0c,0x0d,0x0e,0x0e,0x0e,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0e,0x0e,0x0e,0x0d,0x0c,0x0c,0x0c,0x0b,0x0c,0x0a,0x0b,0x0a,0x0a,0x0a,0x09,0x09,0x07,0x08,0x08,0x07,0x06,0x06,0x06,0x05,0x05,0x03,0x04,0x03,0x02,0x02,0x02,0x01,0x01,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x02,0x02,0x03,0x02,0x03,0x04,0x04,0x05,0x05,0x06,0x06,0x07,0x07,0x06,0x08,0x08,0x09,0x09,0x09,0x0a,0x0a,0x0b,0x0b,0x0a,0x0a,0x0c,0x0b,0x0c,0x0d,0x0c,0x0d,0x0d,0x0e,0x0e,0x0e,0x0e,0x0e,0x0e,0x0e,0x0e,0x0f,0x0f,0x0f,0x0f,0x0f,0x0e,0x0e,0x0e,0x0e,0x0e,0x0e,0x0e,0x0e,0x0d,0x0d,0x0c,0x0c,0x0c,0x0b,0x0c,0x0a,0x0a,0x0b,0x0b,0x0a,0x0a,0x09,0x09,0x09,0x08,0x08,0x06,0x07,0x07,0x06,0x06,0x05,0x05,0x04,0x04,0x03,0x02,0x03,0x02,0x02,0x01,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x02,0x03,0x02,0x02,0x03,0x03,0x04,0x04,0x05,0x05,0x06,0x06,0x06,0x07,0x07,0x07,0x08,0x08,0x0a,0x09,0x09,0x09,0x0a,0x0a,0x0a,0x0b,0x0b,0x0b,0x0b,0x0c,0x0c,0x0c,0x0c,0x0c,0x0c,0x0c,0x0c,0x0d,0x0d,0x0d,0x0d,0x0d,0x0c,0x0c,0x0c,0x0c,0x0c,0x0c,0x0c,0x0c,0x0b,0x0b,0x0b,0x0a,0x0a,0x0a,0x0a,0x09,0x09,0x09,0x0a,0x08,0x08,0x07,0x07,0x07,0x06,0x06,0x06,0x05,0x05,0x04,0x04,0x03,0x03,0x02,0x02,0x03,0x02,0x01,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x01,0x02,0x02,0x02,0x02,0x03,0x03,0x04,0x04,0x05,0x05,0x05,0x06,0x06,0x06,0x07,0x07,0x08,0x08,0x08,0x08,0x09,0x09,0x09,0x09,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0b,0x0b,0x0b,0x0b,0x0b,0x0b,0x0b,0x0b,0x0b,0x0b,0x0b,0x0b,0x0b,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x09,0x09,0x09,0x09,0x08,0x08,0x08,0x08,0x07,0x07,0x06,0x06,0x06,0x05,0x05,0x05,0x04,0x04,0x03,0x03,0x02,0x02,0x02,0x02,0x01,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x01,0x01,0x02,0x02,0x02,0x03,0x03,0x03,0x04,0x04,0x04,0x05,0x05,0x05,0x06,0x06,0x06,0x07,0x07,0x07,0x07,0x08,0x08,0x08,0x08,0x09,0x09,0x09,0x09,0x09,0x09,0x09,0x09,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x09,0x09,0x09,0x09,0x09,0x09,0x09,0x09,0x08,0x08,0x08,0x08,0x07,0x07,0x07,0x07,0x06,0x06,0x06,0x05,0x05,0x05,0x04,0x04,0x04,0x03,0x03,0x02,0x02,0x02,0x02,0x01,0x01,0x01,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x01,0x01,0x02,0x02,0x02,0x02,0x03,0x03,0x03,0x04,0x04,0x04,0x05,0x05,0x05,0x06,0x06,0x06,0x06,0x07,0x07,0x07,0x07,0x07,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x09,0x09,0x09,0x09,0x09,0x09,0x09,0x09,0x09,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x07,0x07,0x07,0x07,0x07,0x06,0x06,0x06,0x06,0x05,0x05,0x05,0x04,0x04,0x04,0x03,0x03,0x03,0x02,0x02,0x02,0x02,0x01,0x01,0x01,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x01,0x02,0x02,0x02,0x02,0x02,0x03,0x03,0x03,0x04,0x04,0x04,0x05,0x05,0x05,0x05,0x06,0x06,0x06,0x06,0x06,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x06,0x06,0x06,0x06,0x06,0x05,0x05,0x05,0x05,0x04,0x04,0x04,0x03,0x03,0x03,0x02,0x02,0x02,0x02,0x02,0x01,0x01,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x01,0x02,0x02,0x02,0x02,0x02,0x02,0x03,0x03,0x04,0x04,0x04,0x04,0x04,0x05,0x05,0x05,0x05,0x05,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x05,0x05,0x05,0x05,0x05,0x04,0x04,0x04,0x04,0x04,0x03,0x03,0x02,0x02,0x02,0x02,0x02,0x02,0x01,0x01,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x02,0x02,0x02,0x02,0x03,0x03,0x03,0x03,0x03,0x04,0x04,0x04,0x04,0x04,0x05,0x05,0x05,0x05,0x05,0x05,0x05,0x05,0x05,0x05,0x05,0x05,0x05,0x05,0x05,0x05,0x05,0x05,0x05,0x05,0x05,0x05,0x05,0x04,0x04,0x04,0x04,0x04,0x03,0x03,0x03,0x03,0x03,0x02,0x02,0x02,0x02,0x01,0x01,0x01,0x01,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x01,0x01,0x01,0x02,0x02,0x01,0x01,0x02,0x02,0x03,0x03,0x02,0x02,0x02,0x03,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x03,0x02,0x02,0x02,0x03,0x03,0x02,0x02,0x01,0x01,0x02,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x02,0x02,0x01,0x01,0x02,0x02,0x02,0x03,0x03,0x03,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x03,0x03,0x03,0x02,0x02,0x02,0x01,0x01,0x02,0x02,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 +}; +unsigned char data200[40000] = { +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x02,0x02,0x02,0x02,0x02,0x02,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x02,0x02,0x02,0x02,0x02,0x02,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x02,0x02,0x02,0x02,0x02,0x03,0x03,0x03,0x03,0x03,0x04,0x04,0x04,0x04,0x04,0x04,0x05,0x05,0x05,0x05,0x05,0x05,0x05,0x05,0x05,0x05,0x05,0x05,0x05,0x05,0x05,0x05,0x05,0x05,0x05,0x05,0x05,0x05,0x05,0x05,0x05,0x04,0x04,0x04,0x04,0x04,0x04,0x03,0x03,0x03,0x03,0x03,0x02,0x02,0x02,0x02,0x02,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x01,0x01,0x02,0x02,0x02,0x02,0x02,0x02,0x03,0x03,0x03,0x04,0x04,0x04,0x04,0x04,0x05,0x05,0x05,0x05,0x05,0x05,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x05,0x05,0x05,0x05,0x05,0x05,0x04,0x04,0x04,0x04,0x04,0x03,0x03,0x03,0x02,0x02,0x02,0x02,0x02,0x02,0x01,0x01,0x01,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x01,0x01,0x02,0x02,0x02,0x02,0x02,0x03,0x03,0x03,0x04,0x04,0x04,0x04,0x05,0x05,0x05,0x05,0x06,0x06,0x06,0x06,0x06,0x06,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x06,0x06,0x06,0x06,0x06,0x06,0x05,0x05,0x05,0x05,0x04,0x04,0x04,0x04,0x03,0x03,0x03,0x02,0x02,0x02,0x02,0x02,0x01,0x01,0x01,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x01,0x01,0x02,0x02,0x02,0x02,0x02,0x03,0x03,0x03,0x04,0x04,0x04,0x05,0x05,0x05,0x05,0x06,0x06,0x06,0x06,0x07,0x07,0x07,0x07,0x07,0x07,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x09,0x09,0x09,0x09,0x09,0x09,0x09,0x09,0x09,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x07,0x07,0x07,0x07,0x07,0x07,0x06,0x06,0x06,0x06,0x05,0x05,0x05,0x05,0x04,0x04,0x04,0x03,0x03,0x03,0x02,0x02,0x02,0x02,0x02,0x01,0x01,0x01,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x01,0x01,0x02,0x02,0x02,0x02,0x03,0x03,0x03,0x04,0x04,0x04,0x05,0x05,0x05,0x06,0x06,0x06,0x06,0x07,0x07,0x07,0x07,0x08,0x08,0x08,0x08,0x08,0x09,0x09,0x09,0x09,0x09,0x09,0x09,0x09,0x09,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x09,0x09,0x09,0x09,0x09,0x09,0x09,0x09,0x09,0x08,0x08,0x08,0x08,0x08,0x07,0x07,0x07,0x07,0x06,0x06,0x06,0x06,0x05,0x05,0x05,0x04,0x04,0x04,0x03,0x03,0x03,0x02,0x02,0x02,0x02,0x01,0x01,0x01,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x01,0x02,0x02,0x02,0x02,0x03,0x03,0x03,0x04,0x04,0x05,0x05,0x05,0x06,0x06,0x06,0x07,0x07,0x07,0x07,0x08,0x08,0x08,0x09,0x09,0x09,0x09,0x09,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0b,0x0b,0x0b,0x0b,0x0b,0x0b,0x0b,0x0b,0x0b,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x09,0x09,0x09,0x09,0x09,0x08,0x08,0x08,0x07,0x07,0x07,0x07,0x06,0x06,0x06,0x05,0x05,0x05,0x04,0x04,0x03,0x03,0x03,0x02,0x02,0x02,0x02,0x01,0x01,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x01,0x02,0x02,0x02,0x02,0x03,0x03,0x04,0x04,0x04,0x05,0x05,0x06,0x06,0x06,0x07,0x07,0x07,0x08,0x08,0x08,0x09,0x09,0x09,0x09,0x0a,0x0a,0x0a,0x0a,0x0a,0x0b,0x0b,0x0b,0x0b,0x0b,0x0b,0x0b,0x0c,0x0c,0x0c,0x0c,0x0c,0x0c,0x0c,0x0c,0x0c,0x0c,0x0c,0x0c,0x0c,0x0c,0x0c,0x0b,0x0b,0x0b,0x0b,0x0b,0x0b,0x0b,0x0a,0x0a,0x0a,0x0a,0x0a,0x09,0x09,0x09,0x09,0x08,0x08,0x08,0x07,0x07,0x07,0x06,0x06,0x06,0x05,0x05,0x04,0x04,0x04,0x03,0x03,0x02,0x02,0x02,0x02,0x01,0x01,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x01,0x02,0x02,0x02,0x03,0x03,0x03,0x04,0x04,0x05,0x05,0x05,0x06,0x06,0x06,0x07,0x07,0x08,0x08,0x08,0x09,0x09,0x09,0x0a,0x0a,0x0a,0x0a,0x0b,0x0b,0x0b,0x0b,0x0c,0x0c,0x0c,0x0c,0x0d,0x0d,0x0d,0x0d,0x0d,0x0d,0x0d,0x0d,0x0d,0x0e,0x0e,0x0e,0x0e,0x0e,0x0d,0x0d,0x0d,0x0d,0x0d,0x0d,0x0d,0x0d,0x0d,0x0c,0x0c,0x0c,0x0c,0x0b,0x0b,0x0b,0x0b,0x0a,0x0a,0x0a,0x0a,0x09,0x09,0x09,0x08,0x08,0x08,0x07,0x07,0x06,0x06,0x06,0x05,0x05,0x05,0x04,0x04,0x03,0x03,0x03,0x02,0x02,0x02,0x01,0x01,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x02,0x02,0x02,0x03,0x03,0x03,0x04,0x04,0x05,0x05,0x06,0x06,0x06,0x07,0x07,0x07,0x08,0x08,0x09,0x09,0x09,0x0a,0x0a,0x0a,0x0b,0x0b,0x0b,0x0b,0x0c,0x0c,0x0d,0x0d,0x0d,0x0d,0x0e,0x0e,0x0e,0x0e,0x0e,0x0e,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0e,0x0e,0x0e,0x0e,0x0e,0x0e,0x0d,0x0d,0x0d,0x0d,0x0c,0x0c,0x0b,0x0b,0x0b,0x0b,0x0a,0x0a,0x0a,0x09,0x09,0x09,0x08,0x08,0x07,0x07,0x07,0x06,0x06,0x06,0x05,0x05,0x04,0x04,0x03,0x03,0x03,0x02,0x02,0x02,0x01,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x01,0x02,0x02,0x02,0x03,0x03,0x04,0x04,0x05,0x05,0x06,0x06,0x06,0x07,0x07,0x08,0x08,0x08,0x09,0x09,0x0a,0x0a,0x0a,0x0b,0x0b,0x0b,0x0c,0x0c,0x0d,0x0d,0x0d,0x0e,0x0e,0x0e,0x0f,0x0f,0x0f,0x0f,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x11,0x11,0x11,0x11,0x11,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x0f,0x0f,0x0f,0x0f,0x0e,0x0e,0x0e,0x0d,0x0d,0x0d,0x0c,0x0c,0x0b,0x0b,0x0b,0x0a,0x0a,0x0a,0x09,0x09,0x08,0x08,0x08,0x07,0x07,0x06,0x06,0x06,0x05,0x05,0x04,0x04,0x03,0x03,0x02,0x02,0x02,0x01,0x01,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x02,0x02,0x02,0x03,0x03,0x04,0x04,0x05,0x05,0x06,0x06,0x06,0x07,0x07,0x08,0x08,0x09,0x09,0x0a,0x0a,0x0a,0x0b,0x0b,0x0b,0x0c,0x0c,0x0d,0x0d,0x0e,0x0e,0x0e,0x0f,0x0f,0x10,0x10,0x10,0x10,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x10,0x10,0x10,0x10,0x0f,0x0f,0x0e,0x0e,0x0e,0x0d,0x0d,0x0c,0x0c,0x0b,0x0b,0x0b,0x0a,0x0a,0x0a,0x09,0x09,0x08,0x08,0x07,0x07,0x06,0x06,0x06,0x05,0x05,0x04,0x04,0x03,0x03,0x02,0x02,0x02,0x01,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x01,0x02,0x02,0x03,0x03,0x04,0x04,0x05,0x05,0x06,0x06,0x07,0x07,0x07,0x08,0x08,0x09,0x09,0x0a,0x0a,0x0b,0x0b,0x0c,0x0c,0x0c,0x0d,0x0d,0x0e,0x0e,0x0f,0x0f,0x10,0x10,0x10,0x11,0x11,0x11,0x11,0x11,0x12,0x12,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x12,0x12,0x11,0x11,0x11,0x11,0x11,0x10,0x10,0x10,0x0f,0x0f,0x0e,0x0e,0x0d,0x0d,0x0c,0x0c,0x0c,0x0b,0x0b,0x0a,0x0a,0x09,0x09,0x08,0x08,0x07,0x07,0x07,0x06,0x06,0x05,0x05,0x04,0x04,0x03,0x03,0x02,0x02,0x01,0x01,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x02,0x02,0x02,0x03,0x03,0x04,0x05,0x05,0x06,0x06,0x06,0x07,0x07,0x08,0x08,0x09,0x09,0x0a,0x0a,0x0b,0x0b,0x0c,0x0c,0x0d,0x0d,0x0e,0x0e,0x0f,0x0f,0x10,0x10,0x11,0x11,0x11,0x11,0x12,0x12,0x13,0x13,0x13,0x13,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x13,0x13,0x13,0x13,0x12,0x12,0x11,0x11,0x11,0x11,0x10,0x10,0x0f,0x0f,0x0e,0x0e,0x0d,0x0d,0x0c,0x0c,0x0b,0x0b,0x0a,0x0a,0x09,0x09,0x08,0x08,0x07,0x07,0x06,0x06,0x06,0x05,0x05,0x04,0x03,0x03,0x02,0x02,0x02,0x01,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x01,0x02,0x02,0x03,0x03,0x04,0x04,0x05,0x05,0x06,0x06,0x07,0x07,0x08,0x08,0x09,0x09,0x0a,0x0a,0x0b,0x0b,0x0c,0x0d,0x0d,0x0e,0x0e,0x0f,0x0f,0x10,0x10,0x11,0x11,0x12,0x12,0x12,0x13,0x13,0x13,0x14,0x14,0x14,0x14,0x15,0x15,0x15,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x15,0x15,0x15,0x14,0x14,0x14,0x14,0x13,0x13,0x13,0x12,0x12,0x12,0x11,0x11,0x10,0x10,0x0f,0x0f,0x0e,0x0e,0x0d,0x0d,0x0c,0x0b,0x0b,0x0a,0x0a,0x09,0x09,0x08,0x08,0x07,0x07,0x06,0x06,0x05,0x05,0x04,0x04,0x03,0x03,0x02,0x02,0x01,0x01,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x02,0x02,0x02,0x03,0x04,0x04,0x05,0x05,0x06,0x06,0x07,0x07,0x08,0x08,0x09,0x09,0x0a,0x0a,0x0b,0x0b,0x0c,0x0d,0x0d,0x0e,0x0f,0x0f,0x10,0x10,0x11,0x11,0x12,0x12,0x12,0x13,0x13,0x14,0x14,0x14,0x15,0x15,0x16,0x16,0x16,0x16,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x16,0x16,0x16,0x16,0x15,0x15,0x14,0x14,0x14,0x13,0x13,0x12,0x12,0x12,0x11,0x11,0x10,0x10,0x0f,0x0f,0x0e,0x0d,0x0d,0x0c,0x0b,0x0b,0x0a,0x0a,0x09,0x09,0x08,0x08,0x07,0x07,0x06,0x06,0x05,0x05,0x04,0x04,0x03,0x02,0x02,0x02,0x01,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x02,0x02,0x03,0x03,0x04,0x04,0x05,0x06,0x06,0x07,0x07,0x08,0x08,0x09,0x09,0x0a,0x0a,0x0b,0x0c,0x0c,0x0d,0x0d,0x0e,0x0f,0x10,0x10,0x11,0x11,0x12,0x12,0x12,0x13,0x13,0x14,0x14,0x15,0x15,0x16,0x16,0x16,0x17,0x17,0x17,0x17,0x18,0x18,0x18,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x18,0x18,0x18,0x17,0x17,0x17,0x17,0x16,0x16,0x16,0x15,0x15,0x14,0x14,0x13,0x13,0x12,0x12,0x12,0x11,0x11,0x10,0x10,0x0f,0x0e,0x0d,0x0d,0x0c,0x0c,0x0b,0x0a,0x0a,0x09,0x09,0x08,0x08,0x07,0x07,0x06,0x06,0x05,0x04,0x04,0x03,0x03,0x02,0x02,0x01,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x02,0x02,0x03,0x03,0x04,0x05,0x05,0x06,0x06,0x07,0x07,0x08,0x09,0x09,0x0a,0x0a,0x0b,0x0c,0x0c,0x0d,0x0d,0x0e,0x0f,0x10,0x10,0x11,0x11,0x12,0x12,0x13,0x13,0x14,0x14,0x15,0x15,0x16,0x16,0x17,0x17,0x17,0x18,0x18,0x19,0x19,0x19,0x19,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x19,0x19,0x19,0x19,0x18,0x18,0x17,0x17,0x17,0x16,0x16,0x15,0x15,0x14,0x14,0x13,0x13,0x12,0x12,0x11,0x11,0x10,0x10,0x0f,0x0e,0x0d,0x0d,0x0c,0x0c,0x0b,0x0a,0x0a,0x09,0x09,0x08,0x07,0x07,0x06,0x06,0x05,0x05,0x04,0x03,0x03,0x02,0x02,0x01,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x02,0x02,0x03,0x03,0x04,0x04,0x05,0x05,0x06,0x07,0x07,0x08,0x08,0x09,0x0a,0x0a,0x0b,0x0b,0x0c,0x0d,0x0d,0x0e,0x0f,0x10,0x10,0x11,0x11,0x12,0x13,0x13,0x14,0x14,0x15,0x15,0x16,0x16,0x17,0x17,0x18,0x18,0x18,0x19,0x19,0x1a,0x1a,0x1a,0x1a,0x1b,0x1b,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1b,0x1b,0x1a,0x1a,0x1a,0x1a,0x19,0x19,0x18,0x18,0x18,0x17,0x17,0x16,0x16,0x15,0x15,0x14,0x14,0x13,0x13,0x12,0x11,0x11,0x10,0x10,0x0f,0x0e,0x0d,0x0d,0x0c,0x0b,0x0b,0x0a,0x0a,0x09,0x08,0x08,0x07,0x07,0x06,0x05,0x05,0x04,0x04,0x03,0x03,0x02,0x02,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x02,0x02,0x03,0x03,0x04,0x05,0x05,0x06,0x06,0x07,0x08,0x08,0x09,0x09,0x0a,0x0b,0x0b,0x0c,0x0d,0x0d,0x0e,0x0f,0x10,0x10,0x11,0x11,0x12,0x13,0x13,0x14,0x14,0x15,0x16,0x16,0x17,0x17,0x18,0x18,0x19,0x19,0x1a,0x1a,0x1a,0x1b,0x1b,0x1c,0x1c,0x1c,0x1c,0x1d,0x1d,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1d,0x1d,0x1c,0x1c,0x1c,0x1c,0x1b,0x1b,0x1a,0x1a,0x1a,0x19,0x19,0x18,0x18,0x17,0x17,0x16,0x16,0x15,0x14,0x14,0x13,0x13,0x12,0x11,0x11,0x10,0x10,0x0f,0x0e,0x0d,0x0d,0x0c,0x0b,0x0b,0x0a,0x09,0x09,0x08,0x08,0x07,0x06,0x06,0x05,0x05,0x04,0x03,0x03,0x02,0x02,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x02,0x02,0x03,0x03,0x04,0x05,0x05,0x06,0x06,0x07,0x08,0x08,0x09,0x0a,0x0a,0x0b,0x0c,0x0c,0x0d,0x0e,0x0f,0x10,0x10,0x11,0x11,0x12,0x13,0x13,0x14,0x14,0x15,0x16,0x16,0x17,0x17,0x18,0x19,0x19,0x1a,0x1a,0x1b,0x1b,0x1b,0x1c,0x1c,0x1d,0x1d,0x1e,0x1e,0x1e,0x1e,0x1f,0x1f,0x1f,0x1f,0x1f,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x1f,0x1f,0x1f,0x1f,0x1f,0x1e,0x1e,0x1e,0x1e,0x1d,0x1d,0x1c,0x1c,0x1b,0x1b,0x1b,0x1a,0x1a,0x19,0x19,0x18,0x17,0x17,0x16,0x16,0x15,0x14,0x14,0x13,0x13,0x12,0x11,0x11,0x10,0x10,0x0f,0x0e,0x0d,0x0c,0x0c,0x0b,0x0a,0x0a,0x09,0x08,0x08,0x07,0x06,0x06,0x05,0x05,0x04,0x03,0x03,0x02,0x02,0x01,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x02,0x02,0x03,0x03,0x04,0x05,0x05,0x06,0x07,0x07,0x08,0x09,0x09,0x0a,0x0b,0x0b,0x0c,0x0d,0x0e,0x0e,0x0f,0x10,0x11,0x11,0x12,0x13,0x13,0x14,0x15,0x16,0x16,0x17,0x17,0x18,0x19,0x19,0x1a,0x1a,0x1b,0x1b,0x1c,0x1c,0x1d,0x1d,0x1e,0x1e,0x1e,0x1f,0x1f,0x1f,0x20,0x20,0x21,0x21,0x21,0x21,0x21,0x21,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x21,0x21,0x21,0x21,0x21,0x21,0x20,0x20,0x1f,0x1f,0x1f,0x1e,0x1e,0x1e,0x1d,0x1d,0x1c,0x1c,0x1b,0x1b,0x1a,0x1a,0x19,0x19,0x18,0x17,0x17,0x16,0x16,0x15,0x14,0x13,0x13,0x12,0x11,0x11,0x10,0x0f,0x0e,0x0e,0x0d,0x0c,0x0b,0x0b,0x0a,0x09,0x09,0x08,0x07,0x07,0x06,0x05,0x05,0x04,0x03,0x03,0x02,0x02,0x01,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x02,0x02,0x03,0x04,0x04,0x05,0x06,0x06,0x07,0x08,0x08,0x09,0x0a,0x0a,0x0b,0x0c,0x0c,0x0d,0x0e,0x0f,0x10,0x11,0x11,0x12,0x13,0x13,0x14,0x15,0x16,0x16,0x17,0x17,0x18,0x19,0x19,0x1a,0x1a,0x1b,0x1c,0x1c,0x1d,0x1d,0x1e,0x1e,0x1f,0x1f,0x20,0x20,0x21,0x21,0x21,0x22,0x22,0x22,0x23,0x23,0x23,0x23,0x23,0x23,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x23,0x23,0x23,0x23,0x23,0x23,0x22,0x22,0x22,0x21,0x21,0x21,0x20,0x20,0x1f,0x1f,0x1e,0x1e,0x1d,0x1d,0x1c,0x1c,0x1b,0x1a,0x1a,0x19,0x19,0x18,0x17,0x17,0x16,0x16,0x15,0x14,0x13,0x13,0x12,0x11,0x11,0x10,0x0f,0x0e,0x0d,0x0c,0x0c,0x0b,0x0a,0x0a,0x09,0x08,0x08,0x07,0x06,0x06,0x05,0x04,0x04,0x03,0x02,0x02,0x01,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x02,0x02,0x03,0x04,0x05,0x05,0x06,0x06,0x07,0x08,0x08,0x09,0x0a,0x0b,0x0b,0x0c,0x0d,0x0e,0x0f,0x0f,0x10,0x11,0x12,0x13,0x13,0x14,0x15,0x15,0x16,0x17,0x17,0x18,0x19,0x1a,0x1a,0x1b,0x1c,0x1c,0x1d,0x1d,0x1e,0x1e,0x1f,0x1f,0x20,0x20,0x21,0x21,0x22,0x22,0x23,0x23,0x23,0x24,0x24,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x26,0x26,0x26,0x26,0x26,0x26,0x26,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x24,0x24,0x23,0x23,0x23,0x22,0x22,0x21,0x21,0x20,0x20,0x1f,0x1f,0x1e,0x1e,0x1d,0x1d,0x1c,0x1c,0x1b,0x1a,0x1a,0x19,0x18,0x17,0x17,0x16,0x15,0x15,0x14,0x13,0x13,0x12,0x11,0x10,0x0f,0x0f,0x0e,0x0d,0x0c,0x0b,0x0b,0x0a,0x09,0x08,0x08,0x07,0x06,0x06,0x05,0x05,0x04,0x03,0x02,0x02,0x01,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x02,0x02,0x03,0x03,0x04,0x05,0x05,0x06,0x06,0x07,0x08,0x09,0x09,0x0a,0x0b,0x0c,0x0c,0x0d,0x0e,0x0f,0x10,0x11,0x11,0x12,0x13,0x14,0x14,0x15,0x16,0x17,0x17,0x18,0x19,0x1a,0x1a,0x1b,0x1c,0x1c,0x1d,0x1e,0x1e,0x1f,0x1f,0x20,0x21,0x21,0x22,0x22,0x23,0x23,0x24,0x24,0x25,0x25,0x25,0x26,0x26,0x27,0x27,0x27,0x27,0x27,0x27,0x27,0x27,0x28,0x28,0x28,0x28,0x28,0x27,0x27,0x27,0x27,0x27,0x27,0x27,0x27,0x26,0x26,0x25,0x25,0x25,0x24,0x24,0x23,0x23,0x22,0x22,0x21,0x21,0x20,0x1f,0x1f,0x1e,0x1e,0x1d,0x1c,0x1c,0x1b,0x1a,0x1a,0x19,0x18,0x17,0x17,0x16,0x15,0x14,0x14,0x13,0x12,0x11,0x11,0x10,0x0f,0x0e,0x0d,0x0c,0x0c,0x0b,0x0a,0x09,0x09,0x08,0x07,0x06,0x06,0x05,0x05,0x04,0x03,0x03,0x02,0x02,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x02,0x02,0x03,0x03,0x04,0x05,0x05,0x06,0x07,0x07,0x08,0x09,0x0a,0x0a,0x0b,0x0c,0x0d,0x0d,0x0e,0x0f,0x10,0x11,0x12,0x13,0x13,0x14,0x15,0x16,0x17,0x17,0x18,0x19,0x1a,0x1a,0x1b,0x1c,0x1c,0x1d,0x1e,0x1f,0x1f,0x20,0x21,0x21,0x22,0x22,0x23,0x23,0x24,0x25,0x25,0x25,0x26,0x26,0x27,0x27,0x27,0x28,0x28,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x2a,0x2a,0x2a,0x2a,0x2a,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x28,0x28,0x27,0x27,0x27,0x26,0x26,0x25,0x25,0x25,0x24,0x23,0x23,0x22,0x22,0x21,0x21,0x20,0x1f,0x1f,0x1e,0x1d,0x1c,0x1c,0x1b,0x1a,0x1a,0x19,0x18,0x17,0x17,0x16,0x15,0x14,0x13,0x13,0x12,0x11,0x10,0x0f,0x0e,0x0d,0x0d,0x0c,0x0b,0x0a,0x0a,0x09,0x08,0x07,0x07,0x06,0x05,0x05,0x04,0x03,0x03,0x02,0x02,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x02,0x02,0x03,0x03,0x04,0x05,0x05,0x06,0x07,0x07,0x08,0x09,0x0a,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,0x10,0x11,0x11,0x12,0x13,0x14,0x15,0x15,0x16,0x17,0x18,0x19,0x19,0x1a,0x1b,0x1c,0x1d,0x1d,0x1e,0x1f,0x1f,0x20,0x21,0x21,0x22,0x23,0x23,0x24,0x25,0x25,0x26,0x26,0x27,0x27,0x28,0x28,0x29,0x29,0x29,0x2a,0x2a,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2c,0x2c,0x2c,0x2c,0x2c,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2a,0x2a,0x29,0x29,0x29,0x28,0x28,0x27,0x27,0x26,0x26,0x25,0x25,0x24,0x23,0x23,0x22,0x21,0x21,0x20,0x1f,0x1f,0x1e,0x1d,0x1d,0x1c,0x1b,0x1a,0x19,0x19,0x18,0x17,0x16,0x15,0x15,0x14,0x13,0x12,0x11,0x11,0x10,0x0f,0x0e,0x0d,0x0c,0x0b,0x0a,0x0a,0x09,0x08,0x07,0x07,0x06,0x05,0x05,0x04,0x03,0x03,0x02,0x02,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x02,0x03,0x03,0x04,0x05,0x05,0x06,0x07,0x07,0x08,0x09,0x0a,0x0b,0x0b,0x0c,0x0d,0x0e,0x0f,0x10,0x11,0x12,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x18,0x19,0x1a,0x1b,0x1c,0x1d,0x1d,0x1e,0x1f,0x1f,0x20,0x21,0x22,0x23,0x23,0x24,0x25,0x25,0x26,0x27,0x27,0x28,0x28,0x29,0x29,0x2a,0x2a,0x2b,0x2b,0x2b,0x2c,0x2c,0x2d,0x2d,0x2d,0x2d,0x2d,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2d,0x2d,0x2d,0x2d,0x2d,0x2c,0x2c,0x2b,0x2b,0x2b,0x2a,0x2a,0x29,0x29,0x28,0x28,0x27,0x27,0x26,0x25,0x25,0x24,0x23,0x23,0x22,0x21,0x20,0x1f,0x1f,0x1e,0x1d,0x1d,0x1c,0x1b,0x1a,0x19,0x18,0x18,0x17,0x16,0x15,0x14,0x13,0x12,0x12,0x11,0x10,0x0f,0x0e,0x0d,0x0c,0x0b,0x0b,0x0a,0x09,0x08,0x07,0x07,0x06,0x05,0x05,0x04,0x03,0x03,0x02,0x01,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x02,0x03,0x03,0x04,0x05,0x05,0x06,0x07,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0c,0x0d,0x0e,0x0f,0x10,0x11,0x12,0x13,0x14,0x15,0x15,0x16,0x17,0x18,0x19,0x1a,0x1b,0x1b,0x1c,0x1d,0x1e,0x1f,0x20,0x20,0x21,0x22,0x23,0x23,0x24,0x25,0x26,0x27,0x27,0x28,0x29,0x29,0x2a,0x2a,0x2b,0x2b,0x2c,0x2c,0x2d,0x2d,0x2e,0x2e,0x2f,0x2f,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x31,0x31,0x31,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x2f,0x2f,0x2e,0x2e,0x2d,0x2d,0x2c,0x2c,0x2b,0x2b,0x2a,0x2a,0x29,0x29,0x28,0x27,0x27,0x26,0x25,0x24,0x23,0x23,0x22,0x21,0x20,0x20,0x1f,0x1e,0x1d,0x1c,0x1b,0x1b,0x1a,0x19,0x18,0x17,0x16,0x15,0x15,0x14,0x13,0x12,0x11,0x10,0x0f,0x0e,0x0d,0x0c,0x0c,0x0b,0x0a,0x09,0x08,0x07,0x07,0x06,0x05,0x05,0x04,0x03,0x03,0x02,0x01,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x02,0x02,0x03,0x04,0x05,0x05,0x06,0x07,0x08,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0d,0x0e,0x0f,0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x18,0x19,0x1a,0x1b,0x1c,0x1d,0x1e,0x1f,0x20,0x20,0x21,0x22,0x23,0x24,0x25,0x25,0x26,0x27,0x28,0x28,0x29,0x2a,0x2a,0x2b,0x2c,0x2c,0x2d,0x2d,0x2e,0x2f,0x2f,0x30,0x30,0x31,0x31,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x33,0x33,0x33,0x33,0x33,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x31,0x31,0x30,0x30,0x2f,0x2f,0x2e,0x2d,0x2d,0x2c,0x2c,0x2b,0x2a,0x2a,0x29,0x28,0x28,0x27,0x26,0x25,0x25,0x24,0x23,0x22,0x21,0x20,0x20,0x1f,0x1e,0x1d,0x1c,0x1b,0x1a,0x19,0x18,0x18,0x17,0x16,0x15,0x14,0x13,0x12,0x11,0x10,0x0f,0x0e,0x0d,0x0d,0x0c,0x0b,0x0a,0x09,0x08,0x08,0x07,0x06,0x05,0x05,0x04,0x03,0x02,0x02,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x02,0x02,0x03,0x04,0x05,0x05,0x06,0x07,0x08,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,0x10,0x11,0x12,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1a,0x1b,0x1c,0x1c,0x1d,0x1e,0x1f,0x20,0x21,0x22,0x23,0x24,0x25,0x25,0x26,0x27,0x28,0x29,0x29,0x2a,0x2b,0x2c,0x2c,0x2d,0x2e,0x2e,0x2f,0x30,0x31,0x31,0x32,0x32,0x32,0x33,0x33,0x34,0x34,0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x34,0x34,0x33,0x33,0x32,0x32,0x32,0x31,0x31,0x30,0x2f,0x2e,0x2e,0x2d,0x2c,0x2c,0x2b,0x2a,0x29,0x29,0x28,0x27,0x26,0x25,0x25,0x24,0x23,0x22,0x21,0x20,0x1f,0x1e,0x1d,0x1c,0x1c,0x1b,0x1a,0x19,0x18,0x17,0x16,0x15,0x14,0x13,0x12,0x12,0x11,0x10,0x0f,0x0e,0x0d,0x0c,0x0b,0x0a,0x09,0x08,0x08,0x07,0x06,0x05,0x05,0x04,0x03,0x02,0x02,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x02,0x02,0x03,0x04,0x05,0x05,0x06,0x07,0x08,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,0x10,0x11,0x12,0x13,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1a,0x1b,0x1c,0x1d,0x1e,0x1f,0x20,0x21,0x22,0x23,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2a,0x2b,0x2b,0x2c,0x2d,0x2e,0x2e,0x2f,0x30,0x31,0x32,0x32,0x33,0x33,0x34,0x34,0x35,0x35,0x35,0x36,0x36,0x37,0x37,0x37,0x37,0x37,0x37,0x37,0x37,0x37,0x37,0x37,0x37,0x37,0x37,0x37,0x36,0x36,0x35,0x35,0x35,0x34,0x34,0x33,0x33,0x32,0x32,0x31,0x30,0x2f,0x2e,0x2e,0x2d,0x2c,0x2b,0x2b,0x2a,0x29,0x28,0x27,0x26,0x25,0x24,0x23,0x23,0x22,0x21,0x20,0x1f,0x1e,0x1d,0x1c,0x1b,0x1a,0x19,0x18,0x17,0x16,0x15,0x14,0x13,0x13,0x12,0x11,0x10,0x0f,0x0e,0x0d,0x0c,0x0b,0x0a,0x09,0x08,0x08,0x07,0x06,0x05,0x05,0x04,0x03,0x02,0x02,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x02,0x02,0x03,0x04,0x04,0x05,0x06,0x07,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x18,0x19,0x1a,0x1b,0x1c,0x1d,0x1e,0x1f,0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2a,0x2b,0x2c,0x2d,0x2d,0x2e,0x2f,0x30,0x31,0x32,0x32,0x33,0x34,0x34,0x35,0x35,0x36,0x36,0x37,0x37,0x38,0x38,0x38,0x39,0x39,0x39,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x39,0x39,0x39,0x38,0x38,0x38,0x37,0x37,0x36,0x36,0x35,0x35,0x34,0x34,0x33,0x32,0x32,0x31,0x30,0x2f,0x2e,0x2d,0x2d,0x2c,0x2b,0x2a,0x29,0x28,0x27,0x26,0x25,0x24,0x23,0x22,0x21,0x20,0x1f,0x1e,0x1d,0x1c,0x1b,0x1a,0x19,0x18,0x18,0x17,0x16,0x15,0x14,0x13,0x12,0x11,0x10,0x0f,0x0e,0x0d,0x0c,0x0b,0x0a,0x09,0x08,0x07,0x07,0x06,0x05,0x04,0x04,0x03,0x02,0x02,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x02,0x02,0x03,0x04,0x04,0x05,0x06,0x07,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1a,0x1b,0x1c,0x1d,0x1e,0x1f,0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2a,0x2b,0x2c,0x2d,0x2e,0x2f,0x30,0x31,0x32,0x32,0x33,0x34,0x35,0x35,0x36,0x36,0x37,0x38,0x38,0x39,0x39,0x3a,0x3a,0x3a,0x3b,0x3b,0x3b,0x3c,0x3c,0x3c,0x3c,0x3c,0x3c,0x3c,0x3c,0x3c,0x3c,0x3c,0x3b,0x3b,0x3b,0x3a,0x3a,0x3a,0x39,0x39,0x38,0x38,0x37,0x36,0x36,0x35,0x35,0x34,0x33,0x32,0x32,0x31,0x30,0x2f,0x2e,0x2d,0x2c,0x2b,0x2a,0x29,0x28,0x27,0x26,0x25,0x24,0x23,0x22,0x21,0x20,0x1f,0x1e,0x1d,0x1c,0x1b,0x1a,0x19,0x18,0x17,0x16,0x15,0x14,0x13,0x12,0x11,0x10,0x0f,0x0e,0x0d,0x0c,0x0b,0x0a,0x09,0x08,0x07,0x07,0x06,0x05,0x04,0x04,0x03,0x02,0x02,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x02,0x03,0x03,0x04,0x05,0x06,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1a,0x1b,0x1c,0x1d,0x1e,0x1f,0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x29,0x29,0x2a,0x2c,0x2d,0x2e,0x2f,0x30,0x31,0x32,0x33,0x34,0x34,0x35,0x36,0x37,0x37,0x38,0x39,0x39,0x3a,0x3a,0x3b,0x3b,0x3c,0x3d,0x3d,0x3d,0x3e,0x3e,0x3e,0x3e,0x3e,0x3f,0x3f,0x3f,0x3f,0x3f,0x3e,0x3e,0x3e,0x3e,0x3e,0x3d,0x3d,0x3d,0x3c,0x3b,0x3b,0x3a,0x3a,0x39,0x39,0x38,0x37,0x37,0x36,0x35,0x34,0x34,0x33,0x32,0x31,0x30,0x2f,0x2e,0x2d,0x2c,0x2a,0x29,0x29,0x27,0x26,0x25,0x24,0x23,0x22,0x21,0x20,0x1f,0x1e,0x1d,0x1c,0x1b,0x1a,0x19,0x18,0x17,0x16,0x15,0x14,0x13,0x12,0x11,0x10,0x0f,0x0e,0x0d,0x0c,0x0b,0x0a,0x09,0x08,0x07,0x06,0x06,0x05,0x04,0x03,0x03,0x02,0x01,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x02,0x03,0x03,0x04,0x05,0x06,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1a,0x1b,0x1c,0x1d,0x1e,0x1f,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2a,0x2b,0x2c,0x2e,0x2f,0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x36,0x37,0x38,0x39,0x3a,0x3a,0x3b,0x3c,0x3c,0x3d,0x3d,0x3e,0x3e,0x3f,0x3f,0x40,0x40,0x40,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x40,0x40,0x40,0x3f,0x3f,0x3e,0x3e,0x3d,0x3d,0x3c,0x3c,0x3b,0x3a,0x3a,0x39,0x38,0x37,0x36,0x36,0x35,0x34,0x33,0x32,0x31,0x30,0x2f,0x2e,0x2c,0x2b,0x2a,0x29,0x28,0x27,0x26,0x25,0x24,0x23,0x22,0x21,0x1f,0x1e,0x1d,0x1c,0x1b,0x1a,0x19,0x18,0x17,0x16,0x15,0x14,0x13,0x12,0x11,0x10,0x0f,0x0e,0x0d,0x0c,0x0b,0x0a,0x09,0x08,0x07,0x06,0x06,0x05,0x04,0x03,0x03,0x02,0x01,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x02,0x02,0x03,0x04,0x05,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0b,0x0d,0x0e,0x0f,0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1a,0x1b,0x1c,0x1e,0x1f,0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x28,0x29,0x2a,0x2b,0x2c,0x2d,0x2e,0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x38,0x39,0x3a,0x3b,0x3c,0x3d,0x3d,0x3e,0x3f,0x3f,0x40,0x40,0x41,0x41,0x42,0x42,0x43,0x43,0x43,0x43,0x43,0x44,0x44,0x44,0x44,0x44,0x43,0x43,0x43,0x43,0x43,0x42,0x42,0x41,0x41,0x40,0x40,0x3f,0x3f,0x3e,0x3d,0x3d,0x3c,0x3b,0x3a,0x39,0x38,0x38,0x37,0x36,0x35,0x34,0x33,0x32,0x31,0x30,0x2e,0x2d,0x2c,0x2b,0x2a,0x29,0x28,0x26,0x25,0x24,0x23,0x22,0x21,0x20,0x1f,0x1e,0x1c,0x1b,0x1a,0x19,0x18,0x17,0x16,0x15,0x14,0x13,0x12,0x11,0x10,0x0f,0x0e,0x0d,0x0b,0x0b,0x0a,0x09,0x08,0x07,0x06,0x05,0x05,0x04,0x03,0x02,0x02,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x02,0x02,0x03,0x04,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0a,0x0b,0x0c,0x0d,0x0f,0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1a,0x1c,0x1d,0x1e,0x1f,0x20,0x21,0x22,0x24,0x25,0x26,0x27,0x28,0x29,0x2a,0x2c,0x2d,0x2e,0x2f,0x30,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3a,0x3b,0x3c,0x3d,0x3e,0x3e,0x3f,0x40,0x40,0x41,0x42,0x42,0x43,0x43,0x44,0x44,0x45,0x45,0x45,0x46,0x46,0x46,0x46,0x46,0x46,0x46,0x46,0x46,0x46,0x46,0x45,0x45,0x45,0x44,0x44,0x43,0x43,0x42,0x42,0x41,0x40,0x40,0x3f,0x3e,0x3e,0x3d,0x3c,0x3b,0x3a,0x39,0x38,0x37,0x36,0x35,0x34,0x33,0x32,0x30,0x2f,0x2e,0x2d,0x2c,0x2a,0x29,0x28,0x27,0x26,0x25,0x24,0x22,0x21,0x20,0x1f,0x1e,0x1d,0x1c,0x1a,0x19,0x18,0x17,0x16,0x15,0x14,0x13,0x12,0x11,0x10,0x0f,0x0d,0x0c,0x0b,0x0a,0x0a,0x09,0x08,0x07,0x06,0x05,0x04,0x04,0x03,0x02,0x02,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x02,0x03,0x03,0x04,0x05,0x06,0x07,0x08,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1a,0x1c,0x1d,0x1e,0x1f,0x20,0x21,0x23,0x24,0x25,0x26,0x27,0x29,0x2a,0x2b,0x2c,0x2e,0x2f,0x30,0x31,0x32,0x34,0x35,0x36,0x37,0x38,0x39,0x3a,0x3b,0x3c,0x3d,0x3e,0x3f,0x40,0x41,0x41,0x42,0x43,0x44,0x44,0x45,0x45,0x46,0x46,0x47,0x47,0x48,0x48,0x48,0x48,0x49,0x49,0x49,0x49,0x49,0x49,0x49,0x48,0x48,0x48,0x48,0x47,0x47,0x46,0x46,0x45,0x45,0x44,0x44,0x43,0x42,0x41,0x41,0x40,0x3f,0x3e,0x3d,0x3c,0x3b,0x3a,0x39,0x38,0x37,0x36,0x35,0x34,0x32,0x31,0x30,0x2f,0x2e,0x2c,0x2b,0x2a,0x29,0x27,0x26,0x25,0x24,0x23,0x21,0x20,0x1f,0x1e,0x1d,0x1c,0x1a,0x19,0x18,0x17,0x16,0x15,0x14,0x13,0x12,0x11,0x10,0x0e,0x0d,0x0c,0x0b,0x0a,0x09,0x08,0x08,0x07,0x06,0x05,0x04,0x03,0x03,0x02,0x01,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x02,0x03,0x03,0x04,0x05,0x06,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1a,0x1c,0x1d,0x1e,0x1f,0x20,0x21,0x23,0x24,0x25,0x27,0x28,0x29,0x2a,0x2b,0x2d,0x2e,0x2f,0x31,0x32,0x33,0x34,0x36,0x37,0x38,0x39,0x3a,0x3b,0x3c,0x3d,0x3e,0x3f,0x40,0x41,0x42,0x43,0x44,0x45,0x45,0x46,0x47,0x47,0x48,0x49,0x49,0x4a,0x4a,0x4a,0x4a,0x4b,0x4b,0x4b,0x4b,0x4c,0x4c,0x4c,0x4b,0x4b,0x4b,0x4b,0x4a,0x4a,0x4a,0x4a,0x49,0x49,0x48,0x47,0x47,0x46,0x45,0x45,0x44,0x43,0x42,0x41,0x40,0x3f,0x3e,0x3d,0x3c,0x3b,0x3a,0x39,0x38,0x37,0x36,0x34,0x33,0x32,0x31,0x2f,0x2e,0x2d,0x2b,0x2a,0x29,0x28,0x27,0x25,0x24,0x23,0x21,0x20,0x1f,0x1e,0x1d,0x1c,0x1a,0x19,0x18,0x17,0x16,0x15,0x14,0x13,0x12,0x11,0x0f,0x0e,0x0d,0x0c,0x0b,0x0a,0x09,0x08,0x07,0x06,0x06,0x05,0x04,0x03,0x03,0x02,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x02,0x02,0x03,0x04,0x05,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,0x10,0x11,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1a,0x1c,0x1d,0x1e,0x1f,0x21,0x22,0x23,0x24,0x26,0x27,0x28,0x29,0x2b,0x2c,0x2d,0x2f,0x30,0x31,0x33,0x34,0x35,0x36,0x38,0x39,0x3a,0x3b,0x3c,0x3d,0x3e,0x40,0x41,0x41,0x42,0x43,0x44,0x45,0x46,0x47,0x48,0x49,0x49,0x4a,0x4a,0x4b,0x4c,0x4c,0x4d,0x4d,0x4d,0x4e,0x4e,0x4e,0x4e,0x4e,0x4e,0x4e,0x4e,0x4e,0x4e,0x4e,0x4d,0x4d,0x4d,0x4c,0x4c,0x4b,0x4a,0x4a,0x49,0x49,0x48,0x47,0x46,0x45,0x44,0x43,0x42,0x41,0x41,0x40,0x3e,0x3d,0x3c,0x3b,0x3a,0x39,0x38,0x36,0x35,0x34,0x33,0x31,0x30,0x2f,0x2d,0x2c,0x2b,0x29,0x28,0x27,0x26,0x24,0x23,0x22,0x21,0x1f,0x1e,0x1d,0x1c,0x1a,0x19,0x18,0x17,0x16,0x15,0x14,0x13,0x11,0x10,0x0f,0x0e,0x0d,0x0c,0x0b,0x0a,0x09,0x08,0x07,0x06,0x05,0x05,0x04,0x03,0x02,0x02,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x02,0x03,0x04,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,0x10,0x11,0x12,0x14,0x15,0x16,0x17,0x18,0x19,0x1a,0x1c,0x1d,0x1e,0x1f,0x21,0x22,0x23,0x24,0x26,0x27,0x28,0x2a,0x2b,0x2c,0x2e,0x2f,0x31,0x32,0x33,0x34,0x36,0x37,0x38,0x3a,0x3b,0x3c,0x3d,0x3e,0x40,0x41,0x42,0x43,0x44,0x45,0x46,0x47,0x48,0x49,0x4a,0x4a,0x4b,0x4c,0x4d,0x4d,0x4e,0x4e,0x4f,0x4f,0x50,0x50,0x50,0x51,0x51,0x51,0x51,0x51,0x51,0x51,0x51,0x51,0x50,0x50,0x50,0x4f,0x4f,0x4e,0x4e,0x4d,0x4d,0x4c,0x4b,0x4a,0x4a,0x49,0x48,0x47,0x46,0x45,0x44,0x43,0x42,0x41,0x40,0x3e,0x3d,0x3c,0x3b,0x3a,0x38,0x37,0x36,0x34,0x33,0x32,0x31,0x2f,0x2e,0x2c,0x2b,0x2a,0x28,0x27,0x26,0x24,0x23,0x22,0x21,0x1f,0x1e,0x1d,0x1c,0x1a,0x19,0x18,0x17,0x16,0x15,0x14,0x12,0x11,0x10,0x0f,0x0e,0x0d,0x0c,0x0b,0x0a,0x09,0x08,0x07,0x06,0x05,0x04,0x04,0x03,0x02,0x01,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x02,0x03,0x03,0x04,0x05,0x06,0x07,0x08,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0f,0x10,0x11,0x12,0x13,0x14,0x16,0x17,0x18,0x19,0x1a,0x1c,0x1d,0x1e,0x1f,0x21,0x22,0x23,0x25,0x26,0x27,0x28,0x2a,0x2b,0x2c,0x2e,0x2f,0x31,0x32,0x34,0x35,0x36,0x38,0x39,0x3a,0x3c,0x3d,0x3e,0x3f,0x40,0x42,0x43,0x44,0x45,0x46,0x47,0x48,0x49,0x4a,0x4b,0x4c,0x4d,0x4e,0x4f,0x4f,0x50,0x51,0x51,0x52,0x52,0x52,0x53,0x53,0x53,0x54,0x54,0x54,0x54,0x54,0x54,0x54,0x53,0x53,0x53,0x52,0x52,0x52,0x51,0x51,0x50,0x4f,0x4f,0x4e,0x4d,0x4c,0x4b,0x4a,0x49,0x48,0x47,0x46,0x45,0x44,0x43,0x42,0x40,0x3f,0x3e,0x3d,0x3c,0x3a,0x39,0x38,0x36,0x35,0x34,0x32,0x31,0x2f,0x2e,0x2c,0x2b,0x2a,0x28,0x27,0x26,0x25,0x23,0x22,0x21,0x1f,0x1e,0x1d,0x1c,0x1a,0x19,0x18,0x17,0x16,0x14,0x13,0x12,0x11,0x10,0x0f,0x0d,0x0c,0x0b,0x0a,0x09,0x08,0x08,0x07,0x06,0x05,0x04,0x03,0x03,0x02,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x02,0x02,0x03,0x04,0x05,0x06,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x10,0x11,0x12,0x13,0x14,0x15,0x17,0x18,0x19,0x1a,0x1b,0x1d,0x1e,0x1f,0x21,0x22,0x23,0x25,0x26,0x27,0x29,0x2a,0x2b,0x2d,0x2e,0x30,0x31,0x33,0x34,0x35,0x37,0x38,0x3a,0x3b,0x3c,0x3e,0x3f,0x40,0x41,0x43,0x44,0x45,0x46,0x48,0x49,0x4a,0x4b,0x4c,0x4d,0x4e,0x4f,0x4f,0x51,0x51,0x52,0x53,0x53,0x54,0x54,0x55,0x55,0x56,0x56,0x56,0x57,0x57,0x57,0x57,0x57,0x57,0x57,0x56,0x56,0x56,0x55,0x55,0x54,0x54,0x53,0x53,0x52,0x51,0x51,0x4f,0x4f,0x4e,0x4d,0x4c,0x4b,0x4a,0x49,0x48,0x46,0x45,0x44,0x43,0x41,0x40,0x3f,0x3e,0x3c,0x3b,0x3a,0x38,0x37,0x35,0x34,0x33,0x31,0x30,0x2e,0x2d,0x2b,0x2a,0x29,0x27,0x26,0x25,0x23,0x22,0x21,0x1f,0x1e,0x1d,0x1b,0x1a,0x19,0x18,0x17,0x15,0x14,0x13,0x12,0x11,0x10,0x0e,0x0d,0x0c,0x0b,0x0a,0x09,0x08,0x07,0x06,0x06,0x05,0x04,0x03,0x02,0x02,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x02,0x03,0x04,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,0x11,0x12,0x13,0x14,0x15,0x16,0x18,0x19,0x1a,0x1b,0x1c,0x1e,0x1f,0x20,0x22,0x23,0x25,0x26,0x27,0x29,0x2a,0x2b,0x2d,0x2e,0x30,0x32,0x33,0x35,0x36,0x37,0x39,0x3a,0x3c,0x3d,0x3e,0x40,0x41,0x42,0x44,0x45,0x46,0x48,0x49,0x4a,0x4b,0x4c,0x4d,0x4e,0x4f,0x50,0x51,0x52,0x53,0x54,0x55,0x56,0x56,0x57,0x57,0x58,0x59,0x59,0x59,0x5a,0x5a,0x5a,0x5a,0x5a,0x5a,0x5a,0x5a,0x5a,0x59,0x59,0x59,0x58,0x57,0x57,0x56,0x56,0x55,0x54,0x53,0x52,0x51,0x50,0x4f,0x4e,0x4d,0x4c,0x4b,0x4a,0x49,0x48,0x46,0x45,0x44,0x42,0x41,0x40,0x3e,0x3d,0x3c,0x3a,0x39,0x37,0x36,0x35,0x33,0x32,0x30,0x2e,0x2d,0x2b,0x2a,0x29,0x27,0x26,0x25,0x23,0x22,0x20,0x1f,0x1e,0x1c,0x1b,0x1a,0x19,0x18,0x16,0x15,0x14,0x13,0x12,0x11,0x0f,0x0e,0x0d,0x0c,0x0b,0x0a,0x09,0x08,0x07,0x06,0x05,0x04,0x04,0x03,0x02,0x01,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x02,0x02,0x03,0x04,0x05,0x06,0x07,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0e,0x0f,0x10,0x11,0x13,0x14,0x15,0x16,0x17,0x19,0x1a,0x1b,0x1c,0x1e,0x1f,0x20,0x22,0x23,0x24,0x26,0x27,0x29,0x2a,0x2b,0x2d,0x2e,0x30,0x32,0x33,0x35,0x36,0x38,0x39,0x3b,0x3c,0x3e,0x3f,0x40,0x42,0x43,0x45,0x46,0x47,0x49,0x4a,0x4b,0x4c,0x4e,0x4f,0x50,0x51,0x52,0x53,0x54,0x55,0x56,0x57,0x58,0x59,0x59,0x5a,0x5b,0x5b,0x5c,0x5c,0x5c,0x5d,0x5d,0x5d,0x5d,0x5d,0x5d,0x5d,0x5d,0x5d,0x5c,0x5c,0x5c,0x5b,0x5b,0x5a,0x59,0x59,0x58,0x57,0x56,0x55,0x54,0x53,0x52,0x51,0x50,0x4f,0x4e,0x4c,0x4b,0x4a,0x49,0x47,0x46,0x45,0x43,0x42,0x40,0x3f,0x3e,0x3c,0x3b,0x39,0x38,0x36,0x35,0x33,0x32,0x30,0x2e,0x2d,0x2b,0x2a,0x29,0x27,0x26,0x24,0x23,0x22,0x20,0x1f,0x1e,0x1c,0x1b,0x1a,0x19,0x17,0x16,0x15,0x14,0x13,0x11,0x10,0x0f,0x0e,0x0c,0x0b,0x0a,0x09,0x08,0x07,0x07,0x06,0x05,0x04,0x03,0x02,0x02,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x02,0x03,0x04,0x05,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0f,0x10,0x11,0x12,0x13,0x15,0x16,0x17,0x18,0x19,0x1b,0x1c,0x1d,0x1f,0x20,0x21,0x23,0x24,0x26,0x27,0x28,0x2a,0x2b,0x2d,0x2e,0x30,0x32,0x34,0x35,0x37,0x38,0x39,0x3b,0x3d,0x3e,0x40,0x41,0x42,0x44,0x45,0x47,0x48,0x4a,0x4b,0x4c,0x4e,0x4f,0x50,0x51,0x52,0x53,0x55,0x56,0x57,0x58,0x59,0x5a,0x5b,0x5c,0x5c,0x5d,0x5e,0x5e,0x5f,0x5f,0x5f,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x5f,0x5f,0x5f,0x5e,0x5e,0x5d,0x5c,0x5c,0x5b,0x5a,0x59,0x58,0x57,0x56,0x55,0x53,0x52,0x51,0x50,0x4f,0x4e,0x4c,0x4b,0x4a,0x48,0x47,0x45,0x44,0x42,0x41,0x40,0x3e,0x3d,0x3b,0x39,0x38,0x37,0x35,0x34,0x32,0x30,0x2e,0x2d,0x2b,0x2a,0x28,0x27,0x26,0x24,0x23,0x21,0x20,0x1f,0x1d,0x1c,0x1b,0x19,0x18,0x17,0x16,0x15,0x13,0x12,0x11,0x10,0x0f,0x0d,0x0c,0x0b,0x0a,0x09,0x08,0x07,0x06,0x05,0x05,0x04,0x03,0x02,0x01,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x02,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x10,0x11,0x12,0x13,0x14,0x15,0x17,0x18,0x19,0x1a,0x1c,0x1d,0x1e,0x20,0x21,0x23,0x24,0x26,0x27,0x28,0x2a,0x2b,0x2d,0x2e,0x30,0x32,0x34,0x35,0x37,0x38,0x3a,0x3b,0x3d,0x3e,0x40,0x42,0x43,0x45,0x46,0x48,0x49,0x4a,0x4c,0x4d,0x4f,0x50,0x51,0x53,0x54,0x55,0x56,0x58,0x59,0x5a,0x5b,0x5c,0x5d,0x5e,0x5f,0x5f,0x60,0x61,0x61,0x62,0x62,0x63,0x63,0x63,0x63,0x63,0x63,0x63,0x63,0x63,0x63,0x63,0x62,0x62,0x61,0x61,0x60,0x5f,0x5f,0x5e,0x5d,0x5c,0x5b,0x5a,0x59,0x58,0x56,0x55,0x54,0x53,0x51,0x50,0x4f,0x4d,0x4c,0x4a,0x49,0x48,0x46,0x45,0x43,0x42,0x40,0x3e,0x3d,0x3b,0x3a,0x38,0x37,0x35,0x34,0x32,0x30,0x2e,0x2d,0x2b,0x2a,0x28,0x27,0x26,0x24,0x23,0x21,0x20,0x1e,0x1d,0x1c,0x1a,0x19,0x18,0x17,0x15,0x14,0x13,0x12,0x11,0x10,0x0e,0x0d,0x0c,0x0b,0x0a,0x09,0x08,0x07,0x06,0x05,0x04,0x03,0x02,0x02,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x02,0x02,0x03,0x04,0x05,0x06,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0e,0x0f,0x10,0x11,0x13,0x14,0x15,0x16,0x18,0x19,0x1a,0x1b,0x1d,0x1e,0x1f,0x21,0x22,0x24,0x25,0x27,0x28,0x2a,0x2b,0x2d,0x2e,0x30,0x32,0x34,0x35,0x37,0x38,0x3a,0x3c,0x3d,0x3f,0x40,0x42,0x44,0x45,0x47,0x48,0x4a,0x4b,0x4d,0x4e,0x50,0x51,0x53,0x54,0x55,0x57,0x58,0x59,0x5b,0x5c,0x5d,0x5e,0x5f,0x60,0x61,0x62,0x62,0x63,0x64,0x64,0x65,0x65,0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x65,0x65,0x64,0x64,0x63,0x62,0x62,0x61,0x60,0x5f,0x5e,0x5d,0x5c,0x5b,0x59,0x58,0x57,0x55,0x54,0x53,0x51,0x50,0x4e,0x4d,0x4b,0x4a,0x48,0x47,0x45,0x44,0x42,0x40,0x3f,0x3d,0x3c,0x3a,0x38,0x37,0x35,0x34,0x32,0x30,0x2e,0x2d,0x2b,0x2a,0x28,0x27,0x25,0x24,0x22,0x21,0x1f,0x1e,0x1d,0x1b,0x1a,0x19,0x18,0x16,0x15,0x14,0x13,0x11,0x10,0x0f,0x0e,0x0c,0x0b,0x0a,0x09,0x08,0x07,0x06,0x06,0x05,0x04,0x03,0x02,0x02,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x02,0x03,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x10,0x11,0x12,0x13,0x15,0x16,0x17,0x18,0x1a,0x1b,0x1c,0x1e,0x1f,0x21,0x22,0x24,0x25,0x27,0x28,0x2a,0x2b,0x2d,0x2e,0x30,0x32,0x34,0x35,0x37,0x38,0x3a,0x3c,0x3e,0x3f,0x41,0x42,0x44,0x46,0x47,0x49,0x4a,0x4c,0x4d,0x4f,0x51,0x52,0x54,0x55,0x57,0x58,0x59,0x5b,0x5c,0x5e,0x5f,0x60,0x61,0x62,0x63,0x64,0x65,0x65,0x66,0x67,0x67,0x68,0x68,0x69,0x69,0x69,0x6a,0x6a,0x6a,0x6a,0x6a,0x69,0x69,0x69,0x68,0x68,0x67,0x67,0x66,0x65,0x65,0x64,0x63,0x62,0x61,0x60,0x5f,0x5e,0x5c,0x5b,0x59,0x58,0x57,0x55,0x54,0x52,0x51,0x4f,0x4d,0x4c,0x4a,0x49,0x47,0x46,0x44,0x42,0x41,0x3f,0x3e,0x3c,0x3a,0x38,0x37,0x35,0x34,0x32,0x30,0x2e,0x2d,0x2b,0x2a,0x28,0x27,0x25,0x24,0x22,0x21,0x1f,0x1e,0x1c,0x1b,0x1a,0x18,0x17,0x16,0x15,0x13,0x12,0x11,0x10,0x0e,0x0d,0x0c,0x0b,0x0a,0x09,0x08,0x07,0x06,0x05,0x04,0x03,0x03,0x02,0x01,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x02,0x02,0x03,0x04,0x05,0x06,0x07,0x07,0x08,0x09,0x0a,0x0c,0x0d,0x0e,0x0f,0x11,0x12,0x13,0x14,0x15,0x17,0x18,0x19,0x1b,0x1c,0x1d,0x1f,0x20,0x22,0x23,0x25,0x26,0x28,0x29,0x2b,0x2d,0x2e,0x30,0x32,0x34,0x35,0x37,0x38,0x3a,0x3c,0x3e,0x3f,0x41,0x43,0x44,0x46,0x48,0x49,0x4b,0x4d,0x4e,0x50,0x51,0x53,0x55,0x56,0x58,0x59,0x5b,0x5c,0x5e,0x5f,0x60,0x61,0x63,0x64,0x65,0x66,0x67,0x68,0x68,0x69,0x6a,0x6b,0x6b,0x6c,0x6c,0x6c,0x6d,0x6d,0x6d,0x6d,0x6d,0x6d,0x6d,0x6c,0x6c,0x6c,0x6b,0x6b,0x6a,0x69,0x68,0x68,0x67,0x66,0x65,0x64,0x63,0x61,0x60,0x5f,0x5e,0x5c,0x5b,0x59,0x58,0x56,0x55,0x53,0x51,0x50,0x4e,0x4d,0x4b,0x49,0x48,0x46,0x44,0x43,0x41,0x3f,0x3e,0x3c,0x3a,0x38,0x37,0x35,0x34,0x32,0x30,0x2e,0x2d,0x2b,0x29,0x28,0x26,0x25,0x23,0x22,0x20,0x1f,0x1d,0x1c,0x1b,0x19,0x18,0x17,0x15,0x14,0x13,0x12,0x11,0x0f,0x0e,0x0d,0x0c,0x0a,0x09,0x08,0x07,0x07,0x06,0x05,0x04,0x03,0x02,0x02,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x02,0x03,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0f,0x10,0x11,0x13,0x14,0x15,0x16,0x18,0x19,0x1a,0x1c,0x1d,0x1e,0x20,0x21,0x23,0x24,0x26,0x27,0x29,0x2b,0x2c,0x2e,0x30,0x31,0x33,0x35,0x37,0x38,0x3a,0x3c,0x3e,0x3f,0x41,0x43,0x45,0x46,0x48,0x4a,0x4b,0x4d,0x4f,0x50,0x52,0x54,0x56,0x57,0x59,0x5b,0x5c,0x5e,0x5f,0x60,0x62,0x63,0x64,0x66,0x67,0x68,0x69,0x6a,0x6b,0x6c,0x6c,0x6d,0x6e,0x6e,0x6f,0x6f,0x70,0x70,0x70,0x70,0x70,0x70,0x70,0x70,0x70,0x6f,0x6f,0x6e,0x6e,0x6d,0x6c,0x6c,0x6b,0x6a,0x69,0x68,0x67,0x66,0x64,0x63,0x62,0x60,0x5f,0x5e,0x5c,0x5b,0x59,0x57,0x56,0x54,0x52,0x50,0x4f,0x4d,0x4b,0x4a,0x48,0x46,0x45,0x43,0x41,0x3f,0x3e,0x3c,0x3a,0x38,0x37,0x35,0x33,0x31,0x30,0x2e,0x2c,0x2b,0x29,0x27,0x26,0x24,0x23,0x21,0x20,0x1e,0x1d,0x1c,0x1a,0x19,0x18,0x16,0x15,0x14,0x13,0x11,0x10,0x0f,0x0d,0x0c,0x0b,0x0a,0x09,0x08,0x07,0x06,0x05,0x04,0x03,0x03,0x02,0x01,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x02,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x08,0x09,0x0a,0x0c,0x0d,0x0e,0x10,0x11,0x12,0x13,0x14,0x16,0x17,0x18,0x1a,0x1b,0x1d,0x1e,0x1f,0x21,0x22,0x24,0x25,0x27,0x29,0x2a,0x2c,0x2e,0x2f,0x31,0x33,0x35,0x37,0x38,0x3a,0x3c,0x3e,0x3f,0x41,0x43,0x45,0x46,0x48,0x4a,0x4c,0x4e,0x4f,0x51,0x53,0x55,0x56,0x58,0x5a,0x5c,0x5d,0x5f,0x60,0x62,0x63,0x65,0x66,0x67,0x69,0x6a,0x6b,0x6c,0x6d,0x6e,0x6f,0x70,0x70,0x71,0x71,0x72,0x72,0x73,0x73,0x73,0x73,0x73,0x73,0x73,0x73,0x73,0x72,0x72,0x71,0x71,0x70,0x70,0x6f,0x6e,0x6d,0x6c,0x6b,0x6a,0x69,0x67,0x66,0x65,0x63,0x62,0x60,0x5f,0x5d,0x5c,0x5a,0x58,0x56,0x55,0x53,0x51,0x4f,0x4e,0x4c,0x4a,0x48,0x46,0x45,0x43,0x41,0x3f,0x3e,0x3c,0x3a,0x38,0x37,0x35,0x33,0x31,0x2f,0x2e,0x2c,0x2a,0x29,0x27,0x25,0x24,0x22,0x21,0x1f,0x1e,0x1d,0x1b,0x1a,0x18,0x17,0x16,0x14,0x13,0x12,0x11,0x10,0x0e,0x0d,0x0c,0x0a,0x09,0x08,0x08,0x07,0x06,0x05,0x04,0x03,0x02,0x02,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x02,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0f,0x10,0x11,0x13,0x14,0x15,0x17,0x18,0x19,0x1b,0x1c,0x1d,0x1f,0x20,0x22,0x23,0x25,0x27,0x28,0x2a,0x2c,0x2d,0x2f,0x31,0x33,0x34,0x36,0x38,0x3a,0x3c,0x3d,0x3f,0x41,0x43,0x45,0x47,0x48,0x4a,0x4c,0x4e,0x50,0x51,0x53,0x55,0x57,0x59,0x5b,0x5c,0x5e,0x60,0x61,0x63,0x64,0x66,0x67,0x69,0x6a,0x6b,0x6d,0x6e,0x6f,0x70,0x71,0x72,0x73,0x73,0x74,0x75,0x75,0x76,0x76,0x76,0x77,0x77,0x77,0x77,0x77,0x76,0x76,0x76,0x75,0x75,0x74,0x73,0x73,0x72,0x71,0x70,0x6f,0x6e,0x6d,0x6b,0x6a,0x69,0x67,0x66,0x64,0x63,0x61,0x60,0x5e,0x5c,0x5b,0x59,0x57,0x55,0x53,0x51,0x50,0x4e,0x4c,0x4a,0x48,0x47,0x45,0x43,0x41,0x3f,0x3d,0x3c,0x3a,0x38,0x36,0x34,0x33,0x31,0x2f,0x2d,0x2c,0x2a,0x28,0x27,0x25,0x23,0x22,0x20,0x1f,0x1d,0x1c,0x1b,0x19,0x18,0x17,0x15,0x14,0x13,0x11,0x10,0x0f,0x0d,0x0c,0x0b,0x0a,0x09,0x08,0x07,0x06,0x05,0x04,0x03,0x02,0x02,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x02,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x08,0x09,0x0b,0x0c,0x0d,0x0e,0x10,0x11,0x12,0x13,0x15,0x16,0x17,0x19,0x1a,0x1c,0x1d,0x1e,0x20,0x21,0x23,0x24,0x26,0x28,0x29,0x2b,0x2d,0x2f,0x30,0x32,0x34,0x36,0x38,0x3a,0x3b,0x3d,0x3f,0x41,0x43,0x45,0x47,0x48,0x4a,0x4c,0x4e,0x50,0x52,0x54,0x56,0x58,0x5a,0x5b,0x5d,0x5f,0x61,0x62,0x64,0x66,0x67,0x69,0x6a,0x6c,0x6d,0x6e,0x70,0x71,0x72,0x73,0x74,0x75,0x76,0x77,0x77,0x78,0x78,0x79,0x79,0x7a,0x7a,0x7a,0x7a,0x7a,0x7a,0x7a,0x79,0x79,0x78,0x78,0x77,0x77,0x76,0x75,0x74,0x73,0x72,0x71,0x70,0x6e,0x6d,0x6c,0x6a,0x69,0x67,0x66,0x64,0x62,0x61,0x5f,0x5d,0x5b,0x5a,0x58,0x56,0x54,0x52,0x50,0x4e,0x4c,0x4a,0x48,0x47,0x45,0x43,0x41,0x3f,0x3d,0x3b,0x3a,0x38,0x36,0x34,0x32,0x30,0x2f,0x2d,0x2b,0x29,0x28,0x26,0x24,0x23,0x21,0x20,0x1e,0x1d,0x1c,0x1a,0x19,0x17,0x16,0x15,0x13,0x12,0x11,0x10,0x0e,0x0d,0x0c,0x0b,0x09,0x08,0x08,0x07,0x06,0x05,0x04,0x03,0x02,0x02,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x02,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0f,0x10,0x11,0x13,0x14,0x15,0x17,0x18,0x19,0x1b,0x1c,0x1e,0x1f,0x21,0x22,0x24,0x25,0x27,0x29,0x2b,0x2c,0x2e,0x30,0x32,0x34,0x35,0x37,0x39,0x3b,0x3d,0x3f,0x41,0x43,0x45,0x46,0x48,0x4a,0x4c,0x4e,0x50,0x52,0x54,0x56,0x58,0x5a,0x5c,0x5e,0x60,0x61,0x63,0x65,0x67,0x68,0x6a,0x6c,0x6d,0x6f,0x70,0x71,0x73,0x74,0x75,0x76,0x77,0x78,0x79,0x7a,0x7b,0x7b,0x7c,0x7d,0x7d,0x7d,0x7e,0x7e,0x7e,0x7e,0x7e,0x7d,0x7d,0x7d,0x7c,0x7b,0x7b,0x7a,0x79,0x78,0x77,0x76,0x75,0x74,0x73,0x71,0x70,0x6f,0x6d,0x6c,0x6a,0x68,0x67,0x65,0x63,0x61,0x60,0x5e,0x5c,0x5a,0x58,0x56,0x54,0x52,0x50,0x4e,0x4c,0x4a,0x48,0x46,0x45,0x43,0x41,0x3f,0x3d,0x3b,0x39,0x37,0x35,0x34,0x32,0x30,0x2e,0x2c,0x2b,0x29,0x27,0x25,0x24,0x22,0x21,0x1f,0x1e,0x1c,0x1b,0x19,0x18,0x17,0x15,0x14,0x13,0x11,0x10,0x0f,0x0d,0x0c,0x0b,0x0a,0x09,0x08,0x07,0x06,0x05,0x04,0x03,0x02,0x02,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x02,0x03,0x04,0x05,0x06,0x06,0x07,0x08,0x09,0x0a,0x0c,0x0d,0x0e,0x10,0x11,0x12,0x13,0x15,0x16,0x17,0x19,0x1a,0x1c,0x1d,0x1f,0x20,0x22,0x23,0x25,0x27,0x28,0x2a,0x2c,0x2e,0x30,0x31,0x33,0x35,0x37,0x39,0x3b,0x3d,0x3f,0x40,0x42,0x44,0x46,0x48,0x4a,0x4c,0x4e,0x50,0x52,0x54,0x56,0x58,0x5b,0x5d,0x5f,0x60,0x62,0x64,0x66,0x68,0x69,0x6b,0x6d,0x6e,0x70,0x71,0x73,0x74,0x76,0x77,0x78,0x79,0x7a,0x7b,0x7c,0x7d,0x7e,0x7f,0x7f,0x80,0x80,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x80,0x80,0x7f,0x7f,0x7e,0x7d,0x7c,0x7b,0x7a,0x79,0x78,0x77,0x76,0x74,0x73,0x71,0x70,0x6e,0x6d,0x6b,0x69,0x68,0x66,0x64,0x62,0x60,0x5f,0x5d,0x5b,0x58,0x56,0x54,0x52,0x50,0x4e,0x4c,0x4a,0x48,0x46,0x44,0x42,0x40,0x3f,0x3d,0x3b,0x39,0x37,0x35,0x33,0x31,0x30,0x2e,0x2c,0x2a,0x28,0x27,0x25,0x23,0x22,0x20,0x1f,0x1d,0x1c,0x1a,0x19,0x17,0x16,0x15,0x13,0x12,0x11,0x10,0x0e,0x0d,0x0c,0x0a,0x09,0x08,0x07,0x06,0x06,0x05,0x04,0x03,0x02,0x01,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x02,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0f,0x10,0x11,0x13,0x14,0x16,0x17,0x18,0x1a,0x1b,0x1c,0x1e,0x1f,0x21,0x23,0x24,0x26,0x28,0x29,0x2b,0x2d,0x2f,0x31,0x32,0x34,0x36,0x38,0x3a,0x3c,0x3e,0x40,0x42,0x44,0x46,0x48,0x4a,0x4c,0x4e,0x50,0x52,0x54,0x56,0x59,0x5b,0x5d,0x5f,0x61,0x63,0x65,0x67,0x68,0x6a,0x6c,0x6e,0x70,0x71,0x73,0x74,0x76,0x77,0x79,0x7a,0x7b,0x7d,0x7e,0x7f,0x80,0x81,0x81,0x82,0x83,0x84,0x84,0x85,0x85,0x85,0x85,0x85,0x85,0x85,0x84,0x84,0x83,0x82,0x81,0x81,0x80,0x7f,0x7e,0x7d,0x7b,0x7a,0x79,0x77,0x76,0x74,0x73,0x71,0x70,0x6e,0x6c,0x6a,0x68,0x67,0x65,0x63,0x61,0x5f,0x5d,0x5b,0x59,0x56,0x54,0x52,0x50,0x4e,0x4c,0x4a,0x48,0x46,0x44,0x42,0x40,0x3e,0x3c,0x3a,0x38,0x36,0x34,0x32,0x31,0x2f,0x2d,0x2b,0x29,0x28,0x26,0x24,0x23,0x21,0x1f,0x1e,0x1c,0x1b,0x1a,0x18,0x17,0x16,0x14,0x13,0x11,0x10,0x0f,0x0d,0x0c,0x0b,0x0a,0x09,0x08,0x07,0x06,0x05,0x04,0x03,0x02,0x02,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x02,0x03,0x04,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0d,0x0e,0x10,0x11,0x12,0x13,0x15,0x16,0x17,0x19,0x1a,0x1c,0x1d,0x1f,0x20,0x22,0x24,0x25,0x27,0x29,0x2a,0x2c,0x2e,0x30,0x32,0x34,0x36,0x38,0x3a,0x3c,0x3e,0x40,0x42,0x44,0x46,0x48,0x4a,0x4c,0x4e,0x50,0x52,0x54,0x56,0x59,0x5b,0x5d,0x5f,0x61,0x63,0x65,0x67,0x69,0x6b,0x6d,0x6f,0x71,0x72,0x74,0x76,0x77,0x79,0x7a,0x7c,0x7d,0x7f,0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87,0x87,0x87,0x88,0x88,0x88,0x88,0x88,0x88,0x88,0x87,0x87,0x87,0x86,0x85,0x84,0x83,0x82,0x81,0x80,0x7f,0x7d,0x7c,0x7a,0x79,0x77,0x76,0x74,0x72,0x71,0x6f,0x6d,0x6b,0x69,0x67,0x65,0x63,0x61,0x5f,0x5d,0x5b,0x59,0x56,0x54,0x52,0x50,0x4e,0x4c,0x4a,0x48,0x46,0x44,0x42,0x40,0x3e,0x3c,0x3a,0x38,0x36,0x34,0x32,0x30,0x2e,0x2c,0x2a,0x29,0x27,0x25,0x24,0x22,0x20,0x1f,0x1d,0x1c,0x1a,0x19,0x17,0x16,0x15,0x13,0x12,0x11,0x10,0x0e,0x0d,0x0b,0x0a,0x09,0x08,0x07,0x06,0x05,0x04,0x04,0x03,0x02,0x01,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x02,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0f,0x10,0x11,0x13,0x14,0x16,0x17,0x18,0x1a,0x1b,0x1d,0x1e,0x20,0x21,0x23,0x24,0x26,0x28,0x2a,0x2b,0x2d,0x2f,0x31,0x33,0x35,0x37,0x39,0x3b,0x3d,0x3f,0x41,0x43,0x45,0x47,0x49,0x4b,0x4e,0x50,0x52,0x54,0x56,0x59,0x5b,0x5d,0x5f,0x61,0x63,0x65,0x68,0x6a,0x6c,0x6e,0x70,0x71,0x73,0x75,0x77,0x78,0x7a,0x7c,0x7e,0x7f,0x80,0x82,0x83,0x85,0x86,0x87,0x88,0x89,0x8a,0x8a,0x8b,0x8b,0x8c,0x8c,0x8c,0x8c,0x8c,0x8c,0x8c,0x8b,0x8b,0x8a,0x8a,0x89,0x88,0x87,0x86,0x85,0x83,0x82,0x80,0x7f,0x7e,0x7c,0x7a,0x78,0x77,0x75,0x73,0x71,0x70,0x6e,0x6c,0x6a,0x68,0x65,0x63,0x61,0x5f,0x5d,0x5b,0x59,0x56,0x54,0x52,0x50,0x4e,0x4b,0x49,0x47,0x45,0x43,0x41,0x3f,0x3d,0x3b,0x39,0x37,0x35,0x33,0x31,0x2f,0x2d,0x2b,0x2a,0x28,0x26,0x24,0x23,0x21,0x20,0x1e,0x1d,0x1b,0x1a,0x18,0x17,0x16,0x14,0x13,0x11,0x10,0x0f,0x0d,0x0c,0x0b,0x0a,0x09,0x08,0x07,0x06,0x05,0x04,0x03,0x02,0x02,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x02,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0d,0x0e,0x0f,0x11,0x12,0x13,0x14,0x16,0x17,0x19,0x1a,0x1c,0x1d,0x1f,0x20,0x22,0x24,0x25,0x27,0x29,0x2b,0x2d,0x2e,0x30,0x32,0x34,0x36,0x38,0x3a,0x3c,0x3e,0x40,0x42,0x45,0x47,0x49,0x4b,0x4d,0x4f,0x51,0x54,0x56,0x58,0x5b,0x5d,0x5f,0x61,0x63,0x66,0x68,0x6a,0x6c,0x6e,0x70,0x72,0x74,0x76,0x78,0x79,0x7b,0x7d,0x7f,0x81,0x82,0x84,0x85,0x87,0x88,0x89,0x8b,0x8c,0x8c,0x8d,0x8e,0x8f,0x8f,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x8f,0x8f,0x8e,0x8d,0x8c,0x8c,0x8b,0x89,0x88,0x87,0x85,0x84,0x82,0x81,0x7f,0x7d,0x7b,0x79,0x78,0x76,0x74,0x72,0x70,0x6e,0x6c,0x6a,0x68,0x66,0x63,0x61,0x5f,0x5d,0x5b,0x58,0x56,0x54,0x51,0x4f,0x4d,0x4b,0x49,0x47,0x45,0x42,0x40,0x3e,0x3c,0x3a,0x38,0x36,0x34,0x32,0x30,0x2e,0x2d,0x2b,0x29,0x27,0x25,0x24,0x22,0x20,0x1f,0x1d,0x1c,0x1a,0x19,0x17,0x16,0x14,0x13,0x12,0x11,0x0f,0x0e,0x0d,0x0b,0x0a,0x09,0x08,0x07,0x06,0x05,0x04,0x03,0x02,0x02,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0f,0x10,0x11,0x13,0x14,0x15,0x17,0x18,0x1a,0x1b,0x1c,0x1e,0x1f,0x21,0x23,0x25,0x26,0x28,0x2a,0x2c,0x2e,0x30,0x32,0x34,0x36,0x37,0x3a,0x3c,0x3e,0x40,0x42,0x44,0x46,0x48,0x4a,0x4d,0x4f,0x51,0x53,0x56,0x58,0x5a,0x5d,0x5f,0x61,0x63,0x66,0x68,0x6a,0x6c,0x6f,0x71,0x73,0x75,0x77,0x79,0x7a,0x7c,0x7e,0x80,0x82,0x84,0x85,0x87,0x89,0x8a,0x8c,0x8d,0x8e,0x90,0x90,0x91,0x92,0x93,0x93,0x94,0x94,0x94,0x94,0x94,0x94,0x94,0x93,0x93,0x92,0x91,0x90,0x90,0x8e,0x8d,0x8c,0x8a,0x89,0x87,0x85,0x84,0x82,0x80,0x7e,0x7c,0x7a,0x79,0x77,0x75,0x73,0x71,0x6f,0x6c,0x6a,0x68,0x66,0x63,0x61,0x5f,0x5d,0x5a,0x58,0x56,0x53,0x51,0x4f,0x4d,0x4a,0x48,0x46,0x44,0x42,0x40,0x3e,0x3c,0x3a,0x37,0x36,0x34,0x32,0x30,0x2e,0x2c,0x2a,0x28,0x26,0x25,0x23,0x21,0x1f,0x1e,0x1c,0x1b,0x1a,0x18,0x17,0x15,0x14,0x13,0x11,0x10,0x0f,0x0d,0x0c,0x0b,0x0a,0x09,0x08,0x07,0x06,0x05,0x04,0x03,0x02,0x01,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x02,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0e,0x0f,0x10,0x12,0x13,0x14,0x16,0x17,0x19,0x1a,0x1c,0x1d,0x1f,0x20,0x22,0x24,0x25,0x27,0x29,0x2b,0x2d,0x2f,0x31,0x33,0x35,0x37,0x39,0x3b,0x3d,0x3f,0x41,0x43,0x45,0x48,0x4a,0x4c,0x4e,0x51,0x53,0x55,0x58,0x5a,0x5c,0x5f,0x61,0x63,0x66,0x68,0x6a,0x6d,0x6f,0x71,0x73,0x75,0x77,0x79,0x7b,0x7d,0x7f,0x81,0x83,0x85,0x87,0x89,0x8a,0x8c,0x8e,0x8f,0x90,0x92,0x93,0x94,0x95,0x96,0x96,0x97,0x97,0x97,0x97,0x97,0x97,0x97,0x97,0x97,0x96,0x96,0x95,0x94,0x93,0x92,0x90,0x8f,0x8e,0x8c,0x8a,0x89,0x87,0x85,0x83,0x81,0x7f,0x7d,0x7b,0x79,0x77,0x75,0x73,0x71,0x6f,0x6d,0x6a,0x68,0x66,0x63,0x61,0x5f,0x5c,0x5a,0x58,0x55,0x53,0x51,0x4e,0x4c,0x4a,0x48,0x45,0x43,0x41,0x3f,0x3d,0x3b,0x39,0x37,0x35,0x33,0x31,0x2f,0x2d,0x2b,0x29,0x27,0x25,0x24,0x22,0x20,0x1f,0x1d,0x1c,0x1a,0x19,0x17,0x16,0x14,0x13,0x12,0x10,0x0f,0x0e,0x0c,0x0b,0x0a,0x09,0x08,0x07,0x06,0x05,0x04,0x03,0x02,0x02,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x02,0x03,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0c,0x0d,0x0e,0x10,0x11,0x12,0x14,0x15,0x16,0x18,0x19,0x1b,0x1c,0x1e,0x1f,0x21,0x23,0x25,0x26,0x28,0x2a,0x2c,0x2e,0x30,0x32,0x34,0x36,0x38,0x3a,0x3c,0x3e,0x40,0x42,0x45,0x47,0x49,0x4b,0x4e,0x50,0x52,0x55,0x57,0x5a,0x5c,0x5e,0x61,0x63,0x65,0x68,0x6a,0x6d,0x6f,0x71,0x73,0x75,0x78,0x7a,0x7c,0x7e,0x80,0x82,0x84,0x86,0x88,0x8a,0x8c,0x8e,0x90,0x91,0x93,0x94,0x96,0x97,0x98,0x99,0x99,0x9a,0x9a,0x9b,0x9b,0x9b,0x9b,0x9b,0x9b,0x9b,0x9a,0x9a,0x99,0x99,0x98,0x97,0x96,0x94,0x93,0x91,0x90,0x8e,0x8c,0x8a,0x88,0x86,0x84,0x82,0x80,0x7e,0x7c,0x7a,0x78,0x75,0x73,0x71,0x6f,0x6d,0x6a,0x68,0x65,0x63,0x61,0x5e,0x5c,0x5a,0x57,0x55,0x52,0x50,0x4e,0x4b,0x49,0x47,0x45,0x42,0x40,0x3e,0x3c,0x3a,0x38,0x36,0x34,0x32,0x30,0x2e,0x2c,0x2a,0x28,0x26,0x25,0x23,0x21,0x1f,0x1e,0x1c,0x1b,0x19,0x18,0x16,0x15,0x14,0x12,0x11,0x10,0x0e,0x0d,0x0c,0x0a,0x09,0x08,0x07,0x06,0x05,0x04,0x03,0x03,0x02,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0f,0x10,0x11,0x13,0x14,0x16,0x17,0x19,0x1a,0x1c,0x1d,0x1f,0x20,0x22,0x23,0x25,0x27,0x29,0x2b,0x2d,0x2f,0x31,0x33,0x35,0x37,0x39,0x3b,0x3d,0x3f,0x42,0x44,0x46,0x48,0x4a,0x4d,0x4f,0x51,0x54,0x56,0x59,0x5b,0x5e,0x60,0x63,0x65,0x68,0x6a,0x6c,0x6f,0x71,0x73,0x76,0x78,0x7a,0x7d,0x7f,0x81,0x83,0x85,0x87,0x8a,0x8c,0x8e,0x90,0x91,0x93,0x95,0x96,0x98,0x99,0x9a,0x9b,0x9c,0x9d,0x9e,0x9e,0x9f,0x9f,0x9f,0x9f,0x9f,0x9f,0x9f,0x9e,0x9e,0x9d,0x9c,0x9b,0x9a,0x99,0x98,0x96,0x95,0x93,0x91,0x90,0x8e,0x8c,0x8a,0x87,0x85,0x83,0x81,0x7f,0x7d,0x7a,0x78,0x76,0x73,0x71,0x6f,0x6c,0x6a,0x68,0x65,0x63,0x60,0x5e,0x5b,0x59,0x56,0x54,0x51,0x4f,0x4d,0x4a,0x48,0x46,0x44,0x42,0x3f,0x3d,0x3b,0x39,0x37,0x35,0x33,0x31,0x2f,0x2d,0x2b,0x29,0x27,0x25,0x23,0x22,0x20,0x1f,0x1d,0x1c,0x1a,0x19,0x17,0x16,0x14,0x13,0x11,0x10,0x0f,0x0d,0x0c,0x0b,0x0a,0x09,0x08,0x07,0x06,0x05,0x04,0x03,0x02,0x01,0x01,0x01,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x02,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0e,0x0f,0x11,0x12,0x13,0x15,0x16,0x17,0x19,0x1a,0x1c,0x1e,0x1f,0x21,0x23,0x24,0x26,0x28,0x2a,0x2c,0x2e,0x30,0x32,0x34,0x36,0x38,0x3a,0x3c,0x3e,0x41,0x43,0x45,0x47,0x4a,0x4c,0x4e,0x51,0x53,0x56,0x58,0x5b,0x5d,0x60,0x62,0x65,0x67,0x6a,0x6c,0x6f,0x71,0x73,0x76,0x78,0x7a,0x7d,0x7f,0x81,0x84,0x86,0x88,0x8b,0x8d,0x8f,0x91,0x93,0x95,0x97,0x98,0x9a,0x9b,0x9d,0x9e,0x9f,0xa0,0xa1,0xa2,0xa2,0xa3,0xa3,0xa3,0xa3,0xa3,0xa3,0xa3,0xa2,0xa2,0xa1,0xa0,0x9f,0x9e,0x9d,0x9b,0x9a,0x98,0x97,0x95,0x93,0x91,0x8f,0x8d,0x8b,0x88,0x86,0x84,0x81,0x7f,0x7d,0x7a,0x78,0x76,0x73,0x71,0x6f,0x6c,0x6a,0x67,0x65,0x62,0x60,0x5d,0x5b,0x58,0x56,0x53,0x51,0x4e,0x4c,0x4a,0x47,0x45,0x43,0x41,0x3e,0x3c,0x3a,0x38,0x36,0x34,0x32,0x30,0x2e,0x2c,0x2a,0x28,0x26,0x24,0x23,0x21,0x1f,0x1e,0x1c,0x1a,0x19,0x17,0x16,0x15,0x13,0x12,0x11,0x0f,0x0e,0x0c,0x0b,0x0a,0x09,0x08,0x07,0x06,0x05,0x04,0x03,0x02,0x02,0x01,0x01,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x02,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0c,0x0d,0x0e,0x10,0x11,0x12,0x14,0x15,0x17,0x18,0x1a,0x1b,0x1d,0x1e,0x20,0x21,0x23,0x25,0x27,0x29,0x2b,0x2d,0x2f,0x31,0x33,0x35,0x37,0x39,0x3b,0x3d,0x40,0x42,0x44,0x46,0x49,0x4b,0x4d,0x50,0x52,0x55,0x58,0x5a,0x5d,0x5f,0x62,0x64,0x67,0x69,0x6c,0x6e,0x71,0x73,0x75,0x78,0x7a,0x7d,0x7f,0x82,0x84,0x87,0x89,0x8c,0x8e,0x90,0x92,0x94,0x96,0x98,0x9a,0x9c,0x9d,0x9f,0xa0,0xa1,0xa3,0xa4,0xa4,0xa5,0xa6,0xa6,0xa7,0xa7,0xa7,0xa7,0xa7,0xa6,0xa6,0xa5,0xa4,0xa4,0xa3,0xa1,0xa0,0x9f,0x9d,0x9c,0x9a,0x98,0x96,0x94,0x92,0x90,0x8e,0x8c,0x89,0x87,0x84,0x82,0x7f,0x7d,0x7a,0x78,0x75,0x73,0x71,0x6e,0x6c,0x69,0x67,0x64,0x62,0x5f,0x5d,0x5a,0x58,0x55,0x52,0x50,0x4d,0x4b,0x49,0x46,0x44,0x42,0x40,0x3d,0x3b,0x39,0x37,0x35,0x33,0x31,0x2f,0x2d,0x2b,0x29,0x27,0x25,0x23,0x21,0x20,0x1e,0x1d,0x1b,0x1a,0x18,0x17,0x15,0x14,0x12,0x11,0x10,0x0e,0x0d,0x0c,0x0a,0x09,0x08,0x07,0x06,0x05,0x04,0x03,0x02,0x02,0x01,0x01,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0f,0x10,0x12,0x13,0x14,0x16,0x17,0x19,0x1a,0x1c,0x1d,0x1f,0x21,0x22,0x24,0x26,0x28,0x29,0x2b,0x2d,0x30,0x32,0x34,0x36,0x38,0x3a,0x3c,0x3e,0x41,0x43,0x45,0x48,0x4a,0x4c,0x4f,0x51,0x54,0x56,0x59,0x5c,0x5e,0x61,0x63,0x66,0x68,0x6b,0x6e,0x70,0x73,0x75,0x78,0x7a,0x7d,0x7f,0x82,0x84,0x87,0x8a,0x8c,0x8f,0x91,0x93,0x95,0x98,0x9a,0x9b,0x9d,0x9f,0xa1,0xa2,0xa4,0xa5,0xa6,0xa7,0xa8,0xa9,0xaa,0xaa,0xab,0xab,0xab,0xab,0xab,0xaa,0xaa,0xa9,0xa8,0xa7,0xa6,0xa5,0xa4,0xa2,0xa1,0x9f,0x9d,0x9b,0x9a,0x98,0x95,0x93,0x91,0x8f,0x8c,0x8a,0x87,0x84,0x82,0x7f,0x7d,0x7a,0x78,0x75,0x73,0x70,0x6e,0x6b,0x68,0x66,0x63,0x61,0x5e,0x5c,0x59,0x56,0x54,0x51,0x4f,0x4c,0x4a,0x48,0x45,0x43,0x41,0x3e,0x3c,0x3a,0x38,0x36,0x34,0x32,0x30,0x2d,0x2b,0x29,0x28,0x26,0x24,0x22,0x21,0x1f,0x1d,0x1c,0x1a,0x19,0x17,0x16,0x14,0x13,0x12,0x10,0x0f,0x0d,0x0c,0x0b,0x0a,0x09,0x08,0x07,0x06,0x05,0x04,0x03,0x02,0x01,0x01,0x01,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x02,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0e,0x0f,0x11,0x12,0x13,0x15,0x16,0x18,0x19,0x1b,0x1c,0x1e,0x1f,0x21,0x23,0x25,0x27,0x28,0x2a,0x2c,0x2e,0x30,0x33,0x35,0x37,0x39,0x3b,0x3d,0x40,0x42,0x44,0x46,0x49,0x4b,0x4e,0x50,0x53,0x55,0x58,0x5b,0x5d,0x60,0x62,0x65,0x68,0x6a,0x6d,0x70,0x72,0x75,0x77,0x7a,0x7d,0x7f,0x82,0x84,0x87,0x8a,0x8d,0x8f,0x92,0x94,0x96,0x98,0x9b,0x9d,0x9f,0xa0,0xa2,0xa4,0xa6,0xa7,0xa8,0xaa,0xab,0xac,0xad,0xad,0xae,0xae,0xaf,0xaf,0xaf,0xae,0xae,0xad,0xad,0xac,0xab,0xaa,0xa8,0xa7,0xa6,0xa4,0xa2,0xa0,0x9f,0x9d,0x9b,0x98,0x96,0x94,0x92,0x8f,0x8d,0x8a,0x87,0x84,0x82,0x7f,0x7d,0x7a,0x77,0x75,0x72,0x70,0x6d,0x6a,0x68,0x65,0x62,0x60,0x5d,0x5b,0x58,0x55,0x53,0x50,0x4e,0x4b,0x49,0x46,0x44,0x42,0x40,0x3d,0x3b,0x39,0x37,0x35,0x33,0x30,0x2e,0x2c,0x2a,0x28,0x27,0x25,0x23,0x21,0x1f,0x1e,0x1c,0x1b,0x19,0x18,0x16,0x15,0x13,0x12,0x11,0x0f,0x0e,0x0c,0x0b,0x0a,0x09,0x08,0x07,0x06,0x05,0x04,0x03,0x02,0x02,0x01,0x01,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x02,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0d,0x0e,0x10,0x11,0x12,0x14,0x15,0x17,0x18,0x1a,0x1b,0x1d,0x1e,0x20,0x22,0x23,0x25,0x27,0x29,0x2b,0x2d,0x2f,0x31,0x34,0x36,0x38,0x3a,0x3c,0x3e,0x41,0x43,0x45,0x48,0x4a,0x4c,0x4f,0x51,0x54,0x57,0x59,0x5c,0x5f,0x61,0x64,0x67,0x69,0x6c,0x6f,0x71,0x74,0x77,0x79,0x7c,0x7f,0x82,0x84,0x87,0x8a,0x8d,0x8f,0x92,0x94,0x97,0x99,0x9c,0x9e,0xa0,0xa2,0xa4,0xa6,0xa8,0xa9,0xab,0xac,0xae,0xaf,0xb0,0xb0,0xb1,0xb2,0xb2,0xb2,0xb3,0xb2,0xb2,0xb2,0xb1,0xb0,0xb0,0xaf,0xae,0xac,0xab,0xa9,0xa8,0xa6,0xa4,0xa2,0xa0,0x9e,0x9c,0x99,0x97,0x94,0x92,0x8f,0x8d,0x8a,0x87,0x84,0x82,0x7f,0x7c,0x79,0x77,0x74,0x71,0x6f,0x6c,0x69,0x67,0x64,0x61,0x5f,0x5c,0x59,0x57,0x54,0x51,0x4f,0x4c,0x4a,0x48,0x45,0x43,0x41,0x3e,0x3c,0x3a,0x38,0x36,0x34,0x31,0x2f,0x2d,0x2b,0x29,0x27,0x25,0x23,0x22,0x20,0x1e,0x1d,0x1b,0x1a,0x18,0x17,0x15,0x14,0x12,0x11,0x10,0x0e,0x0d,0x0b,0x0a,0x09,0x08,0x07,0x06,0x05,0x04,0x03,0x02,0x02,0x01,0x01,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x02,0x03,0x04,0x04,0x05,0x06,0x07,0x09,0x0a,0x0b,0x0c,0x0d,0x0f,0x10,0x12,0x13,0x14,0x16,0x17,0x19,0x1a,0x1c,0x1d,0x1f,0x21,0x22,0x24,0x26,0x28,0x2a,0x2c,0x2e,0x30,0x32,0x34,0x36,0x39,0x3b,0x3d,0x3f,0x41,0x44,0x46,0x49,0x4b,0x4e,0x50,0x53,0x55,0x58,0x5b,0x5e,0x60,0x63,0x66,0x68,0x6b,0x6e,0x71,0x73,0x76,0x79,0x7b,0x7e,0x81,0x84,0x87,0x8a,0x8d,0x8f,0x92,0x95,0x97,0x9a,0x9c,0x9f,0xa1,0xa3,0xa5,0xa7,0xa9,0xab,0xad,0xaf,0xb0,0xb1,0xb3,0xb3,0xb4,0xb5,0xb6,0xb6,0xb6,0xb7,0xb6,0xb6,0xb6,0xb5,0xb4,0xb3,0xb3,0xb1,0xb0,0xaf,0xad,0xab,0xa9,0xa7,0xa5,0xa3,0xa1,0x9f,0x9c,0x9a,0x97,0x95,0x92,0x8f,0x8d,0x8a,0x87,0x84,0x81,0x7e,0x7b,0x79,0x76,0x73,0x71,0x6e,0x6b,0x68,0x66,0x63,0x60,0x5e,0x5b,0x58,0x55,0x53,0x50,0x4e,0x4b,0x49,0x46,0x44,0x41,0x3f,0x3d,0x3b,0x39,0x36,0x34,0x32,0x30,0x2e,0x2c,0x2a,0x28,0x26,0x24,0x22,0x21,0x1f,0x1d,0x1c,0x1a,0x19,0x17,0x16,0x14,0x13,0x12,0x10,0x0f,0x0d,0x0c,0x0b,0x0a,0x09,0x07,0x06,0x05,0x04,0x04,0x03,0x02,0x01,0x01,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0e,0x0f,0x10,0x12,0x13,0x15,0x16,0x18,0x19,0x1b,0x1c,0x1e,0x1f,0x21,0x23,0x25,0x27,0x29,0x2b,0x2d,0x2f,0x31,0x33,0x35,0x37,0x3a,0x3c,0x3e,0x40,0x42,0x45,0x47,0x4a,0x4c,0x4f,0x51,0x54,0x57,0x5a,0x5c,0x5f,0x62,0x64,0x67,0x6a,0x6d,0x70,0x72,0x75,0x78,0x7b,0x7d,0x80,0x83,0x86,0x89,0x8c,0x8f,0x92,0x95,0x97,0x9a,0x9c,0x9f,0xa2,0xa4,0xa6,0xa8,0xab,0xac,0xae,0xb0,0xb2,0xb3,0xb5,0xb6,0xb7,0xb8,0xb9,0xba,0xba,0xba,0xbb,0xba,0xba,0xba,0xb9,0xb8,0xb7,0xb6,0xb5,0xb3,0xb2,0xb0,0xae,0xac,0xab,0xa8,0xa6,0xa4,0xa2,0x9f,0x9c,0x9a,0x97,0x95,0x92,0x8f,0x8c,0x89,0x86,0x83,0x80,0x7d,0x7b,0x78,0x75,0x72,0x70,0x6d,0x6a,0x67,0x64,0x62,0x5f,0x5c,0x5a,0x57,0x54,0x51,0x4f,0x4c,0x4a,0x47,0x45,0x42,0x40,0x3e,0x3c,0x3a,0x37,0x35,0x33,0x31,0x2f,0x2d,0x2b,0x29,0x27,0x25,0x23,0x21,0x1f,0x1e,0x1c,0x1b,0x19,0x18,0x16,0x15,0x13,0x12,0x10,0x0f,0x0e,0x0c,0x0b,0x0a,0x09,0x08,0x07,0x06,0x05,0x04,0x03,0x02,0x01,0x01,0x01,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x01,0x01,0x02,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0d,0x0e,0x10,0x11,0x12,0x14,0x15,0x17,0x18,0x1a,0x1b,0x1d,0x1e,0x20,0x22,0x23,0x25,0x27,0x29,0x2b,0x2d,0x30,0x32,0x34,0x36,0x38,0x3a,0x3d,0x3f,0x41,0x43,0x46,0x48,0x4b,0x4d,0x50,0x53,0x55,0x58,0x5b,0x5e,0x60,0x63,0x66,0x69,0x6c,0x6e,0x71,0x74,0x77,0x7a,0x7d,0x7f,0x82,0x85,0x88,0x8c,0x8f,0x92,0x94,0x97,0x9a,0x9c,0x9f,0xa2,0xa4,0xa7,0xa9,0xac,0xae,0xb0,0xb2,0xb4,0xb6,0xb7,0xb9,0xba,0xbb,0xbc,0xbd,0xbe,0xbe,0xbe,0xbf,0xbe,0xbe,0xbe,0xbd,0xbc,0xbb,0xba,0xb9,0xb7,0xb6,0xb4,0xb2,0xb0,0xae,0xac,0xa9,0xa7,0xa4,0xa2,0x9f,0x9c,0x9a,0x97,0x94,0x92,0x8f,0x8c,0x88,0x85,0x82,0x7f,0x7d,0x7a,0x77,0x74,0x71,0x6e,0x6c,0x69,0x66,0x63,0x60,0x5e,0x5b,0x58,0x55,0x53,0x50,0x4d,0x4b,0x48,0x46,0x43,0x41,0x3f,0x3d,0x3a,0x38,0x36,0x34,0x32,0x30,0x2d,0x2b,0x29,0x27,0x25,0x23,0x22,0x20,0x1e,0x1d,0x1b,0x1a,0x18,0x17,0x15,0x14,0x12,0x11,0x10,0x0e,0x0d,0x0b,0x0a,0x09,0x08,0x07,0x06,0x05,0x04,0x03,0x02,0x02,0x01,0x01,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x01,0x01,0x02,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0d,0x0e,0x10,0x11,0x13,0x14,0x16,0x17,0x18,0x1a,0x1b,0x1d,0x1f,0x20,0x22,0x24,0x26,0x28,0x2a,0x2c,0x2e,0x30,0x32,0x35,0x37,0x39,0x3b,0x3e,0x40,0x42,0x44,0x47,0x49,0x4c,0x4e,0x51,0x54,0x57,0x5a,0x5c,0x5f,0x62,0x65,0x67,0x6a,0x6d,0x70,0x73,0x76,0x79,0x7b,0x7e,0x81,0x84,0x88,0x8b,0x8e,0x91,0x94,0x97,0x9a,0x9c,0x9f,0xa2,0xa5,0xa7,0xaa,0xac,0xaf,0xb1,0xb3,0xb5,0xb7,0xb9,0xbb,0xbc,0xbe,0xbf,0xc0,0xc1,0xc1,0xc2,0xc2,0xc3,0xc2,0xc2,0xc1,0xc1,0xc0,0xbf,0xbe,0xbc,0xbb,0xb9,0xb7,0xb5,0xb3,0xb1,0xaf,0xac,0xaa,0xa7,0xa5,0xa2,0x9f,0x9c,0x9a,0x97,0x94,0x91,0x8e,0x8b,0x88,0x84,0x81,0x7e,0x7b,0x79,0x76,0x73,0x70,0x6d,0x6a,0x67,0x65,0x62,0x5f,0x5c,0x5a,0x57,0x54,0x51,0x4e,0x4c,0x49,0x47,0x44,0x42,0x40,0x3e,0x3b,0x39,0x37,0x35,0x32,0x30,0x2e,0x2c,0x2a,0x28,0x26,0x24,0x22,0x20,0x1f,0x1d,0x1b,0x1a,0x18,0x17,0x16,0x14,0x13,0x11,0x10,0x0e,0x0d,0x0b,0x0a,0x09,0x08,0x07,0x06,0x05,0x04,0x03,0x02,0x02,0x01,0x01,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x01,0x01,0x02,0x03,0x03,0x04,0x05,0x06,0x07,0x09,0x0a,0x0b,0x0c,0x0d,0x0f,0x10,0x11,0x13,0x14,0x16,0x17,0x19,0x1a,0x1c,0x1e,0x1f,0x21,0x23,0x25,0x26,0x28,0x2a,0x2c,0x2f,0x31,0x33,0x35,0x37,0x3a,0x3c,0x3e,0x41,0x43,0x45,0x48,0x4a,0x4d,0x4f,0x52,0x55,0x58,0x5b,0x5e,0x60,0x63,0x66,0x69,0x6c,0x6f,0x71,0x74,0x77,0x7a,0x7d,0x80,0x83,0x87,0x8a,0x8d,0x90,0x93,0x96,0x99,0x9c,0x9f,0xa2,0xa5,0xa8,0xaa,0xad,0xaf,0xb2,0xb4,0xb6,0xb9,0xbb,0xbd,0xbe,0xc0,0xc1,0xc3,0xc4,0xc5,0xc5,0xc6,0xc6,0xc7,0xc6,0xc6,0xc5,0xc5,0xc4,0xc3,0xc1,0xc0,0xbe,0xbd,0xbb,0xb9,0xb6,0xb4,0xb2,0xaf,0xad,0xaa,0xa8,0xa5,0xa2,0x9f,0x9c,0x99,0x96,0x93,0x90,0x8d,0x8a,0x87,0x83,0x80,0x7d,0x7a,0x77,0x74,0x71,0x6f,0x6c,0x69,0x66,0x63,0x60,0x5e,0x5b,0x58,0x55,0x52,0x4f,0x4d,0x4a,0x48,0x45,0x43,0x41,0x3e,0x3c,0x3a,0x37,0x35,0x33,0x31,0x2f,0x2c,0x2a,0x28,0x26,0x25,0x23,0x21,0x1f,0x1e,0x1c,0x1a,0x19,0x17,0x16,0x14,0x13,0x11,0x10,0x0f,0x0d,0x0c,0x0b,0x0a,0x09,0x07,0x06,0x05,0x04,0x03,0x03,0x02,0x01,0x01,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x01,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0e,0x0f,0x11,0x12,0x13,0x15,0x16,0x18,0x19,0x1b,0x1c,0x1e,0x20,0x21,0x23,0x25,0x27,0x29,0x2b,0x2d,0x2f,0x32,0x34,0x36,0x38,0x3a,0x3d,0x3f,0x41,0x44,0x46,0x49,0x4b,0x4e,0x50,0x53,0x56,0x59,0x5c,0x5f,0x61,0x64,0x67,0x6a,0x6d,0x70,0x73,0x76,0x79,0x7c,0x7f,0x82,0x85,0x89,0x8c,0x8f,0x92,0x96,0x99,0x9c,0x9f,0xa1,0xa4,0xa7,0xaa,0xad,0xb0,0xb2,0xb5,0xb7,0xba,0xbc,0xbe,0xc0,0xc2,0xc4,0xc5,0xc7,0xc8,0xc9,0xc9,0xca,0xca,0xca,0xca,0xca,0xc9,0xc9,0xc8,0xc7,0xc5,0xc4,0xc2,0xc0,0xbe,0xbc,0xba,0xb7,0xb5,0xb2,0xb0,0xad,0xaa,0xa7,0xa4,0xa1,0x9f,0x9c,0x99,0x96,0x92,0x8f,0x8c,0x89,0x85,0x82,0x7f,0x7c,0x79,0x76,0x73,0x70,0x6d,0x6a,0x67,0x64,0x61,0x5f,0x5c,0x59,0x56,0x53,0x50,0x4e,0x4b,0x49,0x46,0x44,0x41,0x3f,0x3d,0x3a,0x38,0x36,0x34,0x32,0x2f,0x2d,0x2b,0x29,0x27,0x25,0x23,0x21,0x20,0x1e,0x1c,0x1b,0x19,0x18,0x16,0x15,0x13,0x12,0x11,0x0f,0x0e,0x0c,0x0b,0x0a,0x09,0x08,0x07,0x06,0x05,0x04,0x03,0x02,0x01,0x01,0x00,0x00,0x00, +0x00,0x00,0x00,0x01,0x01,0x02,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0d,0x0e,0x10,0x11,0x12,0x14,0x15,0x17,0x18,0x1a,0x1b,0x1d,0x1e,0x20,0x22,0x24,0x25,0x27,0x29,0x2b,0x2d,0x30,0x32,0x34,0x36,0x39,0x3b,0x3e,0x40,0x42,0x45,0x47,0x4a,0x4c,0x4f,0x51,0x54,0x57,0x5a,0x5d,0x60,0x63,0x66,0x68,0x6b,0x6e,0x71,0x74,0x77,0x7a,0x7e,0x81,0x84,0x87,0x8b,0x8e,0x91,0x94,0x98,0x9b,0x9e,0xa1,0xa4,0xa7,0xaa,0xad,0xb0,0xb3,0xb5,0xb8,0xbb,0xbd,0xbf,0xc1,0xc3,0xc5,0xc7,0xc9,0xcb,0xcc,0xcd,0xcd,0xce,0xce,0xcf,0xce,0xce,0xcd,0xcd,0xcc,0xcb,0xc9,0xc7,0xc5,0xc3,0xc1,0xbf,0xbd,0xbb,0xb8,0xb5,0xb3,0xb0,0xad,0xaa,0xa7,0xa4,0xa1,0x9e,0x9b,0x98,0x94,0x91,0x8e,0x8b,0x87,0x84,0x81,0x7e,0x7a,0x77,0x74,0x71,0x6e,0x6b,0x68,0x66,0x63,0x60,0x5d,0x5a,0x57,0x54,0x51,0x4f,0x4c,0x4a,0x47,0x45,0x42,0x40,0x3e,0x3b,0x39,0x36,0x34,0x32,0x30,0x2d,0x2b,0x29,0x27,0x25,0x24,0x22,0x20,0x1e,0x1d,0x1b,0x1a,0x18,0x17,0x15,0x14,0x12,0x11,0x10,0x0e,0x0d,0x0b,0x0a,0x09,0x08,0x07,0x06,0x05,0x04,0x03,0x02,0x02,0x01,0x01,0x00,0x00, +0x00,0x00,0x00,0x01,0x01,0x02,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0d,0x0e,0x10,0x11,0x13,0x14,0x16,0x17,0x19,0x1a,0x1c,0x1d,0x1f,0x21,0x22,0x24,0x26,0x28,0x2a,0x2c,0x2e,0x31,0x33,0x35,0x37,0x39,0x3c,0x3e,0x41,0x43,0x45,0x48,0x4a,0x4d,0x50,0x52,0x55,0x58,0x5b,0x5e,0x61,0x64,0x67,0x6a,0x6d,0x70,0x73,0x76,0x79,0x7c,0x7f,0x82,0x85,0x89,0x8c,0x90,0x93,0x96,0x9a,0x9d,0xa0,0xa3,0xa6,0xa9,0xac,0xaf,0xb2,0xb5,0xb8,0xbb,0xbe,0xc0,0xc2,0xc5,0xc7,0xc9,0xcb,0xcd,0xce,0xd0,0xd1,0xd2,0xd3,0xd3,0xd3,0xd3,0xd3,0xd2,0xd1,0xd0,0xce,0xcd,0xcb,0xc9,0xc7,0xc5,0xc2,0xc0,0xbe,0xbb,0xb8,0xb5,0xb2,0xaf,0xac,0xa9,0xa6,0xa3,0xa0,0x9d,0x9a,0x96,0x93,0x90,0x8c,0x89,0x85,0x82,0x7f,0x7c,0x79,0x76,0x73,0x70,0x6d,0x6a,0x67,0x64,0x61,0x5e,0x5b,0x58,0x55,0x52,0x50,0x4d,0x4a,0x48,0x45,0x43,0x41,0x3e,0x3c,0x39,0x37,0x35,0x33,0x31,0x2e,0x2c,0x2a,0x28,0x26,0x24,0x22,0x21,0x1f,0x1d,0x1c,0x1a,0x19,0x17,0x16,0x14,0x13,0x11,0x10,0x0e,0x0d,0x0b,0x0a,0x09,0x08,0x07,0x06,0x05,0x04,0x03,0x02,0x02,0x01,0x01,0x00,0x00, +0x00,0x00,0x00,0x01,0x01,0x02,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0c,0x0d,0x0f,0x10,0x11,0x13,0x14,0x16,0x17,0x19,0x1a,0x1c,0x1e,0x1f,0x21,0x23,0x25,0x26,0x28,0x2a,0x2c,0x2f,0x31,0x33,0x35,0x38,0x3a,0x3c,0x3f,0x41,0x44,0x46,0x49,0x4b,0x4e,0x50,0x53,0x56,0x59,0x5c,0x5f,0x62,0x65,0x68,0x6b,0x6e,0x71,0x74,0x77,0x7a,0x7d,0x81,0x84,0x87,0x8b,0x8e,0x92,0x95,0x98,0x9c,0x9f,0xa2,0xa5,0xa9,0xac,0xaf,0xb2,0xb5,0xb8,0xbb,0xbe,0xc1,0xc3,0xc6,0xc8,0xca,0xcd,0xcf,0xd1,0xd2,0xd4,0xd5,0xd6,0xd7,0xd7,0xd7,0xd7,0xd7,0xd6,0xd5,0xd4,0xd2,0xd1,0xcf,0xcd,0xca,0xc8,0xc6,0xc3,0xc1,0xbe,0xbb,0xb8,0xb5,0xb2,0xaf,0xac,0xa9,0xa5,0xa2,0x9f,0x9c,0x98,0x95,0x92,0x8e,0x8b,0x87,0x84,0x81,0x7d,0x7a,0x77,0x74,0x71,0x6e,0x6b,0x68,0x65,0x62,0x5f,0x5c,0x59,0x56,0x53,0x50,0x4e,0x4b,0x49,0x46,0x44,0x41,0x3f,0x3c,0x3a,0x38,0x35,0x33,0x31,0x2f,0x2c,0x2a,0x28,0x26,0x25,0x23,0x21,0x1f,0x1e,0x1c,0x1a,0x19,0x17,0x16,0x14,0x13,0x11,0x10,0x0f,0x0d,0x0c,0x0a,0x09,0x08,0x07,0x06,0x05,0x04,0x03,0x02,0x02,0x01,0x01,0x00,0x00, +0x00,0x00,0x00,0x01,0x01,0x02,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x0a,0x0b,0x0c,0x0d,0x0f,0x10,0x11,0x13,0x14,0x16,0x17,0x19,0x1a,0x1c,0x1e,0x1f,0x21,0x23,0x25,0x27,0x29,0x2b,0x2d,0x2f,0x32,0x34,0x36,0x38,0x3a,0x3d,0x3f,0x42,0x44,0x47,0x49,0x4c,0x4f,0x51,0x54,0x57,0x5a,0x5d,0x60,0x63,0x66,0x69,0x6c,0x6f,0x72,0x75,0x78,0x7b,0x7f,0x82,0x85,0x89,0x8c,0x90,0x93,0x97,0x9a,0x9d,0xa1,0xa4,0xa7,0xab,0xae,0xb1,0xb4,0xb7,0xba,0xbd,0xc1,0xc4,0xc6,0xc9,0xcc,0xce,0xd0,0xd3,0xd5,0xd6,0xd8,0xd9,0xda,0xdb,0xdb,0xdb,0xdb,0xdb,0xda,0xd9,0xd8,0xd6,0xd5,0xd3,0xd0,0xce,0xcc,0xc9,0xc6,0xc4,0xc1,0xbd,0xba,0xb7,0xb4,0xb1,0xae,0xab,0xa7,0xa4,0xa1,0x9d,0x9a,0x97,0x93,0x90,0x8c,0x89,0x85,0x82,0x7f,0x7b,0x78,0x75,0x72,0x6f,0x6c,0x69,0x66,0x63,0x60,0x5d,0x5a,0x57,0x54,0x51,0x4f,0x4c,0x49,0x47,0x44,0x42,0x3f,0x3d,0x3a,0x38,0x36,0x34,0x32,0x2f,0x2d,0x2b,0x29,0x27,0x25,0x23,0x21,0x1f,0x1e,0x1c,0x1a,0x19,0x17,0x16,0x14,0x13,0x11,0x10,0x0f,0x0d,0x0c,0x0b,0x0a,0x08,0x07,0x06,0x05,0x04,0x03,0x02,0x02,0x01,0x01,0x00,0x00, +0x00,0x00,0x00,0x01,0x01,0x02,0x03,0x03,0x04,0x05,0x06,0x07,0x09,0x0a,0x0b,0x0c,0x0e,0x0f,0x11,0x12,0x13,0x15,0x16,0x18,0x19,0x1b,0x1c,0x1e,0x20,0x22,0x23,0x25,0x27,0x29,0x2b,0x2d,0x30,0x32,0x34,0x36,0x39,0x3b,0x3d,0x40,0x42,0x45,0x47,0x4a,0x4d,0x4f,0x52,0x55,0x58,0x5b,0x5e,0x61,0x64,0x67,0x6a,0x6d,0x70,0x73,0x76,0x79,0x7d,0x80,0x83,0x87,0x8a,0x8e,0x91,0x95,0x98,0x9c,0x9f,0xa3,0xa6,0xa9,0xad,0xb0,0xb3,0xb6,0xba,0xbd,0xc0,0xc3,0xc6,0xc9,0xcc,0xcf,0xd1,0xd4,0xd6,0xd8,0xda,0xdb,0xdd,0xdd,0xde,0xde,0xdf,0xde,0xde,0xdd,0xdd,0xdb,0xda,0xd8,0xd6,0xd4,0xd1,0xcf,0xcc,0xc9,0xc6,0xc3,0xc0,0xbd,0xba,0xb6,0xb3,0xb0,0xad,0xa9,0xa6,0xa3,0x9f,0x9c,0x98,0x95,0x91,0x8e,0x8a,0x87,0x83,0x80,0x7d,0x79,0x76,0x73,0x70,0x6d,0x6a,0x67,0x64,0x61,0x5e,0x5b,0x58,0x55,0x52,0x4f,0x4d,0x4a,0x47,0x45,0x42,0x40,0x3d,0x3b,0x39,0x36,0x34,0x32,0x30,0x2d,0x2b,0x29,0x27,0x25,0x23,0x22,0x20,0x1e,0x1c,0x1b,0x19,0x18,0x16,0x15,0x13,0x12,0x11,0x0f,0x0e,0x0c,0x0b,0x0a,0x09,0x07,0x06,0x05,0x04,0x03,0x03,0x02,0x01,0x01,0x00,0x00, +0x00,0x00,0x00,0x01,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0e,0x0f,0x11,0x12,0x14,0x15,0x17,0x18,0x1a,0x1b,0x1d,0x1e,0x20,0x22,0x24,0x26,0x27,0x29,0x2b,0x2e,0x30,0x32,0x35,0x37,0x39,0x3c,0x3e,0x40,0x43,0x45,0x48,0x4a,0x4d,0x50,0x53,0x56,0x59,0x5c,0x5f,0x62,0x65,0x68,0x6b,0x6e,0x71,0x74,0x77,0x7a,0x7e,0x81,0x85,0x88,0x8c,0x8f,0x93,0x96,0x9a,0x9d,0xa1,0xa4,0xa8,0xab,0xaf,0xb2,0xb5,0xb9,0xbc,0xbf,0xc2,0xc6,0xc9,0xcc,0xcf,0xd2,0xd5,0xd7,0xda,0xdc,0xdd,0xdf,0xe0,0xe1,0xe2,0xe2,0xe3,0xe2,0xe2,0xe1,0xe0,0xdf,0xdd,0xdc,0xda,0xd7,0xd5,0xd2,0xcf,0xcc,0xc9,0xc6,0xc2,0xbf,0xbc,0xb9,0xb5,0xb2,0xaf,0xab,0xa8,0xa4,0xa1,0x9d,0x9a,0x96,0x93,0x8f,0x8c,0x88,0x85,0x81,0x7e,0x7a,0x77,0x74,0x71,0x6e,0x6b,0x68,0x65,0x62,0x5f,0x5c,0x59,0x56,0x53,0x50,0x4d,0x4a,0x48,0x45,0x43,0x40,0x3e,0x3c,0x39,0x37,0x35,0x32,0x30,0x2e,0x2b,0x29,0x27,0x26,0x24,0x22,0x20,0x1e,0x1d,0x1b,0x1a,0x18,0x17,0x15,0x14,0x12,0x11,0x0f,0x0e,0x0c,0x0b,0x0a,0x09,0x08,0x07,0x06,0x05,0x04,0x03,0x02,0x01,0x01,0x00,0x00, +0x00,0x00,0x01,0x01,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0d,0x0e,0x10,0x11,0x13,0x14,0x15,0x17,0x18,0x1a,0x1c,0x1d,0x1f,0x21,0x22,0x24,0x26,0x28,0x2a,0x2c,0x2e,0x31,0x33,0x35,0x37,0x3a,0x3c,0x3e,0x41,0x43,0x46,0x49,0x4b,0x4e,0x51,0x53,0x56,0x59,0x5c,0x5f,0x62,0x65,0x68,0x6c,0x6f,0x72,0x75,0x78,0x7b,0x7f,0x82,0x86,0x89,0x8d,0x91,0x94,0x98,0x9b,0x9f,0xa2,0xa6,0xa9,0xad,0xb0,0xb4,0xb7,0xbb,0xbe,0xc2,0xc5,0xc8,0xcc,0xcf,0xd2,0xd5,0xd8,0xda,0xdd,0xdf,0xe1,0xe2,0xe4,0xe5,0xe6,0xe6,0xe6,0xe6,0xe6,0xe5,0xe4,0xe2,0xe1,0xdf,0xdd,0xda,0xd8,0xd5,0xd2,0xcf,0xcc,0xc8,0xc5,0xc2,0xbe,0xbb,0xb7,0xb4,0xb0,0xad,0xa9,0xa6,0xa2,0x9f,0x9b,0x98,0x94,0x91,0x8d,0x89,0x86,0x82,0x7f,0x7b,0x78,0x75,0x72,0x6f,0x6c,0x68,0x65,0x62,0x5f,0x5c,0x59,0x56,0x53,0x51,0x4e,0x4b,0x49,0x46,0x43,0x41,0x3e,0x3c,0x3a,0x37,0x35,0x33,0x31,0x2e,0x2c,0x2a,0x28,0x26,0x24,0x22,0x21,0x1f,0x1d,0x1c,0x1a,0x18,0x17,0x15,0x14,0x13,0x11,0x10,0x0e,0x0d,0x0b,0x0a,0x09,0x08,0x07,0x06,0x05,0x04,0x03,0x02,0x01,0x01,0x01,0x00, +0x00,0x00,0x01,0x01,0x02,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0d,0x0e,0x10,0x11,0x13,0x14,0x16,0x17,0x19,0x1a,0x1c,0x1e,0x1f,0x21,0x23,0x25,0x27,0x28,0x2a,0x2c,0x2f,0x31,0x33,0x35,0x38,0x3a,0x3d,0x3f,0x41,0x44,0x46,0x49,0x4c,0x4e,0x51,0x54,0x57,0x5a,0x5d,0x60,0x63,0x66,0x69,0x6c,0x70,0x73,0x76,0x79,0x7c,0x80,0x83,0x87,0x8a,0x8e,0x92,0x96,0x99,0x9d,0xa0,0xa4,0xa7,0xab,0xae,0xb2,0xb5,0xb9,0xbd,0xc0,0xc4,0xc7,0xca,0xce,0xd1,0xd5,0xd8,0xdb,0xdd,0xe0,0xe2,0xe4,0xe6,0xe7,0xe8,0xe9,0xe9,0xea,0xe9,0xe9,0xe8,0xe7,0xe6,0xe4,0xe2,0xe0,0xdd,0xdb,0xd8,0xd5,0xd1,0xce,0xca,0xc7,0xc4,0xc0,0xbd,0xb9,0xb5,0xb2,0xae,0xab,0xa7,0xa4,0xa0,0x9d,0x99,0x96,0x92,0x8e,0x8a,0x87,0x83,0x80,0x7c,0x79,0x76,0x73,0x70,0x6c,0x69,0x66,0x63,0x60,0x5d,0x5a,0x57,0x54,0x51,0x4e,0x4c,0x49,0x46,0x44,0x41,0x3f,0x3d,0x3a,0x38,0x35,0x33,0x31,0x2f,0x2c,0x2a,0x28,0x27,0x25,0x23,0x21,0x1f,0x1e,0x1c,0x1a,0x19,0x17,0x16,0x14,0x13,0x11,0x10,0x0e,0x0d,0x0b,0x0a,0x09,0x08,0x07,0x06,0x05,0x04,0x03,0x02,0x02,0x01,0x01,0x00, +0x00,0x00,0x01,0x01,0x02,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0d,0x0e,0x10,0x11,0x13,0x14,0x16,0x17,0x19,0x1a,0x1c,0x1e,0x1f,0x21,0x23,0x25,0x27,0x29,0x2b,0x2d,0x2f,0x32,0x34,0x36,0x38,0x3a,0x3d,0x3f,0x42,0x44,0x47,0x4a,0x4c,0x4f,0x52,0x54,0x58,0x5b,0x5e,0x61,0x64,0x67,0x6a,0x6d,0x70,0x73,0x77,0x7a,0x7d,0x81,0x84,0x88,0x8c,0x8f,0x93,0x97,0x9a,0x9e,0xa2,0xa5,0xa9,0xac,0xb0,0xb3,0xb7,0xbb,0xbe,0xc2,0xc6,0xc9,0xcc,0xd0,0xd4,0xd7,0xda,0xdd,0xe0,0xe3,0xe5,0xe7,0xe9,0xea,0xeb,0xec,0xed,0xed,0xed,0xec,0xeb,0xea,0xe9,0xe7,0xe5,0xe3,0xe0,0xdd,0xda,0xd7,0xd4,0xd0,0xcc,0xc9,0xc6,0xc2,0xbe,0xbb,0xb7,0xb3,0xb0,0xac,0xa9,0xa5,0xa2,0x9e,0x9a,0x97,0x93,0x8f,0x8c,0x88,0x84,0x81,0x7d,0x7a,0x77,0x73,0x70,0x6d,0x6a,0x67,0x64,0x61,0x5e,0x5b,0x58,0x54,0x52,0x4f,0x4c,0x4a,0x47,0x44,0x42,0x3f,0x3d,0x3a,0x38,0x36,0x34,0x32,0x2f,0x2d,0x2b,0x29,0x27,0x25,0x23,0x21,0x1f,0x1e,0x1c,0x1a,0x19,0x17,0x16,0x14,0x13,0x11,0x10,0x0e,0x0d,0x0b,0x0a,0x09,0x08,0x07,0x06,0x05,0x04,0x03,0x02,0x02,0x01,0x01,0x00, +0x00,0x00,0x01,0x01,0x02,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0d,0x0e,0x10,0x11,0x13,0x14,0x16,0x17,0x19,0x1a,0x1c,0x1e,0x1f,0x21,0x23,0x25,0x27,0x29,0x2b,0x2d,0x30,0x32,0x34,0x36,0x38,0x3b,0x3d,0x40,0x42,0x45,0x47,0x4a,0x4d,0x4f,0x52,0x55,0x58,0x5b,0x5e,0x61,0x64,0x67,0x6b,0x6e,0x71,0x74,0x77,0x7b,0x7e,0x82,0x85,0x89,0x8c,0x90,0x94,0x98,0x9b,0x9f,0xa3,0xa6,0xaa,0xad,0xb1,0xb5,0xb9,0xbc,0xc0,0xc3,0xc7,0xcb,0xcf,0xd3,0xd6,0xda,0xdd,0xe0,0xe2,0xe5,0xe8,0xea,0xec,0xed,0xef,0xf0,0xf0,0xf0,0xf0,0xf0,0xef,0xed,0xec,0xea,0xe8,0xe5,0xe2,0xe0,0xdd,0xda,0xd6,0xd3,0xcf,0xcb,0xc7,0xc3,0xc0,0xbc,0xb9,0xb5,0xb1,0xad,0xaa,0xa6,0xa3,0x9f,0x9b,0x98,0x94,0x90,0x8c,0x89,0x85,0x82,0x7e,0x7b,0x77,0x74,0x71,0x6e,0x6b,0x67,0x64,0x61,0x5e,0x5b,0x58,0x55,0x52,0x4f,0x4d,0x4a,0x47,0x45,0x42,0x40,0x3d,0x3b,0x38,0x36,0x34,0x32,0x30,0x2d,0x2b,0x29,0x27,0x25,0x23,0x21,0x1f,0x1e,0x1c,0x1a,0x19,0x17,0x16,0x14,0x13,0x11,0x10,0x0e,0x0d,0x0b,0x0a,0x09,0x08,0x07,0x06,0x05,0x04,0x03,0x02,0x02,0x01,0x01,0x00, +0x00,0x00,0x01,0x01,0x02,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0c,0x0d,0x0f,0x10,0x11,0x13,0x14,0x16,0x17,0x19,0x1a,0x1c,0x1e,0x1f,0x21,0x23,0x25,0x27,0x29,0x2b,0x2d,0x30,0x32,0x35,0x37,0x39,0x3b,0x3e,0x40,0x43,0x45,0x48,0x4a,0x4d,0x50,0x52,0x55,0x59,0x5c,0x5f,0x62,0x65,0x68,0x6b,0x6e,0x71,0x75,0x78,0x7b,0x7f,0x82,0x86,0x8a,0x8d,0x91,0x95,0x99,0x9c,0xa0,0xa4,0xa7,0xab,0xaf,0xb3,0xb6,0xba,0xbe,0xc1,0xc5,0xc9,0xcd,0xd1,0xd5,0xd8,0xdc,0xdf,0xe2,0xe5,0xe8,0xea,0xec,0xef,0xf0,0xf2,0xf3,0xf3,0xf3,0xf3,0xf3,0xf2,0xf0,0xef,0xec,0xea,0xe8,0xe5,0xe2,0xdf,0xdc,0xd8,0xd5,0xd1,0xcd,0xc9,0xc5,0xc1,0xbe,0xba,0xb6,0xb3,0xaf,0xab,0xa7,0xa4,0xa0,0x9c,0x99,0x95,0x91,0x8d,0x8a,0x86,0x82,0x7f,0x7b,0x78,0x75,0x71,0x6e,0x6b,0x68,0x65,0x62,0x5f,0x5c,0x59,0x55,0x52,0x50,0x4d,0x4a,0x48,0x45,0x43,0x40,0x3e,0x3b,0x39,0x37,0x35,0x32,0x30,0x2d,0x2b,0x29,0x27,0x25,0x23,0x21,0x1f,0x1e,0x1c,0x1a,0x19,0x17,0x16,0x14,0x13,0x11,0x10,0x0f,0x0d,0x0c,0x0a,0x09,0x08,0x07,0x06,0x05,0x04,0x03,0x02,0x02,0x01,0x01,0x00, +0x00,0x00,0x01,0x01,0x02,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0c,0x0d,0x0f,0x10,0x11,0x13,0x14,0x16,0x17,0x19,0x1a,0x1c,0x1e,0x20,0x21,0x23,0x25,0x27,0x29,0x2b,0x2d,0x30,0x32,0x35,0x37,0x39,0x3b,0x3e,0x40,0x43,0x45,0x48,0x4a,0x4d,0x50,0x53,0x56,0x59,0x5c,0x5f,0x62,0x65,0x68,0x6c,0x6f,0x72,0x75,0x78,0x7c,0x80,0x83,0x87,0x8a,0x8e,0x92,0x95,0x99,0x9d,0xa1,0xa5,0xa8,0xac,0xb0,0xb4,0xb7,0xbb,0xbf,0xc3,0xc6,0xca,0xce,0xd2,0xd6,0xda,0xde,0xe1,0xe4,0xe7,0xea,0xec,0xef,0xf1,0xf3,0xf4,0xf5,0xf6,0xf6,0xf6,0xf5,0xf4,0xf3,0xf1,0xef,0xec,0xea,0xe7,0xe4,0xe1,0xde,0xda,0xd6,0xd2,0xce,0xca,0xc6,0xc3,0xbf,0xbb,0xb7,0xb4,0xb0,0xac,0xa8,0xa5,0xa1,0x9d,0x99,0x95,0x92,0x8e,0x8a,0x87,0x83,0x80,0x7c,0x78,0x75,0x72,0x6f,0x6c,0x68,0x65,0x62,0x5f,0x5c,0x59,0x56,0x53,0x50,0x4d,0x4a,0x48,0x45,0x43,0x40,0x3e,0x3b,0x39,0x37,0x35,0x32,0x30,0x2d,0x2b,0x29,0x27,0x25,0x23,0x21,0x20,0x1e,0x1c,0x1a,0x19,0x17,0x16,0x14,0x13,0x11,0x10,0x0f,0x0d,0x0c,0x0a,0x09,0x08,0x07,0x06,0x05,0x04,0x03,0x02,0x02,0x01,0x01,0x00, +0x00,0x00,0x01,0x01,0x02,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0c,0x0d,0x0f,0x10,0x12,0x13,0x14,0x16,0x17,0x19,0x1b,0x1c,0x1e,0x20,0x22,0x23,0x25,0x27,0x29,0x2b,0x2d,0x30,0x32,0x35,0x37,0x39,0x3c,0x3e,0x41,0x43,0x46,0x48,0x4b,0x4e,0x50,0x53,0x56,0x59,0x5c,0x5f,0x63,0x66,0x69,0x6c,0x6f,0x72,0x76,0x79,0x7c,0x80,0x83,0x87,0x8b,0x8f,0x93,0x96,0x9a,0x9e,0xa1,0xa5,0xa9,0xad,0xb1,0xb5,0xb8,0xbc,0xc0,0xc4,0xc8,0xcc,0xd0,0xd4,0xd8,0xdb,0xdf,0xe2,0xe5,0xe9,0xec,0xee,0xf1,0xf3,0xf5,0xf7,0xf8,0xf9,0xf9,0xf9,0xf8,0xf7,0xf5,0xf3,0xf1,0xee,0xec,0xe9,0xe5,0xe2,0xdf,0xdb,0xd8,0xd4,0xd0,0xcc,0xc8,0xc4,0xc0,0xbc,0xb8,0xb5,0xb1,0xad,0xa9,0xa5,0xa1,0x9e,0x9a,0x96,0x93,0x8f,0x8b,0x87,0x83,0x80,0x7c,0x79,0x76,0x72,0x6f,0x6c,0x69,0x66,0x63,0x5f,0x5c,0x59,0x56,0x53,0x50,0x4e,0x4b,0x48,0x46,0x43,0x41,0x3e,0x3c,0x39,0x37,0x35,0x32,0x30,0x2d,0x2b,0x29,0x27,0x25,0x23,0x22,0x20,0x1e,0x1c,0x1b,0x19,0x17,0x16,0x14,0x13,0x12,0x10,0x0f,0x0d,0x0c,0x0a,0x09,0x08,0x07,0x06,0x05,0x04,0x03,0x02,0x02,0x01,0x01,0x00, +0x00,0x00,0x01,0x01,0x02,0x02,0x03,0x04,0x05,0x06,0x07,0x09,0x0a,0x0b,0x0c,0x0d,0x0f,0x10,0x12,0x13,0x15,0x16,0x18,0x19,0x1b,0x1c,0x1e,0x20,0x22,0x24,0x25,0x27,0x29,0x2b,0x2e,0x30,0x32,0x35,0x37,0x3a,0x3c,0x3e,0x41,0x43,0x46,0x48,0x4b,0x4e,0x51,0x53,0x56,0x5a,0x5d,0x60,0x63,0x66,0x69,0x6c,0x70,0x73,0x76,0x79,0x7d,0x80,0x84,0x87,0x8b,0x8f,0x93,0x96,0x9a,0x9e,0xa2,0xa6,0xaa,0xad,0xb1,0xb5,0xb9,0xbd,0xc1,0xc5,0xc9,0xcd,0xd1,0xd5,0xd9,0xdd,0xe0,0xe4,0xe7,0xea,0xed,0xf0,0xf3,0xf5,0xf7,0xf9,0xfa,0xfb,0xfb,0xfb,0xfa,0xf9,0xf7,0xf5,0xf3,0xf0,0xed,0xea,0xe7,0xe4,0xe0,0xdd,0xd9,0xd5,0xd1,0xcd,0xc9,0xc5,0xc1,0xbd,0xb9,0xb5,0xb1,0xad,0xaa,0xa6,0xa2,0x9e,0x9a,0x96,0x93,0x8f,0x8b,0x87,0x84,0x80,0x7d,0x79,0x76,0x73,0x70,0x6c,0x69,0x66,0x63,0x60,0x5d,0x5a,0x56,0x53,0x51,0x4e,0x4b,0x48,0x46,0x43,0x41,0x3e,0x3c,0x3a,0x37,0x35,0x32,0x30,0x2e,0x2b,0x29,0x27,0x25,0x24,0x22,0x20,0x1e,0x1c,0x1b,0x19,0x18,0x16,0x15,0x13,0x12,0x10,0x0f,0x0d,0x0c,0x0b,0x0a,0x09,0x07,0x06,0x05,0x04,0x03,0x02,0x02,0x01,0x01,0x00, +0x00,0x00,0x01,0x01,0x02,0x02,0x03,0x04,0x05,0x06,0x07,0x09,0x0a,0x0b,0x0c,0x0d,0x0f,0x10,0x12,0x13,0x15,0x16,0x18,0x19,0x1b,0x1d,0x1e,0x20,0x22,0x24,0x26,0x27,0x29,0x2b,0x2e,0x30,0x32,0x35,0x37,0x3a,0x3c,0x3e,0x41,0x43,0x46,0x49,0x4b,0x4e,0x51,0x54,0x57,0x5a,0x5d,0x60,0x63,0x66,0x69,0x6d,0x70,0x73,0x76,0x7a,0x7d,0x81,0x84,0x88,0x8c,0x90,0x94,0x97,0x9b,0x9f,0xa2,0xa6,0xaa,0xae,0xb2,0xb6,0xba,0xbe,0xc2,0xc5,0xc9,0xcd,0xd2,0xd6,0xda,0xde,0xe1,0xe5,0xe8,0xeb,0xee,0xf1,0xf4,0xf7,0xf9,0xfa,0xfc,0xfc,0xfd,0xfc,0xfc,0xfa,0xf9,0xf7,0xf4,0xf1,0xee,0xeb,0xe8,0xe5,0xe1,0xde,0xda,0xd6,0xd2,0xcd,0xc9,0xc5,0xc2,0xbe,0xba,0xb6,0xb2,0xae,0xaa,0xa6,0xa2,0x9f,0x9b,0x97,0x94,0x90,0x8c,0x88,0x84,0x81,0x7d,0x7a,0x76,0x73,0x70,0x6d,0x69,0x66,0x63,0x60,0x5d,0x5a,0x57,0x54,0x51,0x4e,0x4b,0x49,0x46,0x43,0x41,0x3e,0x3c,0x3a,0x37,0x35,0x32,0x30,0x2e,0x2b,0x29,0x27,0x26,0x24,0x22,0x20,0x1e,0x1d,0x1b,0x19,0x18,0x16,0x15,0x13,0x12,0x10,0x0f,0x0d,0x0c,0x0b,0x0a,0x09,0x07,0x06,0x05,0x04,0x03,0x02,0x02,0x01,0x01,0x00, +0x00,0x00,0x01,0x01,0x02,0x02,0x03,0x04,0x05,0x06,0x07,0x09,0x0a,0x0b,0x0c,0x0e,0x0f,0x11,0x12,0x13,0x15,0x16,0x18,0x19,0x1b,0x1d,0x1e,0x20,0x22,0x24,0x26,0x28,0x2a,0x2c,0x2e,0x30,0x33,0x35,0x37,0x3a,0x3c,0x3f,0x41,0x44,0x46,0x49,0x4b,0x4e,0x51,0x54,0x57,0x5a,0x5d,0x60,0x63,0x66,0x6a,0x6d,0x70,0x73,0x77,0x7a,0x7e,0x81,0x85,0x88,0x8c,0x90,0x94,0x97,0x9b,0x9f,0xa3,0xa7,0xab,0xae,0xb2,0xb6,0xba,0xbe,0xc2,0xc6,0xca,0xce,0xd2,0xd6,0xda,0xde,0xe2,0xe6,0xe9,0xec,0xef,0xf2,0xf5,0xf8,0xfa,0xfc,0xfd,0xfe,0xfe,0xfe,0xfd,0xfc,0xfa,0xf8,0xf5,0xf2,0xef,0xec,0xe9,0xe6,0xe2,0xde,0xda,0xd6,0xd2,0xce,0xca,0xc6,0xc2,0xbe,0xba,0xb6,0xb2,0xae,0xab,0xa7,0xa3,0x9f,0x9b,0x97,0x94,0x90,0x8c,0x88,0x85,0x81,0x7e,0x7a,0x77,0x73,0x70,0x6d,0x6a,0x66,0x63,0x60,0x5d,0x5a,0x57,0x54,0x51,0x4e,0x4b,0x49,0x46,0x44,0x41,0x3f,0x3c,0x3a,0x37,0x35,0x33,0x30,0x2e,0x2c,0x2a,0x28,0x26,0x24,0x22,0x20,0x1e,0x1d,0x1b,0x19,0x18,0x16,0x15,0x13,0x12,0x11,0x0f,0x0e,0x0c,0x0b,0x0a,0x09,0x07,0x06,0x05,0x04,0x03,0x02,0x02,0x01,0x01,0x00, +0x00,0x00,0x01,0x01,0x02,0x02,0x03,0x04,0x05,0x06,0x07,0x09,0x0a,0x0b,0x0c,0x0e,0x0f,0x11,0x12,0x13,0x15,0x16,0x18,0x19,0x1b,0x1d,0x1e,0x20,0x22,0x24,0x26,0x28,0x2a,0x2c,0x2e,0x31,0x33,0x35,0x37,0x3a,0x3c,0x3f,0x41,0x44,0x46,0x49,0x4c,0x4e,0x51,0x54,0x57,0x5a,0x5d,0x60,0x63,0x66,0x6a,0x6d,0x70,0x73,0x77,0x7a,0x7e,0x81,0x85,0x88,0x8c,0x90,0x94,0x97,0x9b,0x9f,0xa3,0xa7,0xab,0xaf,0xb3,0xb6,0xba,0xbe,0xc2,0xc6,0xca,0xce,0xd3,0xd7,0xdb,0xdf,0xe2,0xe6,0xe9,0xed,0xf0,0xf3,0xf6,0xf9,0xfb,0xfc,0xfd,0xfe,0xfe,0xfe,0xfd,0xfc,0xfb,0xf9,0xf6,0xf3,0xf0,0xed,0xe9,0xe6,0xe2,0xdf,0xdb,0xd7,0xd3,0xce,0xca,0xc6,0xc2,0xbe,0xba,0xb6,0xb3,0xaf,0xab,0xa7,0xa3,0x9f,0x9b,0x97,0x94,0x90,0x8c,0x88,0x85,0x81,0x7e,0x7a,0x77,0x73,0x70,0x6d,0x6a,0x66,0x63,0x60,0x5d,0x5a,0x57,0x54,0x51,0x4e,0x4c,0x49,0x46,0x44,0x41,0x3f,0x3c,0x3a,0x37,0x35,0x33,0x31,0x2e,0x2c,0x2a,0x28,0x26,0x24,0x22,0x20,0x1e,0x1d,0x1b,0x19,0x18,0x16,0x15,0x13,0x12,0x11,0x0f,0x0e,0x0c,0x0b,0x0a,0x09,0x07,0x06,0x05,0x04,0x03,0x02,0x02,0x01,0x01,0x00, +0x00,0x00,0x01,0x01,0x02,0x02,0x03,0x04,0x05,0x06,0x07,0x09,0x0a,0x0b,0x0c,0x0e,0x0f,0x11,0x12,0x13,0x15,0x16,0x18,0x19,0x1b,0x1d,0x1e,0x20,0x22,0x24,0x26,0x28,0x2a,0x2c,0x2e,0x31,0x33,0x35,0x37,0x3a,0x3c,0x3f,0x41,0x44,0x46,0x49,0x4c,0x4e,0x51,0x54,0x57,0x5a,0x5d,0x60,0x63,0x66,0x6a,0x6d,0x70,0x73,0x77,0x7a,0x7e,0x81,0x85,0x88,0x8c,0x90,0x94,0x97,0x9b,0x9f,0xa3,0xa7,0xab,0xaf,0xb3,0xb7,0xba,0xbe,0xc2,0xc6,0xca,0xce,0xd3,0xd7,0xdb,0xdf,0xe3,0xe6,0xea,0xed,0xf0,0xf3,0xf6,0xf9,0xfb,0xfd,0xfe,0xfe,0xff,0xfe,0xfe,0xfd,0xfb,0xf9,0xf6,0xf3,0xf0,0xed,0xea,0xe6,0xe3,0xdf,0xdb,0xd7,0xd3,0xce,0xca,0xc6,0xc2,0xbe,0xba,0xb7,0xb3,0xaf,0xab,0xa7,0xa3,0x9f,0x9b,0x97,0x94,0x90,0x8c,0x88,0x85,0x81,0x7e,0x7a,0x77,0x73,0x70,0x6d,0x6a,0x66,0x63,0x60,0x5d,0x5a,0x57,0x54,0x51,0x4e,0x4c,0x49,0x46,0x44,0x41,0x3f,0x3c,0x3a,0x37,0x35,0x33,0x31,0x2e,0x2c,0x2a,0x28,0x26,0x24,0x22,0x20,0x1e,0x1d,0x1b,0x19,0x18,0x16,0x15,0x13,0x12,0x11,0x0f,0x0e,0x0c,0x0b,0x0a,0x09,0x07,0x06,0x05,0x04,0x03,0x02,0x02,0x01,0x01,0x00, +0x00,0x00,0x01,0x01,0x02,0x02,0x03,0x04,0x05,0x06,0x07,0x09,0x0a,0x0b,0x0c,0x0e,0x0f,0x11,0x12,0x13,0x15,0x16,0x18,0x19,0x1b,0x1d,0x1e,0x20,0x22,0x24,0x26,0x28,0x2a,0x2c,0x2e,0x31,0x33,0x35,0x37,0x3a,0x3c,0x3f,0x41,0x44,0x46,0x49,0x4c,0x4e,0x51,0x54,0x57,0x5a,0x5d,0x60,0x63,0x66,0x6a,0x6d,0x70,0x73,0x77,0x7a,0x7e,0x81,0x85,0x88,0x8c,0x90,0x94,0x97,0x9b,0x9f,0xa3,0xa7,0xab,0xaf,0xb3,0xb6,0xba,0xbe,0xc2,0xc6,0xca,0xce,0xd3,0xd7,0xdb,0xdf,0xe2,0xe6,0xe9,0xed,0xf0,0xf3,0xf6,0xf9,0xfb,0xfc,0xfd,0xfe,0xfe,0xfe,0xfd,0xfc,0xfb,0xf9,0xf6,0xf3,0xf0,0xed,0xe9,0xe6,0xe2,0xdf,0xdb,0xd7,0xd3,0xce,0xca,0xc6,0xc2,0xbe,0xba,0xb6,0xb3,0xaf,0xab,0xa7,0xa3,0x9f,0x9b,0x97,0x94,0x90,0x8c,0x88,0x85,0x81,0x7e,0x7a,0x77,0x73,0x70,0x6d,0x6a,0x66,0x63,0x60,0x5d,0x5a,0x57,0x54,0x51,0x4e,0x4c,0x49,0x46,0x44,0x41,0x3f,0x3c,0x3a,0x37,0x35,0x33,0x31,0x2e,0x2c,0x2a,0x28,0x26,0x24,0x22,0x20,0x1e,0x1d,0x1b,0x19,0x18,0x16,0x15,0x13,0x12,0x11,0x0f,0x0e,0x0c,0x0b,0x0a,0x09,0x07,0x06,0x05,0x04,0x03,0x02,0x02,0x01,0x01,0x00, +0x00,0x00,0x01,0x01,0x02,0x02,0x03,0x04,0x05,0x06,0x07,0x09,0x0a,0x0b,0x0c,0x0e,0x0f,0x11,0x12,0x13,0x15,0x16,0x18,0x19,0x1b,0x1d,0x1e,0x20,0x22,0x24,0x26,0x28,0x2a,0x2c,0x2e,0x30,0x33,0x35,0x37,0x3a,0x3c,0x3f,0x41,0x44,0x46,0x49,0x4b,0x4e,0x51,0x54,0x57,0x5a,0x5d,0x60,0x63,0x66,0x6a,0x6d,0x70,0x73,0x77,0x7a,0x7e,0x81,0x85,0x88,0x8c,0x90,0x94,0x97,0x9b,0x9f,0xa3,0xa7,0xab,0xae,0xb2,0xb6,0xba,0xbe,0xc2,0xc6,0xca,0xce,0xd2,0xd6,0xda,0xde,0xe2,0xe6,0xe9,0xec,0xef,0xf2,0xf5,0xf8,0xfa,0xfc,0xfd,0xfe,0xfe,0xfe,0xfd,0xfc,0xfa,0xf8,0xf5,0xf2,0xef,0xec,0xe9,0xe6,0xe2,0xde,0xda,0xd6,0xd2,0xce,0xca,0xc6,0xc2,0xbe,0xba,0xb6,0xb2,0xae,0xab,0xa7,0xa3,0x9f,0x9b,0x97,0x94,0x90,0x8c,0x88,0x85,0x81,0x7e,0x7a,0x77,0x73,0x70,0x6d,0x6a,0x66,0x63,0x60,0x5d,0x5a,0x57,0x54,0x51,0x4e,0x4b,0x49,0x46,0x44,0x41,0x3f,0x3c,0x3a,0x37,0x35,0x33,0x30,0x2e,0x2c,0x2a,0x28,0x26,0x24,0x22,0x20,0x1e,0x1d,0x1b,0x19,0x18,0x16,0x15,0x13,0x12,0x11,0x0f,0x0e,0x0c,0x0b,0x0a,0x09,0x07,0x06,0x05,0x04,0x03,0x02,0x02,0x01,0x01,0x00, +0x00,0x00,0x01,0x01,0x02,0x02,0x03,0x04,0x05,0x06,0x07,0x09,0x0a,0x0b,0x0c,0x0d,0x0f,0x10,0x12,0x13,0x15,0x16,0x18,0x19,0x1b,0x1d,0x1e,0x20,0x22,0x24,0x26,0x27,0x29,0x2b,0x2e,0x30,0x32,0x35,0x37,0x3a,0x3c,0x3e,0x41,0x43,0x46,0x49,0x4b,0x4e,0x51,0x54,0x57,0x5a,0x5d,0x60,0x63,0x66,0x69,0x6d,0x70,0x73,0x76,0x7a,0x7d,0x81,0x84,0x88,0x8c,0x90,0x94,0x97,0x9b,0x9f,0xa2,0xa6,0xaa,0xae,0xb2,0xb6,0xba,0xbe,0xc2,0xc5,0xc9,0xcd,0xd2,0xd6,0xda,0xde,0xe1,0xe5,0xe8,0xeb,0xee,0xf1,0xf4,0xf7,0xf9,0xfa,0xfc,0xfc,0xfd,0xfc,0xfc,0xfa,0xf9,0xf7,0xf4,0xf1,0xee,0xeb,0xe8,0xe5,0xe1,0xde,0xda,0xd6,0xd2,0xcd,0xc9,0xc5,0xc2,0xbe,0xba,0xb6,0xb2,0xae,0xaa,0xa6,0xa2,0x9f,0x9b,0x97,0x94,0x90,0x8c,0x88,0x84,0x81,0x7d,0x7a,0x76,0x73,0x70,0x6d,0x69,0x66,0x63,0x60,0x5d,0x5a,0x57,0x54,0x51,0x4e,0x4b,0x49,0x46,0x43,0x41,0x3e,0x3c,0x3a,0x37,0x35,0x32,0x30,0x2e,0x2b,0x29,0x27,0x26,0x24,0x22,0x20,0x1e,0x1d,0x1b,0x19,0x18,0x16,0x15,0x13,0x12,0x10,0x0f,0x0d,0x0c,0x0b,0x0a,0x09,0x07,0x06,0x05,0x04,0x03,0x02,0x02,0x01,0x01,0x00, +0x00,0x00,0x01,0x01,0x02,0x02,0x03,0x04,0x05,0x06,0x07,0x09,0x0a,0x0b,0x0c,0x0d,0x0f,0x10,0x12,0x13,0x15,0x16,0x18,0x19,0x1b,0x1c,0x1e,0x20,0x22,0x24,0x25,0x27,0x29,0x2b,0x2e,0x30,0x32,0x35,0x37,0x3a,0x3c,0x3e,0x41,0x43,0x46,0x48,0x4b,0x4e,0x51,0x53,0x56,0x5a,0x5d,0x60,0x63,0x66,0x69,0x6c,0x70,0x73,0x76,0x79,0x7d,0x80,0x84,0x87,0x8b,0x8f,0x93,0x96,0x9a,0x9e,0xa2,0xa6,0xaa,0xad,0xb1,0xb5,0xb9,0xbd,0xc1,0xc5,0xc9,0xcd,0xd1,0xd5,0xd9,0xdd,0xe0,0xe4,0xe7,0xea,0xed,0xf0,0xf3,0xf5,0xf7,0xf9,0xfa,0xfb,0xfb,0xfb,0xfa,0xf9,0xf7,0xf5,0xf3,0xf0,0xed,0xea,0xe7,0xe4,0xe0,0xdd,0xd9,0xd5,0xd1,0xcd,0xc9,0xc5,0xc1,0xbd,0xb9,0xb5,0xb1,0xad,0xaa,0xa6,0xa2,0x9e,0x9a,0x96,0x93,0x8f,0x8b,0x87,0x84,0x80,0x7d,0x79,0x76,0x73,0x70,0x6c,0x69,0x66,0x63,0x60,0x5d,0x5a,0x56,0x53,0x51,0x4e,0x4b,0x48,0x46,0x43,0x41,0x3e,0x3c,0x3a,0x37,0x35,0x32,0x30,0x2e,0x2b,0x29,0x27,0x25,0x24,0x22,0x20,0x1e,0x1c,0x1b,0x19,0x18,0x16,0x15,0x13,0x12,0x10,0x0f,0x0d,0x0c,0x0b,0x0a,0x09,0x07,0x06,0x05,0x04,0x03,0x02,0x02,0x01,0x01,0x00, +0x00,0x00,0x01,0x01,0x02,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0c,0x0d,0x0f,0x10,0x12,0x13,0x14,0x16,0x17,0x19,0x1b,0x1c,0x1e,0x20,0x22,0x23,0x25,0x27,0x29,0x2b,0x2d,0x30,0x32,0x35,0x37,0x39,0x3c,0x3e,0x41,0x43,0x46,0x48,0x4b,0x4e,0x50,0x53,0x56,0x59,0x5c,0x5f,0x63,0x66,0x69,0x6c,0x6f,0x72,0x76,0x79,0x7c,0x80,0x83,0x87,0x8b,0x8f,0x93,0x96,0x9a,0x9e,0xa1,0xa5,0xa9,0xad,0xb1,0xb5,0xb8,0xbc,0xc0,0xc4,0xc8,0xcc,0xd0,0xd4,0xd8,0xdb,0xdf,0xe2,0xe5,0xe9,0xec,0xee,0xf1,0xf3,0xf5,0xf7,0xf8,0xf9,0xf9,0xf9,0xf8,0xf7,0xf5,0xf3,0xf1,0xee,0xec,0xe9,0xe5,0xe2,0xdf,0xdb,0xd8,0xd4,0xd0,0xcc,0xc8,0xc4,0xc0,0xbc,0xb8,0xb5,0xb1,0xad,0xa9,0xa5,0xa1,0x9e,0x9a,0x96,0x93,0x8f,0x8b,0x87,0x83,0x80,0x7c,0x79,0x76,0x72,0x6f,0x6c,0x69,0x66,0x63,0x5f,0x5c,0x59,0x56,0x53,0x50,0x4e,0x4b,0x48,0x46,0x43,0x41,0x3e,0x3c,0x39,0x37,0x35,0x32,0x30,0x2d,0x2b,0x29,0x27,0x25,0x23,0x22,0x20,0x1e,0x1c,0x1b,0x19,0x17,0x16,0x14,0x13,0x12,0x10,0x0f,0x0d,0x0c,0x0a,0x09,0x08,0x07,0x06,0x05,0x04,0x03,0x02,0x02,0x01,0x01,0x00, +0x00,0x00,0x01,0x01,0x02,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0c,0x0d,0x0f,0x10,0x11,0x13,0x14,0x16,0x17,0x19,0x1a,0x1c,0x1e,0x20,0x21,0x23,0x25,0x27,0x29,0x2b,0x2d,0x30,0x32,0x35,0x37,0x39,0x3b,0x3e,0x40,0x43,0x45,0x48,0x4a,0x4d,0x50,0x53,0x56,0x59,0x5c,0x5f,0x62,0x65,0x68,0x6c,0x6f,0x72,0x75,0x78,0x7c,0x80,0x83,0x87,0x8a,0x8e,0x92,0x95,0x99,0x9d,0xa1,0xa5,0xa8,0xac,0xb0,0xb4,0xb7,0xbb,0xbf,0xc3,0xc6,0xca,0xce,0xd2,0xd6,0xda,0xde,0xe1,0xe4,0xe7,0xea,0xec,0xef,0xf1,0xf3,0xf4,0xf5,0xf6,0xf6,0xf6,0xf5,0xf4,0xf3,0xf1,0xef,0xec,0xea,0xe7,0xe4,0xe1,0xde,0xda,0xd6,0xd2,0xce,0xca,0xc6,0xc3,0xbf,0xbb,0xb7,0xb4,0xb0,0xac,0xa8,0xa5,0xa1,0x9d,0x99,0x95,0x92,0x8e,0x8a,0x87,0x83,0x80,0x7c,0x78,0x75,0x72,0x6f,0x6c,0x68,0x65,0x62,0x5f,0x5c,0x59,0x56,0x53,0x50,0x4d,0x4a,0x48,0x45,0x43,0x40,0x3e,0x3b,0x39,0x37,0x35,0x32,0x30,0x2d,0x2b,0x29,0x27,0x25,0x23,0x21,0x20,0x1e,0x1c,0x1a,0x19,0x17,0x16,0x14,0x13,0x11,0x10,0x0f,0x0d,0x0c,0x0a,0x09,0x08,0x07,0x06,0x05,0x04,0x03,0x02,0x02,0x01,0x01,0x00, +0x00,0x00,0x01,0x01,0x02,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0c,0x0d,0x0f,0x10,0x11,0x13,0x14,0x16,0x17,0x19,0x1a,0x1c,0x1e,0x1f,0x21,0x23,0x25,0x27,0x29,0x2b,0x2d,0x30,0x32,0x35,0x37,0x39,0x3b,0x3e,0x40,0x43,0x45,0x48,0x4a,0x4d,0x50,0x52,0x55,0x59,0x5c,0x5f,0x62,0x65,0x68,0x6b,0x6e,0x71,0x75,0x78,0x7b,0x7f,0x82,0x86,0x8a,0x8d,0x91,0x95,0x99,0x9c,0xa0,0xa4,0xa7,0xab,0xaf,0xb3,0xb6,0xba,0xbe,0xc1,0xc5,0xc9,0xcd,0xd1,0xd5,0xd8,0xdc,0xdf,0xe2,0xe5,0xe8,0xea,0xec,0xef,0xf0,0xf2,0xf3,0xf3,0xf3,0xf3,0xf3,0xf2,0xf0,0xef,0xec,0xea,0xe8,0xe5,0xe2,0xdf,0xdc,0xd8,0xd5,0xd1,0xcd,0xc9,0xc5,0xc1,0xbe,0xba,0xb6,0xb3,0xaf,0xab,0xa7,0xa4,0xa0,0x9c,0x99,0x95,0x91,0x8d,0x8a,0x86,0x82,0x7f,0x7b,0x78,0x75,0x71,0x6e,0x6b,0x68,0x65,0x62,0x5f,0x5c,0x59,0x55,0x52,0x50,0x4d,0x4a,0x48,0x45,0x43,0x40,0x3e,0x3b,0x39,0x37,0x35,0x32,0x30,0x2d,0x2b,0x29,0x27,0x25,0x23,0x21,0x1f,0x1e,0x1c,0x1a,0x19,0x17,0x16,0x14,0x13,0x11,0x10,0x0f,0x0d,0x0c,0x0a,0x09,0x08,0x07,0x06,0x05,0x04,0x03,0x02,0x02,0x01,0x01,0x00, +0x00,0x00,0x01,0x01,0x02,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0d,0x0e,0x10,0x11,0x13,0x14,0x16,0x17,0x19,0x1a,0x1c,0x1e,0x1f,0x21,0x23,0x25,0x27,0x29,0x2b,0x2d,0x30,0x32,0x34,0x36,0x38,0x3b,0x3d,0x40,0x42,0x45,0x47,0x4a,0x4d,0x4f,0x52,0x55,0x58,0x5b,0x5e,0x61,0x64,0x67,0x6b,0x6e,0x71,0x74,0x77,0x7b,0x7e,0x82,0x85,0x89,0x8c,0x90,0x94,0x98,0x9b,0x9f,0xa3,0xa6,0xaa,0xad,0xb1,0xb5,0xb9,0xbc,0xc0,0xc3,0xc7,0xcb,0xcf,0xd3,0xd6,0xda,0xdd,0xe0,0xe2,0xe5,0xe8,0xea,0xec,0xed,0xef,0xf0,0xf0,0xf0,0xf0,0xf0,0xef,0xed,0xec,0xea,0xe8,0xe5,0xe2,0xe0,0xdd,0xda,0xd6,0xd3,0xcf,0xcb,0xc7,0xc3,0xc0,0xbc,0xb9,0xb5,0xb1,0xad,0xaa,0xa6,0xa3,0x9f,0x9b,0x98,0x94,0x90,0x8c,0x89,0x85,0x82,0x7e,0x7b,0x77,0x74,0x71,0x6e,0x6b,0x67,0x64,0x61,0x5e,0x5b,0x58,0x55,0x52,0x4f,0x4d,0x4a,0x47,0x45,0x42,0x40,0x3d,0x3b,0x38,0x36,0x34,0x32,0x30,0x2d,0x2b,0x29,0x27,0x25,0x23,0x21,0x1f,0x1e,0x1c,0x1a,0x19,0x17,0x16,0x14,0x13,0x11,0x10,0x0e,0x0d,0x0b,0x0a,0x09,0x08,0x07,0x06,0x05,0x04,0x03,0x02,0x02,0x01,0x01,0x00, +0x00,0x00,0x01,0x01,0x02,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0d,0x0e,0x10,0x11,0x13,0x14,0x16,0x17,0x19,0x1a,0x1c,0x1e,0x1f,0x21,0x23,0x25,0x27,0x29,0x2b,0x2d,0x2f,0x32,0x34,0x36,0x38,0x3a,0x3d,0x3f,0x42,0x44,0x47,0x4a,0x4c,0x4f,0x52,0x54,0x58,0x5b,0x5e,0x61,0x64,0x67,0x6a,0x6d,0x70,0x73,0x77,0x7a,0x7d,0x81,0x84,0x88,0x8c,0x8f,0x93,0x97,0x9a,0x9e,0xa2,0xa5,0xa9,0xac,0xb0,0xb3,0xb7,0xbb,0xbe,0xc2,0xc6,0xc9,0xcc,0xd0,0xd4,0xd7,0xda,0xdd,0xe0,0xe3,0xe5,0xe7,0xe9,0xea,0xeb,0xec,0xed,0xed,0xed,0xec,0xeb,0xea,0xe9,0xe7,0xe5,0xe3,0xe0,0xdd,0xda,0xd7,0xd4,0xd0,0xcc,0xc9,0xc6,0xc2,0xbe,0xbb,0xb7,0xb3,0xb0,0xac,0xa9,0xa5,0xa2,0x9e,0x9a,0x97,0x93,0x8f,0x8c,0x88,0x84,0x81,0x7d,0x7a,0x77,0x73,0x70,0x6d,0x6a,0x67,0x64,0x61,0x5e,0x5b,0x58,0x54,0x52,0x4f,0x4c,0x4a,0x47,0x44,0x42,0x3f,0x3d,0x3a,0x38,0x36,0x34,0x32,0x2f,0x2d,0x2b,0x29,0x27,0x25,0x23,0x21,0x1f,0x1e,0x1c,0x1a,0x19,0x17,0x16,0x14,0x13,0x11,0x10,0x0e,0x0d,0x0b,0x0a,0x09,0x08,0x07,0x06,0x05,0x04,0x03,0x02,0x02,0x01,0x01,0x00, +0x00,0x00,0x01,0x01,0x02,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0d,0x0e,0x10,0x11,0x13,0x14,0x16,0x17,0x19,0x1a,0x1c,0x1e,0x1f,0x21,0x23,0x25,0x27,0x28,0x2a,0x2c,0x2f,0x31,0x33,0x35,0x38,0x3a,0x3d,0x3f,0x41,0x44,0x46,0x49,0x4c,0x4e,0x51,0x54,0x57,0x5a,0x5d,0x60,0x63,0x66,0x69,0x6c,0x70,0x73,0x76,0x79,0x7c,0x80,0x83,0x87,0x8a,0x8e,0x92,0x96,0x99,0x9d,0xa0,0xa4,0xa7,0xab,0xae,0xb2,0xb5,0xb9,0xbd,0xc0,0xc4,0xc7,0xca,0xce,0xd1,0xd5,0xd8,0xdb,0xdd,0xe0,0xe2,0xe4,0xe6,0xe7,0xe8,0xe9,0xe9,0xea,0xe9,0xe9,0xe8,0xe7,0xe6,0xe4,0xe2,0xe0,0xdd,0xdb,0xd8,0xd5,0xd1,0xce,0xca,0xc7,0xc4,0xc0,0xbd,0xb9,0xb5,0xb2,0xae,0xab,0xa7,0xa4,0xa0,0x9d,0x99,0x96,0x92,0x8e,0x8a,0x87,0x83,0x80,0x7c,0x79,0x76,0x73,0x70,0x6c,0x69,0x66,0x63,0x60,0x5d,0x5a,0x57,0x54,0x51,0x4e,0x4c,0x49,0x46,0x44,0x41,0x3f,0x3d,0x3a,0x38,0x35,0x33,0x31,0x2f,0x2c,0x2a,0x28,0x27,0x25,0x23,0x21,0x1f,0x1e,0x1c,0x1a,0x19,0x17,0x16,0x14,0x13,0x11,0x10,0x0e,0x0d,0x0b,0x0a,0x09,0x08,0x07,0x06,0x05,0x04,0x03,0x02,0x02,0x01,0x01,0x00, +0x00,0x00,0x01,0x01,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0d,0x0e,0x10,0x11,0x13,0x14,0x15,0x17,0x18,0x1a,0x1c,0x1d,0x1f,0x21,0x22,0x24,0x26,0x28,0x2a,0x2c,0x2e,0x31,0x33,0x35,0x37,0x3a,0x3c,0x3e,0x41,0x43,0x46,0x49,0x4b,0x4e,0x51,0x53,0x56,0x59,0x5c,0x5f,0x62,0x65,0x68,0x6c,0x6f,0x72,0x75,0x78,0x7b,0x7f,0x82,0x86,0x89,0x8d,0x91,0x94,0x98,0x9b,0x9f,0xa2,0xa6,0xa9,0xad,0xb0,0xb4,0xb7,0xbb,0xbe,0xc2,0xc5,0xc8,0xcc,0xcf,0xd2,0xd5,0xd8,0xda,0xdd,0xdf,0xe1,0xe2,0xe4,0xe5,0xe6,0xe6,0xe6,0xe6,0xe6,0xe5,0xe4,0xe2,0xe1,0xdf,0xdd,0xda,0xd8,0xd5,0xd2,0xcf,0xcc,0xc8,0xc5,0xc2,0xbe,0xbb,0xb7,0xb4,0xb0,0xad,0xa9,0xa6,0xa2,0x9f,0x9b,0x98,0x94,0x91,0x8d,0x89,0x86,0x82,0x7f,0x7b,0x78,0x75,0x72,0x6f,0x6c,0x68,0x65,0x62,0x5f,0x5c,0x59,0x56,0x53,0x51,0x4e,0x4b,0x49,0x46,0x43,0x41,0x3e,0x3c,0x3a,0x37,0x35,0x33,0x31,0x2e,0x2c,0x2a,0x28,0x26,0x24,0x22,0x21,0x1f,0x1d,0x1c,0x1a,0x18,0x17,0x15,0x14,0x13,0x11,0x10,0x0e,0x0d,0x0b,0x0a,0x09,0x08,0x07,0x06,0x05,0x04,0x03,0x02,0x01,0x01,0x01,0x00, +0x00,0x00,0x00,0x01,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0e,0x0f,0x11,0x12,0x14,0x15,0x17,0x18,0x1a,0x1b,0x1d,0x1e,0x20,0x22,0x24,0x26,0x27,0x29,0x2b,0x2e,0x30,0x32,0x35,0x37,0x39,0x3c,0x3e,0x40,0x43,0x45,0x48,0x4a,0x4d,0x50,0x53,0x56,0x59,0x5c,0x5f,0x62,0x65,0x68,0x6b,0x6e,0x71,0x74,0x77,0x7a,0x7e,0x81,0x85,0x88,0x8c,0x8f,0x93,0x96,0x9a,0x9d,0xa1,0xa4,0xa8,0xab,0xaf,0xb2,0xb5,0xb9,0xbc,0xbf,0xc2,0xc6,0xc9,0xcc,0xcf,0xd2,0xd5,0xd7,0xda,0xdc,0xdd,0xdf,0xe0,0xe1,0xe2,0xe2,0xe3,0xe2,0xe2,0xe1,0xe0,0xdf,0xdd,0xdc,0xda,0xd7,0xd5,0xd2,0xcf,0xcc,0xc9,0xc6,0xc2,0xbf,0xbc,0xb9,0xb5,0xb2,0xaf,0xab,0xa8,0xa4,0xa1,0x9d,0x9a,0x96,0x93,0x8f,0x8c,0x88,0x85,0x81,0x7e,0x7a,0x77,0x74,0x71,0x6e,0x6b,0x68,0x65,0x62,0x5f,0x5c,0x59,0x56,0x53,0x50,0x4d,0x4a,0x48,0x45,0x43,0x40,0x3e,0x3c,0x39,0x37,0x35,0x32,0x30,0x2e,0x2b,0x29,0x27,0x26,0x24,0x22,0x20,0x1e,0x1d,0x1b,0x1a,0x18,0x17,0x15,0x14,0x12,0x11,0x0f,0x0e,0x0c,0x0b,0x0a,0x09,0x08,0x07,0x06,0x05,0x04,0x03,0x02,0x01,0x01,0x00,0x00, +0x00,0x00,0x00,0x01,0x01,0x02,0x03,0x03,0x04,0x05,0x06,0x07,0x09,0x0a,0x0b,0x0c,0x0e,0x0f,0x11,0x12,0x13,0x15,0x16,0x18,0x19,0x1b,0x1c,0x1e,0x20,0x22,0x23,0x25,0x27,0x29,0x2b,0x2d,0x30,0x32,0x34,0x36,0x39,0x3b,0x3d,0x40,0x42,0x45,0x47,0x4a,0x4d,0x4f,0x52,0x55,0x58,0x5b,0x5e,0x61,0x64,0x67,0x6a,0x6d,0x70,0x73,0x76,0x79,0x7d,0x80,0x83,0x87,0x8a,0x8e,0x91,0x95,0x98,0x9c,0x9f,0xa3,0xa6,0xa9,0xad,0xb0,0xb3,0xb6,0xba,0xbd,0xc0,0xc3,0xc6,0xc9,0xcc,0xcf,0xd1,0xd4,0xd6,0xd8,0xda,0xdb,0xdd,0xdd,0xde,0xde,0xdf,0xde,0xde,0xdd,0xdd,0xdb,0xda,0xd8,0xd6,0xd4,0xd1,0xcf,0xcc,0xc9,0xc6,0xc3,0xc0,0xbd,0xba,0xb6,0xb3,0xb0,0xad,0xa9,0xa6,0xa3,0x9f,0x9c,0x98,0x95,0x91,0x8e,0x8a,0x87,0x83,0x80,0x7d,0x79,0x76,0x73,0x70,0x6d,0x6a,0x67,0x64,0x61,0x5e,0x5b,0x58,0x55,0x52,0x4f,0x4d,0x4a,0x47,0x45,0x42,0x40,0x3d,0x3b,0x39,0x36,0x34,0x32,0x30,0x2d,0x2b,0x29,0x27,0x25,0x23,0x22,0x20,0x1e,0x1c,0x1b,0x19,0x18,0x16,0x15,0x13,0x12,0x11,0x0f,0x0e,0x0c,0x0b,0x0a,0x09,0x07,0x06,0x05,0x04,0x03,0x03,0x02,0x01,0x01,0x00,0x00, +0x00,0x00,0x00,0x01,0x01,0x02,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x0a,0x0b,0x0c,0x0d,0x0f,0x10,0x11,0x13,0x14,0x16,0x17,0x19,0x1a,0x1c,0x1e,0x1f,0x21,0x23,0x25,0x27,0x29,0x2b,0x2d,0x2f,0x32,0x34,0x36,0x38,0x3a,0x3d,0x3f,0x42,0x44,0x47,0x49,0x4c,0x4f,0x51,0x54,0x57,0x5a,0x5d,0x60,0x63,0x66,0x69,0x6c,0x6f,0x72,0x75,0x78,0x7b,0x7f,0x82,0x85,0x89,0x8c,0x90,0x93,0x97,0x9a,0x9d,0xa1,0xa4,0xa7,0xab,0xae,0xb1,0xb4,0xb7,0xba,0xbd,0xc1,0xc4,0xc6,0xc9,0xcc,0xce,0xd0,0xd3,0xd5,0xd6,0xd8,0xd9,0xda,0xdb,0xdb,0xdb,0xdb,0xdb,0xda,0xd9,0xd8,0xd6,0xd5,0xd3,0xd0,0xce,0xcc,0xc9,0xc6,0xc4,0xc1,0xbd,0xba,0xb7,0xb4,0xb1,0xae,0xab,0xa7,0xa4,0xa1,0x9d,0x9a,0x97,0x93,0x90,0x8c,0x89,0x85,0x82,0x7f,0x7b,0x78,0x75,0x72,0x6f,0x6c,0x69,0x66,0x63,0x60,0x5d,0x5a,0x57,0x54,0x51,0x4f,0x4c,0x49,0x47,0x44,0x42,0x3f,0x3d,0x3a,0x38,0x36,0x34,0x32,0x2f,0x2d,0x2b,0x29,0x27,0x25,0x23,0x21,0x1f,0x1e,0x1c,0x1a,0x19,0x17,0x16,0x14,0x13,0x11,0x10,0x0f,0x0d,0x0c,0x0b,0x0a,0x08,0x07,0x06,0x05,0x04,0x03,0x02,0x02,0x01,0x01,0x00,0x00, +0x00,0x00,0x00,0x01,0x01,0x02,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0c,0x0d,0x0f,0x10,0x11,0x13,0x14,0x16,0x17,0x19,0x1a,0x1c,0x1e,0x1f,0x21,0x23,0x25,0x26,0x28,0x2a,0x2c,0x2f,0x31,0x33,0x35,0x38,0x3a,0x3c,0x3f,0x41,0x44,0x46,0x49,0x4b,0x4e,0x50,0x53,0x56,0x59,0x5c,0x5f,0x62,0x65,0x68,0x6b,0x6e,0x71,0x74,0x77,0x7a,0x7d,0x81,0x84,0x87,0x8b,0x8e,0x92,0x95,0x98,0x9c,0x9f,0xa2,0xa5,0xa9,0xac,0xaf,0xb2,0xb5,0xb8,0xbb,0xbe,0xc1,0xc3,0xc6,0xc8,0xca,0xcd,0xcf,0xd1,0xd2,0xd4,0xd5,0xd6,0xd7,0xd7,0xd7,0xd7,0xd7,0xd6,0xd5,0xd4,0xd2,0xd1,0xcf,0xcd,0xca,0xc8,0xc6,0xc3,0xc1,0xbe,0xbb,0xb8,0xb5,0xb2,0xaf,0xac,0xa9,0xa5,0xa2,0x9f,0x9c,0x98,0x95,0x92,0x8e,0x8b,0x87,0x84,0x81,0x7d,0x7a,0x77,0x74,0x71,0x6e,0x6b,0x68,0x65,0x62,0x5f,0x5c,0x59,0x56,0x53,0x50,0x4e,0x4b,0x49,0x46,0x44,0x41,0x3f,0x3c,0x3a,0x38,0x35,0x33,0x31,0x2f,0x2c,0x2a,0x28,0x26,0x25,0x23,0x21,0x1f,0x1e,0x1c,0x1a,0x19,0x17,0x16,0x14,0x13,0x11,0x10,0x0f,0x0d,0x0c,0x0a,0x09,0x08,0x07,0x06,0x05,0x04,0x03,0x02,0x02,0x01,0x01,0x00,0x00, +0x00,0x00,0x00,0x01,0x01,0x02,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0d,0x0e,0x10,0x11,0x13,0x14,0x16,0x17,0x19,0x1a,0x1c,0x1d,0x1f,0x21,0x22,0x24,0x26,0x28,0x2a,0x2c,0x2e,0x31,0x33,0x35,0x37,0x39,0x3c,0x3e,0x41,0x43,0x45,0x48,0x4a,0x4d,0x50,0x52,0x55,0x58,0x5b,0x5e,0x61,0x64,0x67,0x6a,0x6d,0x70,0x73,0x76,0x79,0x7c,0x7f,0x82,0x85,0x89,0x8c,0x90,0x93,0x96,0x9a,0x9d,0xa0,0xa3,0xa6,0xa9,0xac,0xaf,0xb2,0xb5,0xb8,0xbb,0xbe,0xc0,0xc2,0xc5,0xc7,0xc9,0xcb,0xcd,0xce,0xd0,0xd1,0xd2,0xd3,0xd3,0xd3,0xd3,0xd3,0xd2,0xd1,0xd0,0xce,0xcd,0xcb,0xc9,0xc7,0xc5,0xc2,0xc0,0xbe,0xbb,0xb8,0xb5,0xb2,0xaf,0xac,0xa9,0xa6,0xa3,0xa0,0x9d,0x9a,0x96,0x93,0x90,0x8c,0x89,0x85,0x82,0x7f,0x7c,0x79,0x76,0x73,0x70,0x6d,0x6a,0x67,0x64,0x61,0x5e,0x5b,0x58,0x55,0x52,0x50,0x4d,0x4a,0x48,0x45,0x43,0x41,0x3e,0x3c,0x39,0x37,0x35,0x33,0x31,0x2e,0x2c,0x2a,0x28,0x26,0x24,0x22,0x21,0x1f,0x1d,0x1c,0x1a,0x19,0x17,0x16,0x14,0x13,0x11,0x10,0x0e,0x0d,0x0b,0x0a,0x09,0x08,0x07,0x06,0x05,0x04,0x03,0x02,0x02,0x01,0x01,0x00,0x00, +0x00,0x00,0x00,0x01,0x01,0x02,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0d,0x0e,0x10,0x11,0x12,0x14,0x15,0x17,0x18,0x1a,0x1b,0x1d,0x1e,0x20,0x22,0x24,0x25,0x27,0x29,0x2b,0x2d,0x30,0x32,0x34,0x36,0x39,0x3b,0x3e,0x40,0x42,0x45,0x47,0x4a,0x4c,0x4f,0x51,0x54,0x57,0x5a,0x5d,0x60,0x63,0x66,0x68,0x6b,0x6e,0x71,0x74,0x77,0x7a,0x7e,0x81,0x84,0x87,0x8b,0x8e,0x91,0x94,0x98,0x9b,0x9e,0xa1,0xa4,0xa7,0xaa,0xad,0xb0,0xb3,0xb5,0xb8,0xbb,0xbd,0xbf,0xc1,0xc3,0xc5,0xc7,0xc9,0xcb,0xcc,0xcd,0xcd,0xce,0xce,0xcf,0xce,0xce,0xcd,0xcd,0xcc,0xcb,0xc9,0xc7,0xc5,0xc3,0xc1,0xbf,0xbd,0xbb,0xb8,0xb5,0xb3,0xb0,0xad,0xaa,0xa7,0xa4,0xa1,0x9e,0x9b,0x98,0x94,0x91,0x8e,0x8b,0x87,0x84,0x81,0x7e,0x7a,0x77,0x74,0x71,0x6e,0x6b,0x68,0x66,0x63,0x60,0x5d,0x5a,0x57,0x54,0x51,0x4f,0x4c,0x4a,0x47,0x45,0x42,0x40,0x3e,0x3b,0x39,0x36,0x34,0x32,0x30,0x2d,0x2b,0x29,0x27,0x25,0x24,0x22,0x20,0x1e,0x1d,0x1b,0x1a,0x18,0x17,0x15,0x14,0x12,0x11,0x10,0x0e,0x0d,0x0b,0x0a,0x09,0x08,0x07,0x06,0x05,0x04,0x03,0x02,0x02,0x01,0x01,0x00,0x00, +0x00,0x00,0x00,0x00,0x01,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0e,0x0f,0x11,0x12,0x13,0x15,0x16,0x18,0x19,0x1b,0x1c,0x1e,0x20,0x21,0x23,0x25,0x27,0x29,0x2b,0x2d,0x2f,0x32,0x34,0x36,0x38,0x3a,0x3d,0x3f,0x41,0x44,0x46,0x49,0x4b,0x4e,0x50,0x53,0x56,0x59,0x5c,0x5f,0x61,0x64,0x67,0x6a,0x6d,0x70,0x73,0x76,0x79,0x7c,0x7f,0x82,0x85,0x89,0x8c,0x8f,0x92,0x96,0x99,0x9c,0x9f,0xa1,0xa4,0xa7,0xaa,0xad,0xb0,0xb2,0xb5,0xb7,0xba,0xbc,0xbe,0xc0,0xc2,0xc4,0xc5,0xc7,0xc8,0xc9,0xc9,0xca,0xca,0xca,0xca,0xca,0xc9,0xc9,0xc8,0xc7,0xc5,0xc4,0xc2,0xc0,0xbe,0xbc,0xba,0xb7,0xb5,0xb2,0xb0,0xad,0xaa,0xa7,0xa4,0xa1,0x9f,0x9c,0x99,0x96,0x92,0x8f,0x8c,0x89,0x85,0x82,0x7f,0x7c,0x79,0x76,0x73,0x70,0x6d,0x6a,0x67,0x64,0x61,0x5f,0x5c,0x59,0x56,0x53,0x50,0x4e,0x4b,0x49,0x46,0x44,0x41,0x3f,0x3d,0x3a,0x38,0x36,0x34,0x32,0x2f,0x2d,0x2b,0x29,0x27,0x25,0x23,0x21,0x20,0x1e,0x1c,0x1b,0x19,0x18,0x16,0x15,0x13,0x12,0x11,0x0f,0x0e,0x0c,0x0b,0x0a,0x09,0x08,0x07,0x06,0x05,0x04,0x03,0x02,0x01,0x01,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x01,0x01,0x02,0x03,0x03,0x04,0x05,0x06,0x07,0x09,0x0a,0x0b,0x0c,0x0d,0x0f,0x10,0x11,0x13,0x14,0x16,0x17,0x19,0x1a,0x1c,0x1e,0x1f,0x21,0x23,0x25,0x26,0x28,0x2a,0x2c,0x2f,0x31,0x33,0x35,0x37,0x3a,0x3c,0x3e,0x41,0x43,0x45,0x48,0x4a,0x4d,0x4f,0x52,0x55,0x58,0x5b,0x5e,0x60,0x63,0x66,0x69,0x6c,0x6f,0x71,0x74,0x77,0x7a,0x7d,0x80,0x83,0x87,0x8a,0x8d,0x90,0x93,0x96,0x99,0x9c,0x9f,0xa2,0xa5,0xa8,0xaa,0xad,0xaf,0xb2,0xb4,0xb6,0xb9,0xbb,0xbd,0xbe,0xc0,0xc1,0xc3,0xc4,0xc5,0xc5,0xc6,0xc6,0xc7,0xc6,0xc6,0xc5,0xc5,0xc4,0xc3,0xc1,0xc0,0xbe,0xbd,0xbb,0xb9,0xb6,0xb4,0xb2,0xaf,0xad,0xaa,0xa8,0xa5,0xa2,0x9f,0x9c,0x99,0x96,0x93,0x90,0x8d,0x8a,0x87,0x83,0x80,0x7d,0x7a,0x77,0x74,0x71,0x6f,0x6c,0x69,0x66,0x63,0x60,0x5e,0x5b,0x58,0x55,0x52,0x4f,0x4d,0x4a,0x48,0x45,0x43,0x41,0x3e,0x3c,0x3a,0x37,0x35,0x33,0x31,0x2f,0x2c,0x2a,0x28,0x26,0x25,0x23,0x21,0x1f,0x1e,0x1c,0x1a,0x19,0x17,0x16,0x14,0x13,0x11,0x10,0x0f,0x0d,0x0c,0x0b,0x0a,0x09,0x07,0x06,0x05,0x04,0x03,0x03,0x02,0x01,0x01,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x01,0x01,0x02,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0d,0x0e,0x10,0x11,0x13,0x14,0x16,0x17,0x18,0x1a,0x1b,0x1d,0x1f,0x20,0x22,0x24,0x26,0x28,0x2a,0x2c,0x2e,0x30,0x32,0x35,0x37,0x39,0x3b,0x3e,0x40,0x42,0x44,0x47,0x49,0x4c,0x4e,0x51,0x54,0x57,0x5a,0x5c,0x5f,0x62,0x65,0x67,0x6a,0x6d,0x70,0x73,0x76,0x79,0x7b,0x7e,0x81,0x84,0x88,0x8b,0x8e,0x91,0x94,0x97,0x9a,0x9c,0x9f,0xa2,0xa5,0xa7,0xaa,0xac,0xaf,0xb1,0xb3,0xb5,0xb7,0xb9,0xbb,0xbc,0xbe,0xbf,0xc0,0xc1,0xc1,0xc2,0xc2,0xc3,0xc2,0xc2,0xc1,0xc1,0xc0,0xbf,0xbe,0xbc,0xbb,0xb9,0xb7,0xb5,0xb3,0xb1,0xaf,0xac,0xaa,0xa7,0xa5,0xa2,0x9f,0x9c,0x9a,0x97,0x94,0x91,0x8e,0x8b,0x88,0x84,0x81,0x7e,0x7b,0x79,0x76,0x73,0x70,0x6d,0x6a,0x67,0x65,0x62,0x5f,0x5c,0x5a,0x57,0x54,0x51,0x4e,0x4c,0x49,0x47,0x44,0x42,0x40,0x3e,0x3b,0x39,0x37,0x35,0x32,0x30,0x2e,0x2c,0x2a,0x28,0x26,0x24,0x22,0x20,0x1f,0x1d,0x1b,0x1a,0x18,0x17,0x16,0x14,0x13,0x11,0x10,0x0e,0x0d,0x0b,0x0a,0x09,0x08,0x07,0x06,0x05,0x04,0x03,0x02,0x02,0x01,0x01,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x01,0x01,0x02,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0d,0x0e,0x10,0x11,0x12,0x14,0x15,0x17,0x18,0x1a,0x1b,0x1d,0x1e,0x20,0x22,0x23,0x25,0x27,0x29,0x2b,0x2d,0x30,0x32,0x34,0x36,0x38,0x3a,0x3d,0x3f,0x41,0x43,0x46,0x48,0x4b,0x4d,0x50,0x53,0x55,0x58,0x5b,0x5e,0x60,0x63,0x66,0x69,0x6c,0x6e,0x71,0x74,0x77,0x7a,0x7d,0x7f,0x82,0x85,0x88,0x8c,0x8f,0x92,0x94,0x97,0x9a,0x9c,0x9f,0xa2,0xa4,0xa7,0xa9,0xac,0xae,0xb0,0xb2,0xb4,0xb6,0xb7,0xb9,0xba,0xbb,0xbc,0xbd,0xbe,0xbe,0xbe,0xbf,0xbe,0xbe,0xbe,0xbd,0xbc,0xbb,0xba,0xb9,0xb7,0xb6,0xb4,0xb2,0xb0,0xae,0xac,0xa9,0xa7,0xa4,0xa2,0x9f,0x9c,0x9a,0x97,0x94,0x92,0x8f,0x8c,0x88,0x85,0x82,0x7f,0x7d,0x7a,0x77,0x74,0x71,0x6e,0x6c,0x69,0x66,0x63,0x60,0x5e,0x5b,0x58,0x55,0x53,0x50,0x4d,0x4b,0x48,0x46,0x43,0x41,0x3f,0x3d,0x3a,0x38,0x36,0x34,0x32,0x30,0x2d,0x2b,0x29,0x27,0x25,0x23,0x22,0x20,0x1e,0x1d,0x1b,0x1a,0x18,0x17,0x15,0x14,0x12,0x11,0x10,0x0e,0x0d,0x0b,0x0a,0x09,0x08,0x07,0x06,0x05,0x04,0x03,0x02,0x02,0x01,0x01,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0e,0x0f,0x10,0x12,0x13,0x15,0x16,0x18,0x19,0x1b,0x1c,0x1e,0x1f,0x21,0x23,0x25,0x27,0x29,0x2b,0x2d,0x2f,0x31,0x33,0x35,0x37,0x3a,0x3c,0x3e,0x40,0x42,0x45,0x47,0x4a,0x4c,0x4f,0x51,0x54,0x57,0x5a,0x5c,0x5f,0x62,0x64,0x67,0x6a,0x6d,0x70,0x72,0x75,0x78,0x7b,0x7d,0x80,0x83,0x86,0x89,0x8c,0x8f,0x92,0x95,0x97,0x9a,0x9c,0x9f,0xa2,0xa4,0xa6,0xa8,0xab,0xac,0xae,0xb0,0xb2,0xb3,0xb5,0xb6,0xb7,0xb8,0xb9,0xba,0xba,0xba,0xbb,0xba,0xba,0xba,0xb9,0xb8,0xb7,0xb6,0xb5,0xb3,0xb2,0xb0,0xae,0xac,0xab,0xa8,0xa6,0xa4,0xa2,0x9f,0x9c,0x9a,0x97,0x95,0x92,0x8f,0x8c,0x89,0x86,0x83,0x80,0x7d,0x7b,0x78,0x75,0x72,0x70,0x6d,0x6a,0x67,0x64,0x62,0x5f,0x5c,0x5a,0x57,0x54,0x51,0x4f,0x4c,0x4a,0x47,0x45,0x42,0x40,0x3e,0x3c,0x3a,0x37,0x35,0x33,0x31,0x2f,0x2d,0x2b,0x29,0x27,0x25,0x23,0x21,0x1f,0x1e,0x1c,0x1b,0x19,0x18,0x16,0x15,0x13,0x12,0x10,0x0f,0x0e,0x0c,0x0b,0x0a,0x09,0x08,0x07,0x06,0x05,0x04,0x03,0x02,0x01,0x01,0x01,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x02,0x03,0x04,0x04,0x05,0x06,0x07,0x09,0x0a,0x0b,0x0c,0x0d,0x0f,0x10,0x12,0x13,0x14,0x16,0x17,0x19,0x1a,0x1c,0x1d,0x1f,0x21,0x22,0x24,0x26,0x28,0x2a,0x2c,0x2e,0x30,0x32,0x34,0x36,0x39,0x3b,0x3d,0x3f,0x41,0x44,0x46,0x49,0x4b,0x4e,0x50,0x53,0x55,0x58,0x5b,0x5e,0x60,0x63,0x66,0x68,0x6b,0x6e,0x71,0x73,0x76,0x79,0x7b,0x7e,0x81,0x84,0x87,0x8a,0x8d,0x8f,0x92,0x95,0x97,0x9a,0x9c,0x9f,0xa1,0xa3,0xa5,0xa7,0xa9,0xab,0xad,0xaf,0xb0,0xb1,0xb3,0xb3,0xb4,0xb5,0xb6,0xb6,0xb6,0xb7,0xb6,0xb6,0xb6,0xb5,0xb4,0xb3,0xb3,0xb1,0xb0,0xaf,0xad,0xab,0xa9,0xa7,0xa5,0xa3,0xa1,0x9f,0x9c,0x9a,0x97,0x95,0x92,0x8f,0x8d,0x8a,0x87,0x84,0x81,0x7e,0x7b,0x79,0x76,0x73,0x71,0x6e,0x6b,0x68,0x66,0x63,0x60,0x5e,0x5b,0x58,0x55,0x53,0x50,0x4e,0x4b,0x49,0x46,0x44,0x41,0x3f,0x3d,0x3b,0x39,0x36,0x34,0x32,0x30,0x2e,0x2c,0x2a,0x28,0x26,0x24,0x22,0x21,0x1f,0x1d,0x1c,0x1a,0x19,0x17,0x16,0x14,0x13,0x12,0x10,0x0f,0x0d,0x0c,0x0b,0x0a,0x09,0x07,0x06,0x05,0x04,0x04,0x03,0x02,0x01,0x01,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x02,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0d,0x0e,0x10,0x11,0x12,0x14,0x15,0x17,0x18,0x1a,0x1b,0x1d,0x1e,0x20,0x22,0x23,0x25,0x27,0x29,0x2b,0x2d,0x2f,0x31,0x34,0x36,0x38,0x3a,0x3c,0x3e,0x41,0x43,0x45,0x48,0x4a,0x4c,0x4f,0x51,0x54,0x57,0x59,0x5c,0x5f,0x61,0x64,0x67,0x69,0x6c,0x6f,0x71,0x74,0x77,0x79,0x7c,0x7f,0x82,0x84,0x87,0x8a,0x8d,0x8f,0x92,0x94,0x97,0x99,0x9c,0x9e,0xa0,0xa2,0xa4,0xa6,0xa8,0xa9,0xab,0xac,0xae,0xaf,0xb0,0xb0,0xb1,0xb2,0xb2,0xb2,0xb3,0xb2,0xb2,0xb2,0xb1,0xb0,0xb0,0xaf,0xae,0xac,0xab,0xa9,0xa8,0xa6,0xa4,0xa2,0xa0,0x9e,0x9c,0x99,0x97,0x94,0x92,0x8f,0x8d,0x8a,0x87,0x84,0x82,0x7f,0x7c,0x79,0x77,0x74,0x71,0x6f,0x6c,0x69,0x67,0x64,0x61,0x5f,0x5c,0x59,0x57,0x54,0x51,0x4f,0x4c,0x4a,0x48,0x45,0x43,0x41,0x3e,0x3c,0x3a,0x38,0x36,0x34,0x31,0x2f,0x2d,0x2b,0x29,0x27,0x25,0x23,0x22,0x20,0x1e,0x1d,0x1b,0x1a,0x18,0x17,0x15,0x14,0x12,0x11,0x10,0x0e,0x0d,0x0b,0x0a,0x09,0x08,0x07,0x06,0x05,0x04,0x03,0x02,0x02,0x01,0x01,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x02,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0e,0x0f,0x11,0x12,0x13,0x15,0x16,0x18,0x19,0x1b,0x1c,0x1e,0x1f,0x21,0x23,0x25,0x27,0x28,0x2a,0x2c,0x2e,0x30,0x33,0x35,0x37,0x39,0x3b,0x3d,0x40,0x42,0x44,0x46,0x49,0x4b,0x4e,0x50,0x53,0x55,0x58,0x5b,0x5d,0x60,0x62,0x65,0x68,0x6a,0x6d,0x70,0x72,0x75,0x77,0x7a,0x7d,0x7f,0x82,0x84,0x87,0x8a,0x8d,0x8f,0x92,0x94,0x96,0x98,0x9b,0x9d,0x9f,0xa0,0xa2,0xa4,0xa6,0xa7,0xa8,0xaa,0xab,0xac,0xad,0xad,0xae,0xae,0xaf,0xaf,0xaf,0xae,0xae,0xad,0xad,0xac,0xab,0xaa,0xa8,0xa7,0xa6,0xa4,0xa2,0xa0,0x9f,0x9d,0x9b,0x98,0x96,0x94,0x92,0x8f,0x8d,0x8a,0x87,0x84,0x82,0x7f,0x7d,0x7a,0x77,0x75,0x72,0x70,0x6d,0x6a,0x68,0x65,0x62,0x60,0x5d,0x5b,0x58,0x55,0x53,0x50,0x4e,0x4b,0x49,0x46,0x44,0x42,0x40,0x3d,0x3b,0x39,0x37,0x35,0x33,0x30,0x2e,0x2c,0x2a,0x28,0x27,0x25,0x23,0x21,0x1f,0x1e,0x1c,0x1b,0x19,0x18,0x16,0x15,0x13,0x12,0x11,0x0f,0x0e,0x0c,0x0b,0x0a,0x09,0x08,0x07,0x06,0x05,0x04,0x03,0x02,0x02,0x01,0x01,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0f,0x10,0x12,0x13,0x14,0x16,0x17,0x19,0x1a,0x1c,0x1d,0x1f,0x21,0x22,0x24,0x26,0x28,0x29,0x2b,0x2d,0x30,0x32,0x34,0x36,0x38,0x3a,0x3c,0x3e,0x41,0x43,0x45,0x48,0x4a,0x4c,0x4f,0x51,0x54,0x56,0x59,0x5c,0x5e,0x61,0x63,0x66,0x68,0x6b,0x6e,0x70,0x73,0x75,0x78,0x7a,0x7d,0x7f,0x82,0x84,0x87,0x8a,0x8c,0x8f,0x91,0x93,0x95,0x98,0x9a,0x9b,0x9d,0x9f,0xa1,0xa2,0xa4,0xa5,0xa6,0xa7,0xa8,0xa9,0xaa,0xaa,0xab,0xab,0xab,0xab,0xab,0xaa,0xaa,0xa9,0xa8,0xa7,0xa6,0xa5,0xa4,0xa2,0xa1,0x9f,0x9d,0x9b,0x9a,0x98,0x95,0x93,0x91,0x8f,0x8c,0x8a,0x87,0x84,0x82,0x7f,0x7d,0x7a,0x78,0x75,0x73,0x70,0x6e,0x6b,0x68,0x66,0x63,0x61,0x5e,0x5c,0x59,0x56,0x54,0x51,0x4f,0x4c,0x4a,0x48,0x45,0x43,0x41,0x3e,0x3c,0x3a,0x38,0x36,0x34,0x32,0x30,0x2d,0x2b,0x29,0x28,0x26,0x24,0x22,0x21,0x1f,0x1d,0x1c,0x1a,0x19,0x17,0x16,0x14,0x13,0x12,0x10,0x0f,0x0d,0x0c,0x0b,0x0a,0x09,0x08,0x07,0x06,0x05,0x04,0x03,0x02,0x01,0x01,0x01,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x02,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0c,0x0d,0x0e,0x10,0x11,0x12,0x14,0x15,0x17,0x18,0x1a,0x1b,0x1d,0x1e,0x20,0x21,0x23,0x25,0x27,0x29,0x2b,0x2d,0x2f,0x31,0x33,0x35,0x37,0x39,0x3b,0x3d,0x40,0x42,0x44,0x46,0x49,0x4b,0x4d,0x50,0x52,0x55,0x58,0x5a,0x5d,0x5f,0x62,0x64,0x67,0x69,0x6c,0x6e,0x71,0x73,0x75,0x78,0x7a,0x7d,0x7f,0x82,0x84,0x87,0x89,0x8c,0x8e,0x90,0x92,0x94,0x96,0x98,0x9a,0x9c,0x9d,0x9f,0xa0,0xa1,0xa3,0xa4,0xa4,0xa5,0xa6,0xa6,0xa7,0xa7,0xa7,0xa7,0xa7,0xa6,0xa6,0xa5,0xa4,0xa4,0xa3,0xa1,0xa0,0x9f,0x9d,0x9c,0x9a,0x98,0x96,0x94,0x92,0x90,0x8e,0x8c,0x89,0x87,0x84,0x82,0x7f,0x7d,0x7a,0x78,0x75,0x73,0x71,0x6e,0x6c,0x69,0x67,0x64,0x62,0x5f,0x5d,0x5a,0x58,0x55,0x52,0x50,0x4d,0x4b,0x49,0x46,0x44,0x42,0x40,0x3d,0x3b,0x39,0x37,0x35,0x33,0x31,0x2f,0x2d,0x2b,0x29,0x27,0x25,0x23,0x21,0x20,0x1e,0x1d,0x1b,0x1a,0x18,0x17,0x15,0x14,0x12,0x11,0x10,0x0e,0x0d,0x0c,0x0a,0x09,0x08,0x07,0x06,0x05,0x04,0x03,0x02,0x02,0x01,0x01,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x02,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0e,0x0f,0x11,0x12,0x13,0x15,0x16,0x17,0x19,0x1a,0x1c,0x1e,0x1f,0x21,0x23,0x24,0x26,0x28,0x2a,0x2c,0x2e,0x30,0x32,0x34,0x36,0x38,0x3a,0x3c,0x3e,0x41,0x43,0x45,0x47,0x4a,0x4c,0x4e,0x51,0x53,0x56,0x58,0x5b,0x5d,0x60,0x62,0x65,0x67,0x6a,0x6c,0x6f,0x71,0x73,0x76,0x78,0x7a,0x7d,0x7f,0x81,0x84,0x86,0x88,0x8b,0x8d,0x8f,0x91,0x93,0x95,0x97,0x98,0x9a,0x9b,0x9d,0x9e,0x9f,0xa0,0xa1,0xa2,0xa2,0xa3,0xa3,0xa3,0xa3,0xa3,0xa3,0xa3,0xa2,0xa2,0xa1,0xa0,0x9f,0x9e,0x9d,0x9b,0x9a,0x98,0x97,0x95,0x93,0x91,0x8f,0x8d,0x8b,0x88,0x86,0x84,0x81,0x7f,0x7d,0x7a,0x78,0x76,0x73,0x71,0x6f,0x6c,0x6a,0x67,0x65,0x62,0x60,0x5d,0x5b,0x58,0x56,0x53,0x51,0x4e,0x4c,0x4a,0x47,0x45,0x43,0x41,0x3e,0x3c,0x3a,0x38,0x36,0x34,0x32,0x30,0x2e,0x2c,0x2a,0x28,0x26,0x24,0x23,0x21,0x1f,0x1e,0x1c,0x1a,0x19,0x17,0x16,0x15,0x13,0x12,0x11,0x0f,0x0e,0x0c,0x0b,0x0a,0x09,0x08,0x07,0x06,0x05,0x04,0x03,0x02,0x02,0x01,0x01,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0f,0x10,0x11,0x13,0x14,0x16,0x17,0x19,0x1a,0x1c,0x1d,0x1f,0x20,0x22,0x23,0x25,0x27,0x29,0x2b,0x2d,0x2f,0x31,0x33,0x35,0x37,0x39,0x3b,0x3d,0x3f,0x42,0x44,0x46,0x48,0x4a,0x4d,0x4f,0x51,0x54,0x56,0x59,0x5b,0x5e,0x60,0x63,0x65,0x68,0x6a,0x6c,0x6f,0x71,0x73,0x76,0x78,0x7a,0x7d,0x7f,0x81,0x83,0x85,0x87,0x8a,0x8c,0x8e,0x90,0x91,0x93,0x95,0x96,0x98,0x99,0x9a,0x9b,0x9c,0x9d,0x9e,0x9e,0x9f,0x9f,0x9f,0x9f,0x9f,0x9f,0x9f,0x9e,0x9e,0x9d,0x9c,0x9b,0x9a,0x99,0x98,0x96,0x95,0x93,0x91,0x90,0x8e,0x8c,0x8a,0x87,0x85,0x83,0x81,0x7f,0x7d,0x7a,0x78,0x76,0x73,0x71,0x6f,0x6c,0x6a,0x68,0x65,0x63,0x60,0x5e,0x5b,0x59,0x56,0x54,0x51,0x4f,0x4d,0x4a,0x48,0x46,0x44,0x42,0x3f,0x3d,0x3b,0x39,0x37,0x35,0x33,0x31,0x2f,0x2d,0x2b,0x29,0x27,0x25,0x23,0x22,0x20,0x1f,0x1d,0x1c,0x1a,0x19,0x17,0x16,0x14,0x13,0x11,0x10,0x0f,0x0d,0x0c,0x0b,0x0a,0x09,0x08,0x07,0x06,0x05,0x04,0x03,0x02,0x01,0x01,0x01,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x02,0x03,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0c,0x0d,0x0e,0x10,0x11,0x12,0x14,0x15,0x16,0x18,0x19,0x1b,0x1c,0x1e,0x1f,0x21,0x23,0x25,0x26,0x28,0x2a,0x2c,0x2e,0x30,0x32,0x34,0x36,0x38,0x3a,0x3c,0x3e,0x40,0x42,0x45,0x47,0x49,0x4b,0x4e,0x50,0x52,0x55,0x57,0x5a,0x5c,0x5e,0x61,0x63,0x65,0x68,0x6a,0x6d,0x6f,0x71,0x73,0x75,0x78,0x7a,0x7c,0x7e,0x80,0x82,0x84,0x86,0x88,0x8a,0x8c,0x8e,0x90,0x91,0x93,0x94,0x96,0x97,0x98,0x99,0x99,0x9a,0x9a,0x9b,0x9b,0x9b,0x9b,0x9b,0x9b,0x9b,0x9a,0x9a,0x99,0x99,0x98,0x97,0x96,0x94,0x93,0x91,0x90,0x8e,0x8c,0x8a,0x88,0x86,0x84,0x82,0x80,0x7e,0x7c,0x7a,0x78,0x75,0x73,0x71,0x6f,0x6d,0x6a,0x68,0x65,0x63,0x61,0x5e,0x5c,0x5a,0x57,0x55,0x52,0x50,0x4e,0x4b,0x49,0x47,0x45,0x42,0x40,0x3e,0x3c,0x3a,0x38,0x36,0x34,0x32,0x30,0x2e,0x2c,0x2a,0x28,0x26,0x25,0x23,0x21,0x1f,0x1e,0x1c,0x1b,0x19,0x18,0x16,0x15,0x14,0x12,0x11,0x10,0x0e,0x0d,0x0c,0x0a,0x09,0x08,0x07,0x06,0x05,0x04,0x03,0x03,0x02,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x02,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0e,0x0f,0x10,0x12,0x13,0x14,0x16,0x17,0x19,0x1a,0x1c,0x1d,0x1f,0x20,0x22,0x24,0x25,0x27,0x29,0x2b,0x2d,0x2f,0x31,0x33,0x35,0x37,0x39,0x3b,0x3d,0x3f,0x41,0x43,0x45,0x48,0x4a,0x4c,0x4e,0x51,0x53,0x55,0x58,0x5a,0x5c,0x5f,0x61,0x63,0x66,0x68,0x6a,0x6d,0x6f,0x71,0x73,0x75,0x77,0x79,0x7b,0x7d,0x7f,0x81,0x83,0x85,0x87,0x89,0x8a,0x8c,0x8e,0x8f,0x90,0x92,0x93,0x94,0x95,0x96,0x96,0x97,0x97,0x97,0x97,0x97,0x97,0x97,0x97,0x97,0x96,0x96,0x95,0x94,0x93,0x92,0x90,0x8f,0x8e,0x8c,0x8a,0x89,0x87,0x85,0x83,0x81,0x7f,0x7d,0x7b,0x79,0x77,0x75,0x73,0x71,0x6f,0x6d,0x6a,0x68,0x66,0x63,0x61,0x5f,0x5c,0x5a,0x58,0x55,0x53,0x51,0x4e,0x4c,0x4a,0x48,0x45,0x43,0x41,0x3f,0x3d,0x3b,0x39,0x37,0x35,0x33,0x31,0x2f,0x2d,0x2b,0x29,0x27,0x25,0x24,0x22,0x20,0x1f,0x1d,0x1c,0x1a,0x19,0x17,0x16,0x14,0x13,0x12,0x10,0x0f,0x0e,0x0c,0x0b,0x0a,0x09,0x08,0x07,0x06,0x05,0x04,0x03,0x02,0x02,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0f,0x10,0x11,0x13,0x14,0x15,0x17,0x18,0x1a,0x1b,0x1c,0x1e,0x1f,0x21,0x23,0x25,0x26,0x28,0x2a,0x2c,0x2e,0x30,0x32,0x34,0x36,0x37,0x3a,0x3c,0x3e,0x40,0x42,0x44,0x46,0x48,0x4a,0x4d,0x4f,0x51,0x53,0x56,0x58,0x5a,0x5d,0x5f,0x61,0x63,0x66,0x68,0x6a,0x6c,0x6f,0x71,0x73,0x75,0x77,0x79,0x7a,0x7c,0x7e,0x80,0x82,0x84,0x85,0x87,0x89,0x8a,0x8c,0x8d,0x8e,0x90,0x90,0x91,0x92,0x93,0x93,0x94,0x94,0x94,0x94,0x94,0x94,0x94,0x93,0x93,0x92,0x91,0x90,0x90,0x8e,0x8d,0x8c,0x8a,0x89,0x87,0x85,0x84,0x82,0x80,0x7e,0x7c,0x7a,0x79,0x77,0x75,0x73,0x71,0x6f,0x6c,0x6a,0x68,0x66,0x63,0x61,0x5f,0x5d,0x5a,0x58,0x56,0x53,0x51,0x4f,0x4d,0x4a,0x48,0x46,0x44,0x42,0x40,0x3e,0x3c,0x3a,0x37,0x36,0x34,0x32,0x30,0x2e,0x2c,0x2a,0x28,0x26,0x25,0x23,0x21,0x1f,0x1e,0x1c,0x1b,0x1a,0x18,0x17,0x15,0x14,0x13,0x11,0x10,0x0f,0x0d,0x0c,0x0b,0x0a,0x09,0x08,0x07,0x06,0x05,0x04,0x03,0x02,0x01,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x02,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0d,0x0e,0x0f,0x11,0x12,0x13,0x14,0x16,0x17,0x19,0x1a,0x1c,0x1d,0x1f,0x20,0x22,0x24,0x25,0x27,0x29,0x2b,0x2d,0x2e,0x30,0x32,0x34,0x36,0x38,0x3a,0x3c,0x3e,0x40,0x42,0x45,0x47,0x49,0x4b,0x4d,0x4f,0x51,0x54,0x56,0x58,0x5b,0x5d,0x5f,0x61,0x63,0x66,0x68,0x6a,0x6c,0x6e,0x70,0x72,0x74,0x76,0x78,0x79,0x7b,0x7d,0x7f,0x81,0x82,0x84,0x85,0x87,0x88,0x89,0x8b,0x8c,0x8c,0x8d,0x8e,0x8f,0x8f,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x8f,0x8f,0x8e,0x8d,0x8c,0x8c,0x8b,0x89,0x88,0x87,0x85,0x84,0x82,0x81,0x7f,0x7d,0x7b,0x79,0x78,0x76,0x74,0x72,0x70,0x6e,0x6c,0x6a,0x68,0x66,0x63,0x61,0x5f,0x5d,0x5b,0x58,0x56,0x54,0x51,0x4f,0x4d,0x4b,0x49,0x47,0x45,0x42,0x40,0x3e,0x3c,0x3a,0x38,0x36,0x34,0x32,0x30,0x2e,0x2d,0x2b,0x29,0x27,0x25,0x24,0x22,0x20,0x1f,0x1d,0x1c,0x1a,0x19,0x17,0x16,0x14,0x13,0x12,0x11,0x0f,0x0e,0x0d,0x0b,0x0a,0x09,0x08,0x07,0x06,0x05,0x04,0x03,0x02,0x02,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x02,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0f,0x10,0x11,0x13,0x14,0x16,0x17,0x18,0x1a,0x1b,0x1d,0x1e,0x20,0x21,0x23,0x24,0x26,0x28,0x2a,0x2b,0x2d,0x2f,0x31,0x33,0x35,0x37,0x39,0x3b,0x3d,0x3f,0x41,0x43,0x45,0x47,0x49,0x4b,0x4e,0x50,0x52,0x54,0x56,0x59,0x5b,0x5d,0x5f,0x61,0x63,0x65,0x68,0x6a,0x6c,0x6e,0x70,0x71,0x73,0x75,0x77,0x78,0x7a,0x7c,0x7e,0x7f,0x80,0x82,0x83,0x85,0x86,0x87,0x88,0x89,0x8a,0x8a,0x8b,0x8b,0x8c,0x8c,0x8c,0x8c,0x8c,0x8c,0x8c,0x8b,0x8b,0x8a,0x8a,0x89,0x88,0x87,0x86,0x85,0x83,0x82,0x80,0x7f,0x7e,0x7c,0x7a,0x78,0x77,0x75,0x73,0x71,0x70,0x6e,0x6c,0x6a,0x68,0x65,0x63,0x61,0x5f,0x5d,0x5b,0x59,0x56,0x54,0x52,0x50,0x4e,0x4b,0x49,0x47,0x45,0x43,0x41,0x3f,0x3d,0x3b,0x39,0x37,0x35,0x33,0x31,0x2f,0x2d,0x2b,0x2a,0x28,0x26,0x24,0x23,0x21,0x20,0x1e,0x1d,0x1b,0x1a,0x18,0x17,0x16,0x14,0x13,0x11,0x10,0x0f,0x0d,0x0c,0x0b,0x0a,0x09,0x08,0x07,0x06,0x05,0x04,0x03,0x02,0x02,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x02,0x03,0x04,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0d,0x0e,0x10,0x11,0x12,0x13,0x15,0x16,0x17,0x19,0x1a,0x1c,0x1d,0x1f,0x20,0x22,0x24,0x25,0x27,0x29,0x2a,0x2c,0x2e,0x30,0x32,0x34,0x36,0x38,0x3a,0x3c,0x3e,0x40,0x42,0x44,0x46,0x48,0x4a,0x4c,0x4e,0x50,0x52,0x54,0x56,0x59,0x5b,0x5d,0x5f,0x61,0x63,0x65,0x67,0x69,0x6b,0x6d,0x6f,0x71,0x72,0x74,0x76,0x77,0x79,0x7a,0x7c,0x7d,0x7f,0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87,0x87,0x87,0x88,0x88,0x88,0x88,0x88,0x88,0x88,0x87,0x87,0x87,0x86,0x85,0x84,0x83,0x82,0x81,0x80,0x7f,0x7d,0x7c,0x7a,0x79,0x77,0x76,0x74,0x72,0x71,0x6f,0x6d,0x6b,0x69,0x67,0x65,0x63,0x61,0x5f,0x5d,0x5b,0x59,0x56,0x54,0x52,0x50,0x4e,0x4c,0x4a,0x48,0x46,0x44,0x42,0x40,0x3e,0x3c,0x3a,0x38,0x36,0x34,0x32,0x30,0x2e,0x2c,0x2a,0x29,0x27,0x25,0x24,0x22,0x20,0x1f,0x1d,0x1c,0x1a,0x19,0x17,0x16,0x15,0x13,0x12,0x11,0x10,0x0e,0x0d,0x0b,0x0a,0x09,0x08,0x07,0x06,0x05,0x04,0x04,0x03,0x02,0x01,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x02,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0f,0x10,0x11,0x13,0x14,0x16,0x17,0x18,0x1a,0x1b,0x1c,0x1e,0x1f,0x21,0x23,0x24,0x26,0x28,0x29,0x2b,0x2d,0x2f,0x31,0x32,0x34,0x36,0x38,0x3a,0x3c,0x3e,0x40,0x42,0x44,0x46,0x48,0x4a,0x4c,0x4e,0x50,0x52,0x54,0x56,0x59,0x5b,0x5d,0x5f,0x61,0x63,0x65,0x67,0x68,0x6a,0x6c,0x6e,0x70,0x71,0x73,0x74,0x76,0x77,0x79,0x7a,0x7b,0x7d,0x7e,0x7f,0x80,0x81,0x81,0x82,0x83,0x84,0x84,0x85,0x85,0x85,0x85,0x85,0x85,0x85,0x84,0x84,0x83,0x82,0x81,0x81,0x80,0x7f,0x7e,0x7d,0x7b,0x7a,0x79,0x77,0x76,0x74,0x73,0x71,0x70,0x6e,0x6c,0x6a,0x68,0x67,0x65,0x63,0x61,0x5f,0x5d,0x5b,0x59,0x56,0x54,0x52,0x50,0x4e,0x4c,0x4a,0x48,0x46,0x44,0x42,0x40,0x3e,0x3c,0x3a,0x38,0x36,0x34,0x32,0x31,0x2f,0x2d,0x2b,0x29,0x28,0x26,0x24,0x23,0x21,0x1f,0x1e,0x1c,0x1b,0x1a,0x18,0x17,0x16,0x14,0x13,0x11,0x10,0x0f,0x0d,0x0c,0x0b,0x0a,0x09,0x08,0x07,0x06,0x05,0x04,0x03,0x02,0x02,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x02,0x03,0x04,0x05,0x06,0x06,0x07,0x08,0x09,0x0a,0x0c,0x0d,0x0e,0x10,0x11,0x12,0x13,0x15,0x16,0x17,0x19,0x1a,0x1c,0x1d,0x1f,0x20,0x22,0x23,0x25,0x27,0x28,0x2a,0x2c,0x2e,0x30,0x31,0x33,0x35,0x37,0x39,0x3b,0x3d,0x3f,0x40,0x42,0x44,0x46,0x48,0x4a,0x4c,0x4e,0x50,0x52,0x54,0x56,0x58,0x5b,0x5d,0x5f,0x60,0x62,0x64,0x66,0x68,0x69,0x6b,0x6d,0x6e,0x70,0x71,0x73,0x74,0x76,0x77,0x78,0x79,0x7a,0x7b,0x7c,0x7d,0x7e,0x7f,0x7f,0x80,0x80,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x80,0x80,0x7f,0x7f,0x7e,0x7d,0x7c,0x7b,0x7a,0x79,0x78,0x77,0x76,0x74,0x73,0x71,0x70,0x6e,0x6d,0x6b,0x69,0x68,0x66,0x64,0x62,0x60,0x5f,0x5d,0x5b,0x58,0x56,0x54,0x52,0x50,0x4e,0x4c,0x4a,0x48,0x46,0x44,0x42,0x40,0x3f,0x3d,0x3b,0x39,0x37,0x35,0x33,0x31,0x30,0x2e,0x2c,0x2a,0x28,0x27,0x25,0x23,0x22,0x20,0x1f,0x1d,0x1c,0x1a,0x19,0x17,0x16,0x15,0x13,0x12,0x11,0x10,0x0e,0x0d,0x0c,0x0a,0x09,0x08,0x07,0x06,0x06,0x05,0x04,0x03,0x02,0x01,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x02,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0f,0x10,0x11,0x13,0x14,0x15,0x17,0x18,0x19,0x1b,0x1c,0x1e,0x1f,0x21,0x22,0x24,0x25,0x27,0x29,0x2b,0x2c,0x2e,0x30,0x32,0x34,0x35,0x37,0x39,0x3b,0x3d,0x3f,0x41,0x43,0x45,0x46,0x48,0x4a,0x4c,0x4e,0x50,0x52,0x54,0x56,0x58,0x5a,0x5c,0x5e,0x60,0x61,0x63,0x65,0x67,0x68,0x6a,0x6c,0x6d,0x6f,0x70,0x71,0x73,0x74,0x75,0x76,0x77,0x78,0x79,0x7a,0x7b,0x7b,0x7c,0x7d,0x7d,0x7d,0x7e,0x7e,0x7e,0x7e,0x7e,0x7d,0x7d,0x7d,0x7c,0x7b,0x7b,0x7a,0x79,0x78,0x77,0x76,0x75,0x74,0x73,0x71,0x70,0x6f,0x6d,0x6c,0x6a,0x68,0x67,0x65,0x63,0x61,0x60,0x5e,0x5c,0x5a,0x58,0x56,0x54,0x52,0x50,0x4e,0x4c,0x4a,0x48,0x46,0x45,0x43,0x41,0x3f,0x3d,0x3b,0x39,0x37,0x35,0x34,0x32,0x30,0x2e,0x2c,0x2b,0x29,0x27,0x25,0x24,0x22,0x21,0x1f,0x1e,0x1c,0x1b,0x19,0x18,0x17,0x15,0x14,0x13,0x11,0x10,0x0f,0x0d,0x0c,0x0b,0x0a,0x09,0x08,0x07,0x06,0x05,0x04,0x03,0x02,0x02,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x02,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x08,0x09,0x0b,0x0c,0x0d,0x0e,0x10,0x11,0x12,0x13,0x15,0x16,0x17,0x19,0x1a,0x1c,0x1d,0x1e,0x20,0x21,0x23,0x24,0x26,0x28,0x29,0x2b,0x2d,0x2f,0x30,0x32,0x34,0x36,0x38,0x3a,0x3b,0x3d,0x3f,0x41,0x43,0x45,0x47,0x48,0x4a,0x4c,0x4e,0x50,0x52,0x54,0x56,0x58,0x5a,0x5b,0x5d,0x5f,0x61,0x62,0x64,0x66,0x67,0x69,0x6a,0x6c,0x6d,0x6e,0x70,0x71,0x72,0x73,0x74,0x75,0x76,0x77,0x77,0x78,0x78,0x79,0x79,0x7a,0x7a,0x7a,0x7a,0x7a,0x7a,0x7a,0x79,0x79,0x78,0x78,0x77,0x77,0x76,0x75,0x74,0x73,0x72,0x71,0x70,0x6e,0x6d,0x6c,0x6a,0x69,0x67,0x66,0x64,0x62,0x61,0x5f,0x5d,0x5b,0x5a,0x58,0x56,0x54,0x52,0x50,0x4e,0x4c,0x4a,0x48,0x47,0x45,0x43,0x41,0x3f,0x3d,0x3b,0x3a,0x38,0x36,0x34,0x32,0x30,0x2f,0x2d,0x2b,0x29,0x28,0x26,0x24,0x23,0x21,0x20,0x1e,0x1d,0x1c,0x1a,0x19,0x17,0x16,0x15,0x13,0x12,0x11,0x10,0x0e,0x0d,0x0c,0x0b,0x09,0x08,0x08,0x07,0x06,0x05,0x04,0x03,0x02,0x02,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x02,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0f,0x10,0x11,0x13,0x14,0x15,0x17,0x18,0x19,0x1b,0x1c,0x1d,0x1f,0x20,0x22,0x23,0x25,0x27,0x28,0x2a,0x2c,0x2d,0x2f,0x31,0x33,0x34,0x36,0x38,0x3a,0x3c,0x3d,0x3f,0x41,0x43,0x45,0x47,0x48,0x4a,0x4c,0x4e,0x50,0x51,0x53,0x55,0x57,0x59,0x5b,0x5c,0x5e,0x60,0x61,0x63,0x64,0x66,0x67,0x69,0x6a,0x6b,0x6d,0x6e,0x6f,0x70,0x71,0x72,0x73,0x73,0x74,0x75,0x75,0x76,0x76,0x76,0x77,0x77,0x77,0x77,0x77,0x76,0x76,0x76,0x75,0x75,0x74,0x73,0x73,0x72,0x71,0x70,0x6f,0x6e,0x6d,0x6b,0x6a,0x69,0x67,0x66,0x64,0x63,0x61,0x60,0x5e,0x5c,0x5b,0x59,0x57,0x55,0x53,0x51,0x50,0x4e,0x4c,0x4a,0x48,0x47,0x45,0x43,0x41,0x3f,0x3d,0x3c,0x3a,0x38,0x36,0x34,0x33,0x31,0x2f,0x2d,0x2c,0x2a,0x28,0x27,0x25,0x23,0x22,0x20,0x1f,0x1d,0x1c,0x1b,0x19,0x18,0x17,0x15,0x14,0x13,0x11,0x10,0x0f,0x0d,0x0c,0x0b,0x0a,0x09,0x08,0x07,0x06,0x05,0x04,0x03,0x02,0x02,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x02,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x08,0x09,0x0a,0x0c,0x0d,0x0e,0x10,0x11,0x12,0x13,0x14,0x16,0x17,0x18,0x1a,0x1b,0x1d,0x1e,0x1f,0x21,0x22,0x24,0x25,0x27,0x29,0x2a,0x2c,0x2e,0x2f,0x31,0x33,0x35,0x37,0x38,0x3a,0x3c,0x3e,0x3f,0x41,0x43,0x45,0x46,0x48,0x4a,0x4c,0x4e,0x4f,0x51,0x53,0x55,0x56,0x58,0x5a,0x5c,0x5d,0x5f,0x60,0x62,0x63,0x65,0x66,0x67,0x69,0x6a,0x6b,0x6c,0x6d,0x6e,0x6f,0x70,0x70,0x71,0x71,0x72,0x72,0x73,0x73,0x73,0x73,0x73,0x73,0x73,0x73,0x73,0x72,0x72,0x71,0x71,0x70,0x70,0x6f,0x6e,0x6d,0x6c,0x6b,0x6a,0x69,0x67,0x66,0x65,0x63,0x62,0x60,0x5f,0x5d,0x5c,0x5a,0x58,0x56,0x55,0x53,0x51,0x4f,0x4e,0x4c,0x4a,0x48,0x46,0x45,0x43,0x41,0x3f,0x3e,0x3c,0x3a,0x38,0x37,0x35,0x33,0x31,0x2f,0x2e,0x2c,0x2a,0x29,0x27,0x25,0x24,0x22,0x21,0x1f,0x1e,0x1d,0x1b,0x1a,0x18,0x17,0x16,0x14,0x13,0x12,0x11,0x10,0x0e,0x0d,0x0c,0x0a,0x09,0x08,0x08,0x07,0x06,0x05,0x04,0x03,0x02,0x02,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x02,0x03,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0f,0x10,0x11,0x13,0x14,0x15,0x16,0x18,0x19,0x1a,0x1c,0x1d,0x1e,0x20,0x21,0x23,0x24,0x26,0x27,0x29,0x2b,0x2c,0x2e,0x30,0x31,0x33,0x35,0x37,0x38,0x3a,0x3c,0x3e,0x3f,0x41,0x43,0x45,0x46,0x48,0x4a,0x4b,0x4d,0x4f,0x50,0x52,0x54,0x56,0x57,0x59,0x5b,0x5c,0x5e,0x5f,0x60,0x62,0x63,0x64,0x66,0x67,0x68,0x69,0x6a,0x6b,0x6c,0x6c,0x6d,0x6e,0x6e,0x6f,0x6f,0x70,0x70,0x70,0x70,0x70,0x70,0x70,0x70,0x70,0x6f,0x6f,0x6e,0x6e,0x6d,0x6c,0x6c,0x6b,0x6a,0x69,0x68,0x67,0x66,0x64,0x63,0x62,0x60,0x5f,0x5e,0x5c,0x5b,0x59,0x57,0x56,0x54,0x52,0x50,0x4f,0x4d,0x4b,0x4a,0x48,0x46,0x45,0x43,0x41,0x3f,0x3e,0x3c,0x3a,0x38,0x37,0x35,0x33,0x31,0x30,0x2e,0x2c,0x2b,0x29,0x27,0x26,0x24,0x23,0x21,0x20,0x1e,0x1d,0x1c,0x1a,0x19,0x18,0x16,0x15,0x14,0x13,0x11,0x10,0x0f,0x0d,0x0c,0x0b,0x0a,0x09,0x08,0x07,0x06,0x05,0x04,0x03,0x03,0x02,0x01,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x02,0x02,0x03,0x04,0x05,0x06,0x07,0x07,0x08,0x09,0x0a,0x0c,0x0d,0x0e,0x0f,0x11,0x12,0x13,0x14,0x15,0x17,0x18,0x19,0x1b,0x1c,0x1d,0x1f,0x20,0x22,0x23,0x25,0x26,0x28,0x29,0x2b,0x2d,0x2e,0x30,0x32,0x34,0x35,0x37,0x38,0x3a,0x3c,0x3e,0x3f,0x41,0x43,0x44,0x46,0x48,0x49,0x4b,0x4d,0x4e,0x50,0x51,0x53,0x55,0x56,0x58,0x59,0x5b,0x5c,0x5e,0x5f,0x60,0x61,0x63,0x64,0x65,0x66,0x67,0x68,0x68,0x69,0x6a,0x6b,0x6b,0x6c,0x6c,0x6c,0x6d,0x6d,0x6d,0x6d,0x6d,0x6d,0x6d,0x6c,0x6c,0x6c,0x6b,0x6b,0x6a,0x69,0x68,0x68,0x67,0x66,0x65,0x64,0x63,0x61,0x60,0x5f,0x5e,0x5c,0x5b,0x59,0x58,0x56,0x55,0x53,0x51,0x50,0x4e,0x4d,0x4b,0x49,0x48,0x46,0x44,0x43,0x41,0x3f,0x3e,0x3c,0x3a,0x38,0x37,0x35,0x34,0x32,0x30,0x2e,0x2d,0x2b,0x29,0x28,0x26,0x25,0x23,0x22,0x20,0x1f,0x1d,0x1c,0x1b,0x19,0x18,0x17,0x15,0x14,0x13,0x12,0x11,0x0f,0x0e,0x0d,0x0c,0x0a,0x09,0x08,0x07,0x07,0x06,0x05,0x04,0x03,0x02,0x02,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x02,0x03,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x10,0x11,0x12,0x13,0x15,0x16,0x17,0x18,0x1a,0x1b,0x1c,0x1e,0x1f,0x21,0x22,0x24,0x25,0x27,0x28,0x2a,0x2b,0x2d,0x2e,0x30,0x32,0x34,0x35,0x37,0x38,0x3a,0x3c,0x3e,0x3f,0x41,0x42,0x44,0x46,0x47,0x49,0x4a,0x4c,0x4d,0x4f,0x51,0x52,0x54,0x55,0x57,0x58,0x59,0x5b,0x5c,0x5e,0x5f,0x60,0x61,0x62,0x63,0x64,0x65,0x65,0x66,0x67,0x67,0x68,0x68,0x69,0x69,0x69,0x6a,0x6a,0x6a,0x6a,0x6a,0x69,0x69,0x69,0x68,0x68,0x67,0x67,0x66,0x65,0x65,0x64,0x63,0x62,0x61,0x60,0x5f,0x5e,0x5c,0x5b,0x59,0x58,0x57,0x55,0x54,0x52,0x51,0x4f,0x4d,0x4c,0x4a,0x49,0x47,0x46,0x44,0x42,0x41,0x3f,0x3e,0x3c,0x3a,0x38,0x37,0x35,0x34,0x32,0x30,0x2e,0x2d,0x2b,0x2a,0x28,0x27,0x25,0x24,0x22,0x21,0x1f,0x1e,0x1c,0x1b,0x1a,0x18,0x17,0x16,0x15,0x13,0x12,0x11,0x10,0x0e,0x0d,0x0c,0x0b,0x0a,0x09,0x08,0x07,0x06,0x05,0x04,0x03,0x03,0x02,0x01,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x02,0x02,0x03,0x04,0x05,0x06,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0e,0x0f,0x10,0x11,0x13,0x14,0x15,0x16,0x18,0x19,0x1a,0x1b,0x1d,0x1e,0x1f,0x21,0x22,0x24,0x25,0x27,0x28,0x2a,0x2b,0x2d,0x2e,0x30,0x32,0x34,0x35,0x37,0x38,0x3a,0x3c,0x3d,0x3f,0x40,0x42,0x44,0x45,0x47,0x48,0x4a,0x4b,0x4d,0x4e,0x50,0x51,0x53,0x54,0x55,0x57,0x58,0x59,0x5b,0x5c,0x5d,0x5e,0x5f,0x60,0x61,0x62,0x62,0x63,0x64,0x64,0x65,0x65,0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x65,0x65,0x64,0x64,0x63,0x62,0x62,0x61,0x60,0x5f,0x5e,0x5d,0x5c,0x5b,0x59,0x58,0x57,0x55,0x54,0x53,0x51,0x50,0x4e,0x4d,0x4b,0x4a,0x48,0x47,0x45,0x44,0x42,0x40,0x3f,0x3d,0x3c,0x3a,0x38,0x37,0x35,0x34,0x32,0x30,0x2e,0x2d,0x2b,0x2a,0x28,0x27,0x25,0x24,0x22,0x21,0x1f,0x1e,0x1d,0x1b,0x1a,0x19,0x18,0x16,0x15,0x14,0x13,0x11,0x10,0x0f,0x0e,0x0c,0x0b,0x0a,0x09,0x08,0x07,0x06,0x06,0x05,0x04,0x03,0x02,0x02,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x02,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x10,0x11,0x12,0x13,0x14,0x15,0x17,0x18,0x19,0x1a,0x1c,0x1d,0x1e,0x20,0x21,0x23,0x24,0x26,0x27,0x28,0x2a,0x2b,0x2d,0x2e,0x30,0x32,0x34,0x35,0x37,0x38,0x3a,0x3b,0x3d,0x3e,0x40,0x42,0x43,0x45,0x46,0x48,0x49,0x4a,0x4c,0x4d,0x4f,0x50,0x51,0x53,0x54,0x55,0x56,0x58,0x59,0x5a,0x5b,0x5c,0x5d,0x5e,0x5f,0x5f,0x60,0x61,0x61,0x62,0x62,0x63,0x63,0x63,0x63,0x63,0x63,0x63,0x63,0x63,0x63,0x63,0x62,0x62,0x61,0x61,0x60,0x5f,0x5f,0x5e,0x5d,0x5c,0x5b,0x5a,0x59,0x58,0x56,0x55,0x54,0x53,0x51,0x50,0x4f,0x4d,0x4c,0x4a,0x49,0x48,0x46,0x45,0x43,0x42,0x40,0x3e,0x3d,0x3b,0x3a,0x38,0x37,0x35,0x34,0x32,0x30,0x2e,0x2d,0x2b,0x2a,0x28,0x27,0x26,0x24,0x23,0x21,0x20,0x1e,0x1d,0x1c,0x1a,0x19,0x18,0x17,0x15,0x14,0x13,0x12,0x11,0x10,0x0e,0x0d,0x0c,0x0b,0x0a,0x09,0x08,0x07,0x06,0x05,0x04,0x03,0x02,0x02,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x02,0x03,0x04,0x05,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0f,0x10,0x11,0x12,0x13,0x15,0x16,0x17,0x18,0x19,0x1b,0x1c,0x1d,0x1f,0x20,0x21,0x23,0x24,0x26,0x27,0x28,0x2a,0x2b,0x2d,0x2e,0x30,0x32,0x34,0x35,0x37,0x38,0x39,0x3b,0x3d,0x3e,0x40,0x41,0x42,0x44,0x45,0x47,0x48,0x4a,0x4b,0x4c,0x4e,0x4f,0x50,0x51,0x52,0x53,0x55,0x56,0x57,0x58,0x59,0x5a,0x5b,0x5c,0x5c,0x5d,0x5e,0x5e,0x5f,0x5f,0x5f,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x5f,0x5f,0x5f,0x5e,0x5e,0x5d,0x5c,0x5c,0x5b,0x5a,0x59,0x58,0x57,0x56,0x55,0x53,0x52,0x51,0x50,0x4f,0x4e,0x4c,0x4b,0x4a,0x48,0x47,0x45,0x44,0x42,0x41,0x40,0x3e,0x3d,0x3b,0x39,0x38,0x37,0x35,0x34,0x32,0x30,0x2e,0x2d,0x2b,0x2a,0x28,0x27,0x26,0x24,0x23,0x21,0x20,0x1f,0x1d,0x1c,0x1b,0x19,0x18,0x17,0x16,0x15,0x13,0x12,0x11,0x10,0x0f,0x0d,0x0c,0x0b,0x0a,0x09,0x08,0x07,0x06,0x05,0x05,0x04,0x03,0x02,0x01,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x02,0x02,0x03,0x04,0x05,0x06,0x07,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0e,0x0f,0x10,0x11,0x13,0x14,0x15,0x16,0x17,0x19,0x1a,0x1b,0x1c,0x1e,0x1f,0x20,0x22,0x23,0x24,0x26,0x27,0x29,0x2a,0x2b,0x2d,0x2e,0x30,0x32,0x33,0x35,0x36,0x38,0x39,0x3b,0x3c,0x3e,0x3f,0x40,0x42,0x43,0x45,0x46,0x47,0x49,0x4a,0x4b,0x4c,0x4e,0x4f,0x50,0x51,0x52,0x53,0x54,0x55,0x56,0x57,0x58,0x59,0x59,0x5a,0x5b,0x5b,0x5c,0x5c,0x5c,0x5d,0x5d,0x5d,0x5d,0x5d,0x5d,0x5d,0x5d,0x5d,0x5c,0x5c,0x5c,0x5b,0x5b,0x5a,0x59,0x59,0x58,0x57,0x56,0x55,0x54,0x53,0x52,0x51,0x50,0x4f,0x4e,0x4c,0x4b,0x4a,0x49,0x47,0x46,0x45,0x43,0x42,0x40,0x3f,0x3e,0x3c,0x3b,0x39,0x38,0x36,0x35,0x33,0x32,0x30,0x2e,0x2d,0x2b,0x2a,0x29,0x27,0x26,0x24,0x23,0x22,0x20,0x1f,0x1e,0x1c,0x1b,0x1a,0x19,0x17,0x16,0x15,0x14,0x13,0x11,0x10,0x0f,0x0e,0x0c,0x0b,0x0a,0x09,0x08,0x07,0x07,0x06,0x05,0x04,0x03,0x02,0x02,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x02,0x03,0x04,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,0x11,0x12,0x13,0x14,0x15,0x16,0x18,0x19,0x1a,0x1b,0x1c,0x1e,0x1f,0x20,0x22,0x23,0x25,0x26,0x27,0x29,0x2a,0x2b,0x2d,0x2e,0x30,0x32,0x33,0x35,0x36,0x37,0x39,0x3a,0x3c,0x3d,0x3e,0x40,0x41,0x42,0x44,0x45,0x46,0x48,0x49,0x4a,0x4b,0x4c,0x4d,0x4e,0x4f,0x50,0x51,0x52,0x53,0x54,0x55,0x56,0x56,0x57,0x57,0x58,0x59,0x59,0x59,0x5a,0x5a,0x5a,0x5a,0x5a,0x5a,0x5a,0x5a,0x5a,0x59,0x59,0x59,0x58,0x57,0x57,0x56,0x56,0x55,0x54,0x53,0x52,0x51,0x50,0x4f,0x4e,0x4d,0x4c,0x4b,0x4a,0x49,0x48,0x46,0x45,0x44,0x42,0x41,0x40,0x3e,0x3d,0x3c,0x3a,0x39,0x37,0x36,0x35,0x33,0x32,0x30,0x2e,0x2d,0x2b,0x2a,0x29,0x27,0x26,0x25,0x23,0x22,0x20,0x1f,0x1e,0x1c,0x1b,0x1a,0x19,0x18,0x16,0x15,0x14,0x13,0x12,0x11,0x0f,0x0e,0x0d,0x0c,0x0b,0x0a,0x09,0x08,0x07,0x06,0x05,0x04,0x04,0x03,0x02,0x01,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x02,0x02,0x03,0x04,0x05,0x06,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x10,0x11,0x12,0x13,0x14,0x15,0x17,0x18,0x19,0x1a,0x1b,0x1d,0x1e,0x1f,0x21,0x22,0x23,0x25,0x26,0x27,0x29,0x2a,0x2b,0x2d,0x2e,0x30,0x31,0x33,0x34,0x35,0x37,0x38,0x3a,0x3b,0x3c,0x3e,0x3f,0x40,0x41,0x43,0x44,0x45,0x46,0x48,0x49,0x4a,0x4b,0x4c,0x4d,0x4e,0x4f,0x4f,0x51,0x51,0x52,0x53,0x53,0x54,0x54,0x55,0x55,0x56,0x56,0x56,0x57,0x57,0x57,0x57,0x57,0x57,0x57,0x56,0x56,0x56,0x55,0x55,0x54,0x54,0x53,0x53,0x52,0x51,0x51,0x4f,0x4f,0x4e,0x4d,0x4c,0x4b,0x4a,0x49,0x48,0x46,0x45,0x44,0x43,0x41,0x40,0x3f,0x3e,0x3c,0x3b,0x3a,0x38,0x37,0x35,0x34,0x33,0x31,0x30,0x2e,0x2d,0x2b,0x2a,0x29,0x27,0x26,0x25,0x23,0x22,0x21,0x1f,0x1e,0x1d,0x1b,0x1a,0x19,0x18,0x17,0x15,0x14,0x13,0x12,0x11,0x10,0x0e,0x0d,0x0c,0x0b,0x0a,0x09,0x08,0x07,0x06,0x06,0x05,0x04,0x03,0x02,0x02,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x02,0x03,0x03,0x04,0x05,0x06,0x07,0x08,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0f,0x10,0x11,0x12,0x13,0x14,0x16,0x17,0x18,0x19,0x1a,0x1c,0x1d,0x1e,0x1f,0x21,0x22,0x23,0x25,0x26,0x27,0x28,0x2a,0x2b,0x2c,0x2e,0x2f,0x31,0x32,0x34,0x35,0x36,0x38,0x39,0x3a,0x3c,0x3d,0x3e,0x3f,0x40,0x42,0x43,0x44,0x45,0x46,0x47,0x48,0x49,0x4a,0x4b,0x4c,0x4d,0x4e,0x4f,0x4f,0x50,0x51,0x51,0x52,0x52,0x52,0x53,0x53,0x53,0x54,0x54,0x54,0x54,0x54,0x54,0x54,0x53,0x53,0x53,0x52,0x52,0x52,0x51,0x51,0x50,0x4f,0x4f,0x4e,0x4d,0x4c,0x4b,0x4a,0x49,0x48,0x47,0x46,0x45,0x44,0x43,0x42,0x40,0x3f,0x3e,0x3d,0x3c,0x3a,0x39,0x38,0x36,0x35,0x34,0x32,0x31,0x2f,0x2e,0x2c,0x2b,0x2a,0x28,0x27,0x26,0x25,0x23,0x22,0x21,0x1f,0x1e,0x1d,0x1c,0x1a,0x19,0x18,0x17,0x16,0x14,0x13,0x12,0x11,0x10,0x0f,0x0d,0x0c,0x0b,0x0a,0x09,0x08,0x08,0x07,0x06,0x05,0x04,0x03,0x03,0x02,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x02,0x03,0x04,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,0x10,0x11,0x12,0x14,0x15,0x16,0x17,0x18,0x19,0x1a,0x1c,0x1d,0x1e,0x1f,0x21,0x22,0x23,0x24,0x26,0x27,0x28,0x2a,0x2b,0x2c,0x2e,0x2f,0x31,0x32,0x33,0x34,0x36,0x37,0x38,0x3a,0x3b,0x3c,0x3d,0x3e,0x40,0x41,0x42,0x43,0x44,0x45,0x46,0x47,0x48,0x49,0x4a,0x4a,0x4b,0x4c,0x4d,0x4d,0x4e,0x4e,0x4f,0x4f,0x50,0x50,0x50,0x51,0x51,0x51,0x51,0x51,0x51,0x51,0x51,0x51,0x50,0x50,0x50,0x4f,0x4f,0x4e,0x4e,0x4d,0x4d,0x4c,0x4b,0x4a,0x4a,0x49,0x48,0x47,0x46,0x45,0x44,0x43,0x42,0x41,0x40,0x3e,0x3d,0x3c,0x3b,0x3a,0x38,0x37,0x36,0x34,0x33,0x32,0x31,0x2f,0x2e,0x2c,0x2b,0x2a,0x28,0x27,0x26,0x24,0x23,0x22,0x21,0x1f,0x1e,0x1d,0x1c,0x1a,0x19,0x18,0x17,0x16,0x15,0x14,0x12,0x11,0x10,0x0f,0x0e,0x0d,0x0c,0x0b,0x0a,0x09,0x08,0x07,0x06,0x05,0x04,0x04,0x03,0x02,0x01,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x02,0x02,0x03,0x04,0x05,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,0x10,0x11,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1a,0x1c,0x1d,0x1e,0x1f,0x21,0x22,0x23,0x24,0x26,0x27,0x28,0x29,0x2b,0x2c,0x2d,0x2f,0x30,0x31,0x33,0x34,0x35,0x36,0x38,0x39,0x3a,0x3b,0x3c,0x3d,0x3e,0x40,0x41,0x41,0x42,0x43,0x44,0x45,0x46,0x47,0x48,0x49,0x49,0x4a,0x4a,0x4b,0x4c,0x4c,0x4d,0x4d,0x4d,0x4e,0x4e,0x4e,0x4e,0x4e,0x4e,0x4e,0x4e,0x4e,0x4e,0x4e,0x4d,0x4d,0x4d,0x4c,0x4c,0x4b,0x4a,0x4a,0x49,0x49,0x48,0x47,0x46,0x45,0x44,0x43,0x42,0x41,0x41,0x40,0x3e,0x3d,0x3c,0x3b,0x3a,0x39,0x38,0x36,0x35,0x34,0x33,0x31,0x30,0x2f,0x2d,0x2c,0x2b,0x29,0x28,0x27,0x26,0x24,0x23,0x22,0x21,0x1f,0x1e,0x1d,0x1c,0x1a,0x19,0x18,0x17,0x16,0x15,0x14,0x13,0x11,0x10,0x0f,0x0e,0x0d,0x0c,0x0b,0x0a,0x09,0x08,0x07,0x06,0x05,0x05,0x04,0x03,0x02,0x02,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x02,0x03,0x03,0x04,0x05,0x06,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1a,0x1c,0x1d,0x1e,0x1f,0x20,0x21,0x23,0x24,0x25,0x27,0x28,0x29,0x2a,0x2b,0x2d,0x2e,0x2f,0x31,0x32,0x33,0x34,0x36,0x37,0x38,0x39,0x3a,0x3b,0x3c,0x3d,0x3e,0x3f,0x40,0x41,0x42,0x43,0x44,0x45,0x45,0x46,0x47,0x47,0x48,0x49,0x49,0x4a,0x4a,0x4a,0x4a,0x4b,0x4b,0x4b,0x4b,0x4c,0x4c,0x4c,0x4b,0x4b,0x4b,0x4b,0x4a,0x4a,0x4a,0x4a,0x49,0x49,0x48,0x47,0x47,0x46,0x45,0x45,0x44,0x43,0x42,0x41,0x40,0x3f,0x3e,0x3d,0x3c,0x3b,0x3a,0x39,0x38,0x37,0x36,0x34,0x33,0x32,0x31,0x2f,0x2e,0x2d,0x2b,0x2a,0x29,0x28,0x27,0x25,0x24,0x23,0x21,0x20,0x1f,0x1e,0x1d,0x1c,0x1a,0x19,0x18,0x17,0x16,0x15,0x14,0x13,0x12,0x11,0x0f,0x0e,0x0d,0x0c,0x0b,0x0a,0x09,0x08,0x07,0x06,0x06,0x05,0x04,0x03,0x03,0x02,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x02,0x03,0x03,0x04,0x05,0x06,0x07,0x08,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1a,0x1c,0x1d,0x1e,0x1f,0x20,0x21,0x23,0x24,0x25,0x26,0x27,0x29,0x2a,0x2b,0x2c,0x2e,0x2f,0x30,0x31,0x32,0x34,0x35,0x36,0x37,0x38,0x39,0x3a,0x3b,0x3c,0x3d,0x3e,0x3f,0x40,0x41,0x41,0x42,0x43,0x44,0x44,0x45,0x45,0x46,0x46,0x47,0x47,0x48,0x48,0x48,0x48,0x49,0x49,0x49,0x49,0x49,0x49,0x49,0x48,0x48,0x48,0x48,0x47,0x47,0x46,0x46,0x45,0x45,0x44,0x44,0x43,0x42,0x41,0x41,0x40,0x3f,0x3e,0x3d,0x3c,0x3b,0x3a,0x39,0x38,0x37,0x36,0x35,0x34,0x32,0x31,0x30,0x2f,0x2e,0x2c,0x2b,0x2a,0x29,0x27,0x26,0x25,0x24,0x23,0x21,0x20,0x1f,0x1e,0x1d,0x1c,0x1a,0x19,0x18,0x17,0x16,0x15,0x14,0x13,0x12,0x11,0x10,0x0e,0x0d,0x0c,0x0b,0x0a,0x09,0x08,0x08,0x07,0x06,0x05,0x04,0x03,0x03,0x02,0x01,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x02,0x02,0x03,0x04,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0a,0x0b,0x0c,0x0d,0x0f,0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1a,0x1c,0x1d,0x1e,0x1f,0x20,0x21,0x22,0x24,0x25,0x26,0x27,0x28,0x29,0x2a,0x2c,0x2d,0x2e,0x2f,0x30,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3a,0x3b,0x3c,0x3d,0x3e,0x3e,0x3f,0x40,0x40,0x41,0x42,0x42,0x43,0x43,0x44,0x44,0x45,0x45,0x45,0x46,0x46,0x46,0x46,0x46,0x46,0x46,0x46,0x46,0x46,0x46,0x45,0x45,0x45,0x44,0x44,0x43,0x43,0x42,0x42,0x41,0x40,0x40,0x3f,0x3e,0x3e,0x3d,0x3c,0x3b,0x3a,0x39,0x38,0x37,0x36,0x35,0x34,0x33,0x32,0x30,0x2f,0x2e,0x2d,0x2c,0x2a,0x29,0x28,0x27,0x26,0x25,0x24,0x22,0x21,0x20,0x1f,0x1e,0x1d,0x1c,0x1a,0x19,0x18,0x17,0x16,0x15,0x14,0x13,0x12,0x11,0x10,0x0f,0x0d,0x0c,0x0b,0x0a,0x0a,0x09,0x08,0x07,0x06,0x05,0x04,0x04,0x03,0x02,0x02,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x02,0x02,0x03,0x04,0x05,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0b,0x0d,0x0e,0x0f,0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1a,0x1b,0x1c,0x1e,0x1f,0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x28,0x29,0x2a,0x2b,0x2c,0x2d,0x2e,0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x38,0x39,0x3a,0x3b,0x3c,0x3d,0x3d,0x3e,0x3f,0x3f,0x40,0x40,0x41,0x41,0x42,0x42,0x43,0x43,0x43,0x43,0x43,0x44,0x44,0x44,0x44,0x44,0x43,0x43,0x43,0x43,0x43,0x42,0x42,0x41,0x41,0x40,0x40,0x3f,0x3f,0x3e,0x3d,0x3d,0x3c,0x3b,0x3a,0x39,0x38,0x38,0x37,0x36,0x35,0x34,0x33,0x32,0x31,0x30,0x2e,0x2d,0x2c,0x2b,0x2a,0x29,0x28,0x26,0x25,0x24,0x23,0x22,0x21,0x20,0x1f,0x1e,0x1c,0x1b,0x1a,0x19,0x18,0x17,0x16,0x15,0x14,0x13,0x12,0x11,0x10,0x0f,0x0e,0x0d,0x0b,0x0b,0x0a,0x09,0x08,0x07,0x06,0x05,0x05,0x04,0x03,0x02,0x02,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x02,0x03,0x03,0x04,0x05,0x06,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1a,0x1b,0x1c,0x1d,0x1e,0x1f,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2a,0x2b,0x2c,0x2e,0x2f,0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x36,0x37,0x38,0x39,0x3a,0x3a,0x3b,0x3c,0x3c,0x3d,0x3d,0x3e,0x3e,0x3f,0x3f,0x40,0x40,0x40,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x40,0x40,0x40,0x3f,0x3f,0x3e,0x3e,0x3d,0x3d,0x3c,0x3c,0x3b,0x3a,0x3a,0x39,0x38,0x37,0x36,0x36,0x35,0x34,0x33,0x32,0x31,0x30,0x2f,0x2e,0x2c,0x2b,0x2a,0x29,0x28,0x27,0x26,0x25,0x24,0x23,0x22,0x21,0x1f,0x1e,0x1d,0x1c,0x1b,0x1a,0x19,0x18,0x17,0x16,0x15,0x14,0x13,0x12,0x11,0x10,0x0f,0x0e,0x0d,0x0c,0x0b,0x0a,0x09,0x08,0x07,0x06,0x06,0x05,0x04,0x03,0x03,0x02,0x01,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x02,0x03,0x03,0x04,0x05,0x06,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1a,0x1b,0x1c,0x1d,0x1e,0x1f,0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x29,0x29,0x2a,0x2c,0x2d,0x2e,0x2f,0x30,0x31,0x32,0x33,0x34,0x34,0x35,0x36,0x37,0x37,0x38,0x39,0x39,0x3a,0x3a,0x3b,0x3b,0x3c,0x3d,0x3d,0x3d,0x3e,0x3e,0x3e,0x3e,0x3e,0x3f,0x3f,0x3f,0x3f,0x3f,0x3e,0x3e,0x3e,0x3e,0x3e,0x3d,0x3d,0x3d,0x3c,0x3b,0x3b,0x3a,0x3a,0x39,0x39,0x38,0x37,0x37,0x36,0x35,0x34,0x34,0x33,0x32,0x31,0x30,0x2f,0x2e,0x2d,0x2c,0x2a,0x29,0x29,0x27,0x26,0x25,0x24,0x23,0x22,0x21,0x20,0x1f,0x1e,0x1d,0x1c,0x1b,0x1a,0x19,0x18,0x17,0x16,0x15,0x14,0x13,0x12,0x11,0x10,0x0f,0x0e,0x0d,0x0c,0x0b,0x0a,0x09,0x08,0x07,0x06,0x06,0x05,0x04,0x03,0x03,0x02,0x01,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x02,0x02,0x03,0x04,0x04,0x05,0x06,0x07,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1a,0x1b,0x1c,0x1d,0x1e,0x1f,0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2a,0x2b,0x2c,0x2d,0x2e,0x2f,0x30,0x31,0x32,0x32,0x33,0x34,0x35,0x35,0x36,0x36,0x37,0x38,0x38,0x39,0x39,0x3a,0x3a,0x3a,0x3b,0x3b,0x3b,0x3c,0x3c,0x3c,0x3c,0x3c,0x3c,0x3c,0x3c,0x3c,0x3c,0x3c,0x3b,0x3b,0x3b,0x3a,0x3a,0x3a,0x39,0x39,0x38,0x38,0x37,0x36,0x36,0x35,0x35,0x34,0x33,0x32,0x32,0x31,0x30,0x2f,0x2e,0x2d,0x2c,0x2b,0x2a,0x29,0x28,0x27,0x26,0x25,0x24,0x23,0x22,0x21,0x20,0x1f,0x1e,0x1d,0x1c,0x1b,0x1a,0x19,0x18,0x17,0x16,0x15,0x14,0x13,0x12,0x11,0x10,0x0f,0x0e,0x0d,0x0c,0x0b,0x0a,0x09,0x08,0x07,0x07,0x06,0x05,0x04,0x04,0x03,0x02,0x02,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x02,0x02,0x03,0x04,0x04,0x05,0x06,0x07,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x18,0x19,0x1a,0x1b,0x1c,0x1d,0x1e,0x1f,0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2a,0x2b,0x2c,0x2d,0x2d,0x2e,0x2f,0x30,0x31,0x32,0x32,0x33,0x34,0x34,0x35,0x35,0x36,0x36,0x37,0x37,0x38,0x38,0x38,0x39,0x39,0x39,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x3a,0x39,0x39,0x39,0x38,0x38,0x38,0x37,0x37,0x36,0x36,0x35,0x35,0x34,0x34,0x33,0x32,0x32,0x31,0x30,0x2f,0x2e,0x2d,0x2d,0x2c,0x2b,0x2a,0x29,0x28,0x27,0x26,0x25,0x24,0x23,0x22,0x21,0x20,0x1f,0x1e,0x1d,0x1c,0x1b,0x1a,0x19,0x18,0x18,0x17,0x16,0x15,0x14,0x13,0x12,0x11,0x10,0x0f,0x0e,0x0d,0x0c,0x0b,0x0a,0x09,0x08,0x07,0x07,0x06,0x05,0x04,0x04,0x03,0x02,0x02,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x02,0x02,0x03,0x04,0x05,0x05,0x06,0x07,0x08,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,0x10,0x11,0x12,0x13,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1a,0x1b,0x1c,0x1d,0x1e,0x1f,0x20,0x21,0x22,0x23,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2a,0x2b,0x2b,0x2c,0x2d,0x2e,0x2e,0x2f,0x30,0x31,0x32,0x32,0x33,0x33,0x34,0x34,0x35,0x35,0x35,0x36,0x36,0x37,0x37,0x37,0x37,0x37,0x37,0x37,0x37,0x37,0x37,0x37,0x37,0x37,0x37,0x37,0x36,0x36,0x35,0x35,0x35,0x34,0x34,0x33,0x33,0x32,0x32,0x31,0x30,0x2f,0x2e,0x2e,0x2d,0x2c,0x2b,0x2b,0x2a,0x29,0x28,0x27,0x26,0x25,0x24,0x23,0x23,0x22,0x21,0x20,0x1f,0x1e,0x1d,0x1c,0x1b,0x1a,0x19,0x18,0x17,0x16,0x15,0x14,0x13,0x13,0x12,0x11,0x10,0x0f,0x0e,0x0d,0x0c,0x0b,0x0a,0x09,0x08,0x08,0x07,0x06,0x05,0x05,0x04,0x03,0x02,0x02,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x02,0x02,0x03,0x04,0x05,0x05,0x06,0x07,0x08,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,0x10,0x11,0x12,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1a,0x1b,0x1c,0x1c,0x1d,0x1e,0x1f,0x20,0x21,0x22,0x23,0x24,0x25,0x25,0x26,0x27,0x28,0x29,0x29,0x2a,0x2b,0x2c,0x2c,0x2d,0x2e,0x2e,0x2f,0x30,0x31,0x31,0x32,0x32,0x32,0x33,0x33,0x34,0x34,0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x35,0x34,0x34,0x33,0x33,0x32,0x32,0x32,0x31,0x31,0x30,0x2f,0x2e,0x2e,0x2d,0x2c,0x2c,0x2b,0x2a,0x29,0x29,0x28,0x27,0x26,0x25,0x25,0x24,0x23,0x22,0x21,0x20,0x1f,0x1e,0x1d,0x1c,0x1c,0x1b,0x1a,0x19,0x18,0x17,0x16,0x15,0x14,0x13,0x12,0x12,0x11,0x10,0x0f,0x0e,0x0d,0x0c,0x0b,0x0a,0x09,0x08,0x08,0x07,0x06,0x05,0x05,0x04,0x03,0x02,0x02,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x02,0x02,0x03,0x04,0x05,0x05,0x06,0x07,0x08,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0d,0x0e,0x0f,0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x18,0x19,0x1a,0x1b,0x1c,0x1d,0x1e,0x1f,0x20,0x20,0x21,0x22,0x23,0x24,0x25,0x25,0x26,0x27,0x28,0x28,0x29,0x2a,0x2a,0x2b,0x2c,0x2c,0x2d,0x2d,0x2e,0x2f,0x2f,0x30,0x30,0x31,0x31,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x33,0x33,0x33,0x33,0x33,0x32,0x32,0x32,0x32,0x32,0x32,0x32,0x31,0x31,0x30,0x30,0x2f,0x2f,0x2e,0x2d,0x2d,0x2c,0x2c,0x2b,0x2a,0x2a,0x29,0x28,0x28,0x27,0x26,0x25,0x25,0x24,0x23,0x22,0x21,0x20,0x20,0x1f,0x1e,0x1d,0x1c,0x1b,0x1a,0x19,0x18,0x18,0x17,0x16,0x15,0x14,0x13,0x12,0x11,0x10,0x0f,0x0e,0x0d,0x0d,0x0c,0x0b,0x0a,0x09,0x08,0x08,0x07,0x06,0x05,0x05,0x04,0x03,0x02,0x02,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x02,0x03,0x03,0x04,0x05,0x05,0x06,0x07,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0c,0x0d,0x0e,0x0f,0x10,0x11,0x12,0x13,0x14,0x15,0x15,0x16,0x17,0x18,0x19,0x1a,0x1b,0x1b,0x1c,0x1d,0x1e,0x1f,0x20,0x20,0x21,0x22,0x23,0x23,0x24,0x25,0x26,0x27,0x27,0x28,0x29,0x29,0x2a,0x2a,0x2b,0x2b,0x2c,0x2c,0x2d,0x2d,0x2e,0x2e,0x2f,0x2f,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x31,0x31,0x31,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x2f,0x2f,0x2e,0x2e,0x2d,0x2d,0x2c,0x2c,0x2b,0x2b,0x2a,0x2a,0x29,0x29,0x28,0x27,0x27,0x26,0x25,0x24,0x23,0x23,0x22,0x21,0x20,0x20,0x1f,0x1e,0x1d,0x1c,0x1b,0x1b,0x1a,0x19,0x18,0x17,0x16,0x15,0x15,0x14,0x13,0x12,0x11,0x10,0x0f,0x0e,0x0d,0x0c,0x0c,0x0b,0x0a,0x09,0x08,0x07,0x07,0x06,0x05,0x05,0x04,0x03,0x03,0x02,0x01,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x02,0x03,0x03,0x04,0x05,0x05,0x06,0x07,0x07,0x08,0x09,0x0a,0x0b,0x0b,0x0c,0x0d,0x0e,0x0f,0x10,0x11,0x12,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x18,0x19,0x1a,0x1b,0x1c,0x1d,0x1d,0x1e,0x1f,0x1f,0x20,0x21,0x22,0x23,0x23,0x24,0x25,0x25,0x26,0x27,0x27,0x28,0x28,0x29,0x29,0x2a,0x2a,0x2b,0x2b,0x2b,0x2c,0x2c,0x2d,0x2d,0x2d,0x2d,0x2d,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2e,0x2d,0x2d,0x2d,0x2d,0x2d,0x2c,0x2c,0x2b,0x2b,0x2b,0x2a,0x2a,0x29,0x29,0x28,0x28,0x27,0x27,0x26,0x25,0x25,0x24,0x23,0x23,0x22,0x21,0x20,0x1f,0x1f,0x1e,0x1d,0x1d,0x1c,0x1b,0x1a,0x19,0x18,0x18,0x17,0x16,0x15,0x14,0x13,0x12,0x12,0x11,0x10,0x0f,0x0e,0x0d,0x0c,0x0b,0x0b,0x0a,0x09,0x08,0x07,0x07,0x06,0x05,0x05,0x04,0x03,0x03,0x02,0x01,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x02,0x02,0x03,0x03,0x04,0x05,0x05,0x06,0x07,0x07,0x08,0x09,0x0a,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,0x10,0x11,0x11,0x12,0x13,0x14,0x15,0x15,0x16,0x17,0x18,0x19,0x19,0x1a,0x1b,0x1c,0x1d,0x1d,0x1e,0x1f,0x1f,0x20,0x21,0x21,0x22,0x23,0x23,0x24,0x25,0x25,0x26,0x26,0x27,0x27,0x28,0x28,0x29,0x29,0x29,0x2a,0x2a,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2c,0x2c,0x2c,0x2c,0x2c,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2b,0x2a,0x2a,0x29,0x29,0x29,0x28,0x28,0x27,0x27,0x26,0x26,0x25,0x25,0x24,0x23,0x23,0x22,0x21,0x21,0x20,0x1f,0x1f,0x1e,0x1d,0x1d,0x1c,0x1b,0x1a,0x19,0x19,0x18,0x17,0x16,0x15,0x15,0x14,0x13,0x12,0x11,0x11,0x10,0x0f,0x0e,0x0d,0x0c,0x0b,0x0a,0x0a,0x09,0x08,0x07,0x07,0x06,0x05,0x05,0x04,0x03,0x03,0x02,0x02,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x02,0x02,0x03,0x03,0x04,0x05,0x05,0x06,0x07,0x07,0x08,0x09,0x0a,0x0a,0x0b,0x0c,0x0d,0x0d,0x0e,0x0f,0x10,0x11,0x12,0x13,0x13,0x14,0x15,0x16,0x17,0x17,0x18,0x19,0x1a,0x1a,0x1b,0x1c,0x1c,0x1d,0x1e,0x1f,0x1f,0x20,0x21,0x21,0x22,0x22,0x23,0x23,0x24,0x25,0x25,0x25,0x26,0x26,0x27,0x27,0x27,0x28,0x28,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x2a,0x2a,0x2a,0x2a,0x2a,0x29,0x29,0x29,0x29,0x29,0x29,0x29,0x28,0x28,0x27,0x27,0x27,0x26,0x26,0x25,0x25,0x25,0x24,0x23,0x23,0x22,0x22,0x21,0x21,0x20,0x1f,0x1f,0x1e,0x1d,0x1c,0x1c,0x1b,0x1a,0x1a,0x19,0x18,0x17,0x17,0x16,0x15,0x14,0x13,0x13,0x12,0x11,0x10,0x0f,0x0e,0x0d,0x0d,0x0c,0x0b,0x0a,0x0a,0x09,0x08,0x07,0x07,0x06,0x05,0x05,0x04,0x03,0x03,0x02,0x02,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x02,0x02,0x03,0x03,0x04,0x05,0x05,0x06,0x06,0x07,0x08,0x09,0x09,0x0a,0x0b,0x0c,0x0c,0x0d,0x0e,0x0f,0x10,0x11,0x11,0x12,0x13,0x14,0x14,0x15,0x16,0x17,0x17,0x18,0x19,0x1a,0x1a,0x1b,0x1c,0x1c,0x1d,0x1e,0x1e,0x1f,0x1f,0x20,0x21,0x21,0x22,0x22,0x23,0x23,0x24,0x24,0x25,0x25,0x25,0x26,0x26,0x27,0x27,0x27,0x27,0x27,0x27,0x27,0x27,0x28,0x28,0x28,0x28,0x28,0x27,0x27,0x27,0x27,0x27,0x27,0x27,0x27,0x26,0x26,0x25,0x25,0x25,0x24,0x24,0x23,0x23,0x22,0x22,0x21,0x21,0x20,0x1f,0x1f,0x1e,0x1e,0x1d,0x1c,0x1c,0x1b,0x1a,0x1a,0x19,0x18,0x17,0x17,0x16,0x15,0x14,0x14,0x13,0x12,0x11,0x11,0x10,0x0f,0x0e,0x0d,0x0c,0x0c,0x0b,0x0a,0x09,0x09,0x08,0x07,0x06,0x06,0x05,0x05,0x04,0x03,0x03,0x02,0x02,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x02,0x02,0x03,0x04,0x05,0x05,0x06,0x06,0x07,0x08,0x08,0x09,0x0a,0x0b,0x0b,0x0c,0x0d,0x0e,0x0f,0x0f,0x10,0x11,0x12,0x13,0x13,0x14,0x15,0x15,0x16,0x17,0x17,0x18,0x19,0x1a,0x1a,0x1b,0x1c,0x1c,0x1d,0x1d,0x1e,0x1e,0x1f,0x1f,0x20,0x20,0x21,0x21,0x22,0x22,0x23,0x23,0x23,0x24,0x24,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x26,0x26,0x26,0x26,0x26,0x26,0x26,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x24,0x24,0x23,0x23,0x23,0x22,0x22,0x21,0x21,0x20,0x20,0x1f,0x1f,0x1e,0x1e,0x1d,0x1d,0x1c,0x1c,0x1b,0x1a,0x1a,0x19,0x18,0x17,0x17,0x16,0x15,0x15,0x14,0x13,0x13,0x12,0x11,0x10,0x0f,0x0f,0x0e,0x0d,0x0c,0x0b,0x0b,0x0a,0x09,0x08,0x08,0x07,0x06,0x06,0x05,0x05,0x04,0x03,0x02,0x02,0x01,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x02,0x02,0x03,0x04,0x04,0x05,0x06,0x06,0x07,0x08,0x08,0x09,0x0a,0x0a,0x0b,0x0c,0x0c,0x0d,0x0e,0x0f,0x10,0x11,0x11,0x12,0x13,0x13,0x14,0x15,0x16,0x16,0x17,0x17,0x18,0x19,0x19,0x1a,0x1a,0x1b,0x1c,0x1c,0x1d,0x1d,0x1e,0x1e,0x1f,0x1f,0x20,0x20,0x21,0x21,0x21,0x22,0x22,0x22,0x23,0x23,0x23,0x23,0x23,0x23,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x23,0x23,0x23,0x23,0x23,0x23,0x22,0x22,0x22,0x21,0x21,0x21,0x20,0x20,0x1f,0x1f,0x1e,0x1e,0x1d,0x1d,0x1c,0x1c,0x1b,0x1a,0x1a,0x19,0x19,0x18,0x17,0x17,0x16,0x16,0x15,0x14,0x13,0x13,0x12,0x11,0x11,0x10,0x0f,0x0e,0x0d,0x0c,0x0c,0x0b,0x0a,0x0a,0x09,0x08,0x08,0x07,0x06,0x06,0x05,0x04,0x04,0x03,0x02,0x02,0x01,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x02,0x02,0x03,0x03,0x04,0x05,0x05,0x06,0x07,0x07,0x08,0x09,0x09,0x0a,0x0b,0x0b,0x0c,0x0d,0x0e,0x0e,0x0f,0x10,0x11,0x11,0x12,0x13,0x13,0x14,0x15,0x16,0x16,0x17,0x17,0x18,0x19,0x19,0x1a,0x1a,0x1b,0x1b,0x1c,0x1c,0x1d,0x1d,0x1e,0x1e,0x1e,0x1f,0x1f,0x1f,0x20,0x20,0x21,0x21,0x21,0x21,0x21,0x21,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x21,0x21,0x21,0x21,0x21,0x21,0x20,0x20,0x1f,0x1f,0x1f,0x1e,0x1e,0x1e,0x1d,0x1d,0x1c,0x1c,0x1b,0x1b,0x1a,0x1a,0x19,0x19,0x18,0x17,0x17,0x16,0x16,0x15,0x14,0x13,0x13,0x12,0x11,0x11,0x10,0x0f,0x0e,0x0e,0x0d,0x0c,0x0b,0x0b,0x0a,0x09,0x09,0x08,0x07,0x07,0x06,0x05,0x05,0x04,0x03,0x03,0x02,0x02,0x01,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x02,0x02,0x03,0x03,0x04,0x05,0x05,0x06,0x06,0x07,0x08,0x08,0x09,0x0a,0x0a,0x0b,0x0c,0x0c,0x0d,0x0e,0x0f,0x10,0x10,0x11,0x11,0x12,0x13,0x13,0x14,0x14,0x15,0x16,0x16,0x17,0x17,0x18,0x19,0x19,0x1a,0x1a,0x1b,0x1b,0x1b,0x1c,0x1c,0x1d,0x1d,0x1e,0x1e,0x1e,0x1e,0x1f,0x1f,0x1f,0x1f,0x1f,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x1f,0x1f,0x1f,0x1f,0x1f,0x1e,0x1e,0x1e,0x1e,0x1d,0x1d,0x1c,0x1c,0x1b,0x1b,0x1b,0x1a,0x1a,0x19,0x19,0x18,0x17,0x17,0x16,0x16,0x15,0x14,0x14,0x13,0x13,0x12,0x11,0x11,0x10,0x10,0x0f,0x0e,0x0d,0x0c,0x0c,0x0b,0x0a,0x0a,0x09,0x08,0x08,0x07,0x06,0x06,0x05,0x05,0x04,0x03,0x03,0x02,0x02,0x01,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x02,0x02,0x03,0x03,0x04,0x05,0x05,0x06,0x06,0x07,0x08,0x08,0x09,0x09,0x0a,0x0b,0x0b,0x0c,0x0d,0x0d,0x0e,0x0f,0x10,0x10,0x11,0x11,0x12,0x13,0x13,0x14,0x14,0x15,0x16,0x16,0x17,0x17,0x18,0x18,0x19,0x19,0x1a,0x1a,0x1a,0x1b,0x1b,0x1c,0x1c,0x1c,0x1c,0x1d,0x1d,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1d,0x1d,0x1c,0x1c,0x1c,0x1c,0x1b,0x1b,0x1a,0x1a,0x1a,0x19,0x19,0x18,0x18,0x17,0x17,0x16,0x16,0x15,0x14,0x14,0x13,0x13,0x12,0x11,0x11,0x10,0x10,0x0f,0x0e,0x0d,0x0d,0x0c,0x0b,0x0b,0x0a,0x09,0x09,0x08,0x08,0x07,0x06,0x06,0x05,0x05,0x04,0x03,0x03,0x02,0x02,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x02,0x02,0x03,0x03,0x04,0x04,0x05,0x05,0x06,0x07,0x07,0x08,0x08,0x09,0x0a,0x0a,0x0b,0x0b,0x0c,0x0d,0x0d,0x0e,0x0f,0x10,0x10,0x11,0x11,0x12,0x13,0x13,0x14,0x14,0x15,0x15,0x16,0x16,0x17,0x17,0x18,0x18,0x18,0x19,0x19,0x1a,0x1a,0x1a,0x1a,0x1b,0x1b,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1b,0x1b,0x1a,0x1a,0x1a,0x1a,0x19,0x19,0x18,0x18,0x18,0x17,0x17,0x16,0x16,0x15,0x15,0x14,0x14,0x13,0x13,0x12,0x11,0x11,0x10,0x10,0x0f,0x0e,0x0d,0x0d,0x0c,0x0b,0x0b,0x0a,0x0a,0x09,0x08,0x08,0x07,0x07,0x06,0x05,0x05,0x04,0x04,0x03,0x03,0x02,0x02,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x02,0x02,0x03,0x03,0x04,0x05,0x05,0x06,0x06,0x07,0x07,0x08,0x09,0x09,0x0a,0x0a,0x0b,0x0c,0x0c,0x0d,0x0d,0x0e,0x0f,0x10,0x10,0x11,0x11,0x12,0x12,0x13,0x13,0x14,0x14,0x15,0x15,0x16,0x16,0x17,0x17,0x17,0x18,0x18,0x19,0x19,0x19,0x19,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x19,0x19,0x19,0x19,0x18,0x18,0x17,0x17,0x17,0x16,0x16,0x15,0x15,0x14,0x14,0x13,0x13,0x12,0x12,0x11,0x11,0x10,0x10,0x0f,0x0e,0x0d,0x0d,0x0c,0x0c,0x0b,0x0a,0x0a,0x09,0x09,0x08,0x07,0x07,0x06,0x06,0x05,0x05,0x04,0x03,0x03,0x02,0x02,0x01,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x02,0x02,0x03,0x03,0x04,0x04,0x05,0x06,0x06,0x07,0x07,0x08,0x08,0x09,0x09,0x0a,0x0a,0x0b,0x0c,0x0c,0x0d,0x0d,0x0e,0x0f,0x10,0x10,0x11,0x11,0x12,0x12,0x12,0x13,0x13,0x14,0x14,0x15,0x15,0x16,0x16,0x16,0x17,0x17,0x17,0x17,0x18,0x18,0x18,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x18,0x18,0x18,0x17,0x17,0x17,0x17,0x16,0x16,0x16,0x15,0x15,0x14,0x14,0x13,0x13,0x12,0x12,0x12,0x11,0x11,0x10,0x10,0x0f,0x0e,0x0d,0x0d,0x0c,0x0c,0x0b,0x0a,0x0a,0x09,0x09,0x08,0x08,0x07,0x07,0x06,0x06,0x05,0x04,0x04,0x03,0x03,0x02,0x02,0x01,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x02,0x02,0x02,0x03,0x04,0x04,0x05,0x05,0x06,0x06,0x07,0x07,0x08,0x08,0x09,0x09,0x0a,0x0a,0x0b,0x0b,0x0c,0x0d,0x0d,0x0e,0x0f,0x0f,0x10,0x10,0x11,0x11,0x12,0x12,0x12,0x13,0x13,0x14,0x14,0x14,0x15,0x15,0x16,0x16,0x16,0x16,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x16,0x16,0x16,0x16,0x15,0x15,0x14,0x14,0x14,0x13,0x13,0x12,0x12,0x12,0x11,0x11,0x10,0x10,0x0f,0x0f,0x0e,0x0d,0x0d,0x0c,0x0b,0x0b,0x0a,0x0a,0x09,0x09,0x08,0x08,0x07,0x07,0x06,0x06,0x05,0x05,0x04,0x04,0x03,0x02,0x02,0x02,0x01,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x01,0x02,0x02,0x03,0x03,0x04,0x04,0x05,0x05,0x06,0x06,0x07,0x07,0x08,0x08,0x09,0x09,0x0a,0x0a,0x0b,0x0b,0x0c,0x0d,0x0d,0x0e,0x0e,0x0f,0x0f,0x10,0x10,0x11,0x11,0x12,0x12,0x12,0x13,0x13,0x13,0x14,0x14,0x14,0x14,0x15,0x15,0x15,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x16,0x15,0x15,0x15,0x14,0x14,0x14,0x14,0x13,0x13,0x13,0x12,0x12,0x12,0x11,0x11,0x10,0x10,0x0f,0x0f,0x0e,0x0e,0x0d,0x0d,0x0c,0x0b,0x0b,0x0a,0x0a,0x09,0x09,0x08,0x08,0x07,0x07,0x06,0x06,0x05,0x05,0x04,0x04,0x03,0x03,0x02,0x02,0x01,0x01,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x02,0x02,0x02,0x03,0x03,0x04,0x05,0x05,0x06,0x06,0x06,0x07,0x07,0x08,0x08,0x09,0x09,0x0a,0x0a,0x0b,0x0b,0x0c,0x0c,0x0d,0x0d,0x0e,0x0e,0x0f,0x0f,0x10,0x10,0x11,0x11,0x11,0x11,0x12,0x12,0x13,0x13,0x13,0x13,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x13,0x13,0x13,0x13,0x12,0x12,0x11,0x11,0x11,0x11,0x10,0x10,0x0f,0x0f,0x0e,0x0e,0x0d,0x0d,0x0c,0x0c,0x0b,0x0b,0x0a,0x0a,0x09,0x09,0x08,0x08,0x07,0x07,0x06,0x06,0x06,0x05,0x05,0x04,0x03,0x03,0x02,0x02,0x02,0x01,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x01,0x02,0x02,0x03,0x03,0x04,0x04,0x05,0x05,0x06,0x06,0x07,0x07,0x07,0x08,0x08,0x09,0x09,0x0a,0x0a,0x0b,0x0b,0x0c,0x0c,0x0c,0x0d,0x0d,0x0e,0x0e,0x0f,0x0f,0x10,0x10,0x10,0x11,0x11,0x11,0x11,0x11,0x12,0x12,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x13,0x12,0x12,0x11,0x11,0x11,0x11,0x11,0x10,0x10,0x10,0x0f,0x0f,0x0e,0x0e,0x0d,0x0d,0x0c,0x0c,0x0c,0x0b,0x0b,0x0a,0x0a,0x09,0x09,0x08,0x08,0x07,0x07,0x07,0x06,0x06,0x05,0x05,0x04,0x04,0x03,0x03,0x02,0x02,0x01,0x01,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x02,0x02,0x02,0x03,0x03,0x04,0x04,0x05,0x05,0x06,0x06,0x06,0x07,0x07,0x08,0x08,0x09,0x09,0x0a,0x0a,0x0a,0x0b,0x0b,0x0b,0x0c,0x0c,0x0d,0x0d,0x0e,0x0e,0x0e,0x0f,0x0f,0x10,0x10,0x10,0x10,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x10,0x10,0x10,0x10,0x0f,0x0f,0x0e,0x0e,0x0e,0x0d,0x0d,0x0c,0x0c,0x0b,0x0b,0x0b,0x0a,0x0a,0x0a,0x09,0x09,0x08,0x08,0x07,0x07,0x06,0x06,0x06,0x05,0x05,0x04,0x04,0x03,0x03,0x02,0x02,0x02,0x01,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x01,0x02,0x02,0x02,0x03,0x03,0x04,0x04,0x05,0x05,0x06,0x06,0x06,0x07,0x07,0x08,0x08,0x08,0x09,0x09,0x0a,0x0a,0x0a,0x0b,0x0b,0x0b,0x0c,0x0c,0x0d,0x0d,0x0d,0x0e,0x0e,0x0e,0x0f,0x0f,0x0f,0x0f,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x11,0x11,0x11,0x11,0x11,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x0f,0x0f,0x0f,0x0f,0x0e,0x0e,0x0e,0x0d,0x0d,0x0d,0x0c,0x0c,0x0b,0x0b,0x0b,0x0a,0x0a,0x0a,0x09,0x09,0x08,0x08,0x08,0x07,0x07,0x06,0x06,0x06,0x05,0x05,0x04,0x04,0x03,0x03,0x02,0x02,0x02,0x01,0x01,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x02,0x02,0x02,0x03,0x03,0x03,0x04,0x04,0x05,0x05,0x06,0x06,0x06,0x07,0x07,0x07,0x08,0x08,0x09,0x09,0x09,0x0a,0x0a,0x0a,0x0b,0x0b,0x0b,0x0b,0x0c,0x0c,0x0d,0x0d,0x0d,0x0d,0x0e,0x0e,0x0e,0x0e,0x0e,0x0e,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0e,0x0e,0x0e,0x0e,0x0e,0x0e,0x0d,0x0d,0x0d,0x0d,0x0c,0x0c,0x0b,0x0b,0x0b,0x0b,0x0a,0x0a,0x0a,0x09,0x09,0x09,0x08,0x08,0x07,0x07,0x07,0x06,0x06,0x06,0x05,0x05,0x04,0x04,0x03,0x03,0x03,0x02,0x02,0x02,0x01,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x01,0x02,0x02,0x02,0x03,0x03,0x03,0x04,0x04,0x05,0x05,0x05,0x06,0x06,0x06,0x07,0x07,0x08,0x08,0x08,0x09,0x09,0x09,0x0a,0x0a,0x0a,0x0a,0x0b,0x0b,0x0b,0x0b,0x0c,0x0c,0x0c,0x0c,0x0d,0x0d,0x0d,0x0d,0x0d,0x0d,0x0d,0x0d,0x0d,0x0e,0x0e,0x0e,0x0e,0x0e,0x0d,0x0d,0x0d,0x0d,0x0d,0x0d,0x0d,0x0d,0x0d,0x0c,0x0c,0x0c,0x0c,0x0b,0x0b,0x0b,0x0b,0x0a,0x0a,0x0a,0x0a,0x09,0x09,0x09,0x08,0x08,0x08,0x07,0x07,0x06,0x06,0x06,0x05,0x05,0x05,0x04,0x04,0x03,0x03,0x03,0x02,0x02,0x02,0x01,0x01,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x01,0x02,0x02,0x02,0x02,0x03,0x03,0x04,0x04,0x04,0x05,0x05,0x06,0x06,0x06,0x07,0x07,0x07,0x08,0x08,0x08,0x09,0x09,0x09,0x09,0x0a,0x0a,0x0a,0x0a,0x0a,0x0b,0x0b,0x0b,0x0b,0x0b,0x0b,0x0b,0x0c,0x0c,0x0c,0x0c,0x0c,0x0c,0x0c,0x0c,0x0c,0x0c,0x0c,0x0c,0x0c,0x0c,0x0c,0x0b,0x0b,0x0b,0x0b,0x0b,0x0b,0x0b,0x0a,0x0a,0x0a,0x0a,0x0a,0x09,0x09,0x09,0x09,0x08,0x08,0x08,0x07,0x07,0x07,0x06,0x06,0x06,0x05,0x05,0x04,0x04,0x04,0x03,0x03,0x02,0x02,0x02,0x02,0x01,0x01,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x01,0x02,0x02,0x02,0x02,0x03,0x03,0x03,0x04,0x04,0x05,0x05,0x05,0x06,0x06,0x06,0x07,0x07,0x07,0x07,0x08,0x08,0x08,0x09,0x09,0x09,0x09,0x09,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0b,0x0b,0x0b,0x0b,0x0b,0x0b,0x0b,0x0b,0x0b,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x09,0x09,0x09,0x09,0x09,0x08,0x08,0x08,0x07,0x07,0x07,0x07,0x06,0x06,0x06,0x05,0x05,0x05,0x04,0x04,0x03,0x03,0x03,0x02,0x02,0x02,0x02,0x01,0x01,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x01,0x01,0x02,0x02,0x02,0x02,0x03,0x03,0x03,0x04,0x04,0x04,0x05,0x05,0x05,0x06,0x06,0x06,0x06,0x07,0x07,0x07,0x07,0x08,0x08,0x08,0x08,0x08,0x09,0x09,0x09,0x09,0x09,0x09,0x09,0x09,0x09,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x09,0x09,0x09,0x09,0x09,0x09,0x09,0x09,0x09,0x08,0x08,0x08,0x08,0x08,0x07,0x07,0x07,0x07,0x06,0x06,0x06,0x06,0x05,0x05,0x05,0x04,0x04,0x04,0x03,0x03,0x03,0x02,0x02,0x02,0x02,0x01,0x01,0x01,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x01,0x01,0x02,0x02,0x02,0x02,0x02,0x03,0x03,0x03,0x04,0x04,0x04,0x05,0x05,0x05,0x05,0x06,0x06,0x06,0x06,0x07,0x07,0x07,0x07,0x07,0x07,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x09,0x09,0x09,0x09,0x09,0x09,0x09,0x09,0x09,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x07,0x07,0x07,0x07,0x07,0x07,0x06,0x06,0x06,0x06,0x05,0x05,0x05,0x05,0x04,0x04,0x04,0x03,0x03,0x03,0x02,0x02,0x02,0x02,0x02,0x01,0x01,0x01,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x01,0x01,0x02,0x02,0x02,0x02,0x02,0x03,0x03,0x03,0x04,0x04,0x04,0x04,0x05,0x05,0x05,0x05,0x06,0x06,0x06,0x06,0x06,0x06,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x06,0x06,0x06,0x06,0x06,0x06,0x05,0x05,0x05,0x05,0x04,0x04,0x04,0x04,0x03,0x03,0x03,0x02,0x02,0x02,0x02,0x02,0x01,0x01,0x01,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x01,0x01,0x02,0x02,0x02,0x02,0x02,0x02,0x03,0x03,0x03,0x04,0x04,0x04,0x04,0x04,0x05,0x05,0x05,0x05,0x05,0x05,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x05,0x05,0x05,0x05,0x05,0x05,0x04,0x04,0x04,0x04,0x04,0x03,0x03,0x03,0x02,0x02,0x02,0x02,0x02,0x02,0x01,0x01,0x01,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x02,0x02,0x02,0x02,0x02,0x03,0x03,0x03,0x03,0x03,0x04,0x04,0x04,0x04,0x04,0x04,0x05,0x05,0x05,0x05,0x05,0x05,0x05,0x05,0x05,0x05,0x05,0x05,0x05,0x05,0x05,0x05,0x05,0x05,0x05,0x05,0x05,0x05,0x05,0x05,0x05,0x04,0x04,0x04,0x04,0x04,0x04,0x03,0x03,0x03,0x03,0x03,0x02,0x02,0x02,0x02,0x02,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x02,0x02,0x02,0x02,0x02,0x02,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x02,0x02,0x02,0x02,0x02,0x02,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 +}; + +#endif diff --git a/NamiGarasu/Fs_Entry.h b/NamiGarasu/Fs_Entry.h new file mode 100644 index 0000000..2cb6b37 --- /dev/null +++ b/NamiGarasu/Fs_Entry.h @@ -0,0 +1,227 @@ +//----------------------------------------------------------------------------------- +/* + NamiGarasu 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/NamiGarasu/Fs_Target.h b/NamiGarasu/Fs_Target.h new file mode 100644 index 0000000..9ed0d82 --- /dev/null +++ b/NamiGarasu/Fs_Target.h @@ -0,0 +1,70 @@ +//----------------------------------------------------------------------------------- +/* + F's Plugins for VS2010/VS2012 +*/ +//----------------------------------------------------------------------------------- + + +#pragma once +#ifndef Fs_TARGET_H +#define Fs_TARGET_H + + +//----------------------------------------------------------------------------------- +//プラグインの識別に使われる名前 +#define FS_NAME "F's NamiGarasu" + +//----------------------------------------------------------------------------------- +//プラグインの説明に使われる文字 +#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関係がインクルードされない + +//----------------------------------------------------------------------------------- +#include "../FsLibrary/FsVersion.h" + +//----------------------------------------------------------------------------------- +//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/NamiGarasu/NamiGarasu.cpp b/NamiGarasu/NamiGarasu.cpp new file mode 100644 index 0000000..befb330 --- /dev/null +++ b/NamiGarasu/NamiGarasu.cpp @@ -0,0 +1,1165 @@ +//----------------------------------------------------------------------------------- +/* + F's Plugins for VS2010/VS2012 +*/ +//----------------------------------------------------------------------------------- + + +#include "NamiGarasu.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_FIXED( STR_VALUE, //パラメータの名前 + 0, //数値入力する場合の最小値 + 100, //数値入力する場合の最大値 + 0, //スライダーの最小値 + 50, //スライダーの最大値 + 0, //デフォルトの値 + 1, //数値表示に関するフラグ + 0, + 0, + ID_VALE + ); + + //---------------------------------------------------------------- + //角度 + AEFX_CLR_STRUCT(def); + def.flags = PF_ParamFlag_CANNOT_TIME_VARY;//これをつけるとキーフレームが撃てなくなる + PF_ADD_ANGLE(STR_ROT,45,ID_ROT); + //---------------------------------------------------------------- + AEFX_CLR_STRUCT(def); + def.flags = PF_ParamFlag_CANNOT_TIME_VARY;//これをつけるとキーフレームが撃てなくなる + PF_ADD_FIXED( STR_SPEED, //パラメータの名前 + 0, //数値入力する場合の最小値 + 32000, //数値入力する場合の最大値 + 0, //スライダーの最小値 + 100, //スライダーの最大値 + 20, //デフォルトの値 + 1, //数値表示に関するフラグ + 0, + 0, + ID_SPEED + ); + + //---------------------------------------------------------------- + AEFX_CLR_STRUCT(def); + PF_ADD_FIXED( STR_LEVEL, //パラメータの名前 + 0, //数値入力する場合の最小値 + 100, //数値入力する場合の最大値 + 0, //スライダーの最小値 + 100, //スライダーの最大値 + 25, //デフォルトの値 + 1, //数値表示に関するフラグ + 0, + 0, + ID_LEVEL + ); + //---------------------------------------------------------------- + AEFX_CLR_STRUCT(def); + PF_ADD_FIXED( STR_NOISE, //パラメータの名前 + 0, //数値入力する場合の最小値 + 100, //数値入力する場合の最大値 + 0, //スライダーの最小値 + 100, //スライダーの最大値 + 25, //デフォルトの値 + 1, //数値表示に関するフラグ + 0, + 0, + ID_NOISE + ); + //**************************************************************** + AEFX_CLR_STRUCT(def); + PF_ADD_TOPIC(STR_A, ID_TOPIC_A); + //---------------------------------------------------------------- + AEFX_CLR_STRUCT(def); + def.flags = PF_ParamFlag_CANNOT_TIME_VARY;//これをつけるとキーフレームが撃てなくなる + PF_ADD_SLIDER( STR_A_SIZE, //パラメータの名前 + 1, //数値入力する場合の最小値 + 6, //数値入力する場合の最大値 + 1, //スライダーの最小値 + 6, //スライダーの最大値 + 2, //デフォルトの値 + ID_A_SIZE + ); + //---------------------------------------------------------------- + AEFX_CLR_STRUCT(def); + def.flags = PF_ParamFlag_CANNOT_TIME_VARY;//これをつけるとキーフレームが撃てなくなる + PF_ADD_SLIDER( STR_A_VALUE, //パラメータの名前 + 0, //数値入力する場合の最小値 + 200, //数値入力する場合の最大値 + 0, //スライダーの最小値 + 100, //スライダーの最大値 + 40, //デフォルトの値 + ID_A_VALUE + ); + + + //---------------------------------------------------------------- + AEFX_CLR_STRUCT(def); + def.flags = PF_ParamFlag_CANNOT_TIME_VARY;//これをつけるとキーフレームが撃てなくなる + PF_ADD_FLOAT_SLIDER(STR_A_STRONG, //Name + 0, //VALID_MIN + 100, //VALID_MAX + 0, //SLIDER_MIN + 100, //SLIDER_MAX + 1, //CURVE_TOLERANCE + 35, //DFLT + 1, //PREC + 0, //DISP + 0, //WANT_PHASE + ID_A_STRONG + ); + //---------------------------------------------------------------- + AEFX_CLR_STRUCT(def); + def.flags = PF_ParamFlag_CANNOT_TIME_VARY;//これをつけるとキーフレームが撃てなくなる + PF_ADD_FLOAT_SLIDER(STR_A_SPEED, //Name + -500, //VALID_MIN + 500, //VALID_MAX + 0, //SLIDER_MIN + 100, //SLIDER_MAX + 1, //CURVE_TOLERANCE + 50, //DFLT + 1, //PREC + 0, //DISP + 0, //WANT_PHASE + ID_A_SPEED + ); + //---------------------------------------------------------------- + AEFX_CLR_STRUCT(def); + def.flags = PF_ParamFlag_CANNOT_TIME_VARY;//これをつけるとキーフレームが撃てなくなる + PF_ADD_SLIDER( STR_A_SEED, //パラメータの名前 + 0, //数値入力する場合の最小値 + 30000, //数値入力する場合の最大値 + 0, //スライダーの最小値 + 10000, //スライダーの最大値 + 0, //デフォルトの値 + ID_A_SEED + ); + + //---------------------------------------------------------------- + AEFX_CLR_STRUCT(def); + PF_END_TOPIC(ID_TOPIC_A_END); + //**************************************************************** + AEFX_CLR_STRUCT(def); + PF_ADD_TOPIC(STR_B, ID_TOPIC_B); + //---------------------------------------------------------------- + AEFX_CLR_STRUCT(def); + def.flags = PF_ParamFlag_CANNOT_TIME_VARY;//これをつけるとキーフレームが撃てなくなる + PF_ADD_SLIDER( STR_B_SIZE, //パラメータの名前 + 1, //数値入力する場合の最小値 + 6, //数値入力する場合の最大値 + 1, //スライダーの最小値 + 6, //スライダーの最大値 + 3, //デフォルトの値 + ID_B_SIZE + ); + //---------------------------------------------------------------- + AEFX_CLR_STRUCT(def); + def.flags = PF_ParamFlag_CANNOT_TIME_VARY;//これをつけるとキーフレームが撃てなくなる + PF_ADD_SLIDER( STR_B_VALUE, //パラメータの名前 + 0, //数値入力する場合の最小値 + 200, //数値入力する場合の最大値 + 0, //スライダーの最小値 + 100, //スライダーの最大値 + 20, //デフォルトの値 + ID_B_VALUE + ); + + + //---------------------------------------------------------------- + AEFX_CLR_STRUCT(def); + def.flags = PF_ParamFlag_CANNOT_TIME_VARY;//これをつけるとキーフレームが撃てなくなる + PF_ADD_FLOAT_SLIDER(STR_B_STRONG, //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_B_STRONG + ); + //---------------------------------------------------------------- + AEFX_CLR_STRUCT(def); + def.flags = PF_ParamFlag_CANNOT_TIME_VARY;//これをつけるとキーフレームが撃てなくなる + PF_ADD_FLOAT_SLIDER(STR_B_SPEED, //Name + -500, //VALID_MIN + 500, //VALID_MAX + 0, //SLIDER_MIN + 100, //SLIDER_MAX + 1, //CURVE_TOLERANCE + 75, //DFLT + 1, //PREC + 0, //DISP + 0, //WANT_PHASE + ID_B_SPEED + ); + //---------------------------------------------------------------- + AEFX_CLR_STRUCT(def); + def.flags = PF_ParamFlag_CANNOT_TIME_VARY;//これをつけるとキーフレームが撃てなくなる + PF_ADD_SLIDER( STR_B_SEED, //パラメータの名前 + 0, //数値入力する場合の最小値 + 30000, //数値入力する場合の最大値 + 0, //スライダーの最小値 + 10000, //スライダーの最大値 + 1000, //デフォルトの値 + ID_B_SEED + ); + //---------------------------------------------------------------- + AEFX_CLR_STRUCT(def); + PF_END_TOPIC(ID_TOPIC_B_END); + //**************************************************************** + AEFX_CLR_STRUCT(def); + PF_ADD_TOPIC(STR_C, ID_TOPIC_C); + //---------------------------------------------------------------- + AEFX_CLR_STRUCT(def); + def.flags = PF_ParamFlag_CANNOT_TIME_VARY;//これをつけるとキーフレームが撃てなくなる + PF_ADD_SLIDER( STR_C_SIZE, //パラメータの名前 + 1, //数値入力する場合の最小値 + 6, //数値入力する場合の最大値 + 1, //スライダーの最小値 + 6, //スライダーの最大値 + 6, //デフォルトの値 + ID_C_SIZE + ); + //---------------------------------------------------------------- + AEFX_CLR_STRUCT(def); + def.flags = PF_ParamFlag_CANNOT_TIME_VARY;//これをつけるとキーフレームが撃てなくなる + PF_ADD_SLIDER( STR_C_VALUE, //パラメータの名前 + 0, //数値入力する場合の最小値 + 200, //数値入力する場合の最大値 + 0, //スライダーの最小値 + 100, //スライダーの最大値 + 30, //デフォルトの値 + ID_C_VALUE + ); + + + //---------------------------------------------------------------- + AEFX_CLR_STRUCT(def); + def.flags = PF_ParamFlag_CANNOT_TIME_VARY;//これをつけるとキーフレームが撃てなくなる + PF_ADD_FLOAT_SLIDER(STR_C_STRONG, //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_C_STRONG + ); + //---------------------------------------------------------------- + AEFX_CLR_STRUCT(def); + def.flags = PF_ParamFlag_CANNOT_TIME_VARY;//これをつけるとキーフレームが撃てなくなる + PF_ADD_FLOAT_SLIDER(STR_C_SPEED, //Name + -500, //VALID_MIN + 500, //VALID_MAX + 0, //SLIDER_MIN + 100, //SLIDER_MAX + 1, //CURVE_TOLERANCE + 100, //DFLT + 1, //PREC + 0, //DISP + 0, //WANT_PHASE + ID_C_SPEED + ); + //---------------------------------------------------------------- + AEFX_CLR_STRUCT(def); + def.flags = PF_ParamFlag_CANNOT_TIME_VARY;//これをつけるとキーフレームが撃てなくなる + PF_ADD_SLIDER( STR_C_SEED, //パラメータの名前 + 0, //数値入力する場合の最小値 + 30000, //数値入力する場合の最大値 + 0, //スライダーの最小値 + 10000, //スライダーの最大値 + 2000, //デフォルトの値 + ID_C_SEED + ); + //---------------------------------------------------------------- + AEFX_CLR_STRUCT(def); + PF_END_TOPIC(ID_TOPIC_C_END); + //---------------------------------------------------------------- + AEFX_CLR_STRUCT(def); + def.flags = PF_ParamFlag_CANNOT_TIME_VARY;//これをつけるとキーフレームが撃てなくなる + PF_ADD_CHECKBOX(STR_DISPMAP, + "on", + FALSE, + 0, + ID_DISPMAP + ); + //---------------------------------------------------------------- + AEFX_CLR_STRUCT(def); + PF_ADD_FIXED( STR_LENGTH_X, //パラメータの名前 + 0, //数値入力する場合の最小値 + 1000, //数値入力する場合の最大値 + 0, //スライダーの最小値 + 100, //スライダーの最大値 + 100, //デフォルトの値 + 1, //数値表示に関するフラグ + 0, + 0, + ID_LENGTH_X + ); + //---------------------------------------------------------------- + AEFX_CLR_STRUCT(def); + PF_ADD_FIXED( STR_LENGTH_Y, //パラメータの名前 + 0, //数値入力する場合の最小値 + 1000, //数値入力する場合の最大値 + 0, //スライダーの最小値 + 100, //スライダーの最大値 + 100, //デフォルトの値 + 1, //数値表示に関するフラグ + 0, + 0, + ID_LENGTH_Y + ); + //---------------------------------------------------------------- + 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 +dispMap8 ( + refconType refcon, + A_long xL, + A_long yL, + PF_Pixel *inP, + PF_Pixel *outP) +{ + PF_Err err = PF_Err_NONE; + outP->red = + outP->green = + outP->blue = outP->alpha; + outP->alpha = inP->alpha; + return err; +} +static PF_Err +dispMap16 ( + refconType refcon, + A_long xL, + A_long yL, + PF_Pixel16 *inP, + PF_Pixel16 *outP) +{ + PF_Err err = PF_Err_NONE; + outP->red = + outP->green = + outP->blue = outP->alpha; + outP->alpha = inP->alpha; + return err; +} +//------------------------------------------------------------------------------------------------- +static PF_Err +dispMap32 ( + refconType refcon, + A_long xL, + A_long yL, + PF_PixelFloat *inP, + PF_PixelFloat *outP) +{ + PF_Err err = PF_Err_NONE; + outP->red = + outP->green = + outP->blue = outP->alpha; + outP->alpha = inP->alpha; + return err; +} +//------------------------------------------------------------------------------------------------- +static PF_Err +inToAlphap8 ( + refconType refcon, + A_long xL, + A_long yL, + PF_Pixel *inP, + PF_Pixel *outP) +{ + PF_Err err = PF_Err_NONE; + outP->alpha = inP->alpha; + return err; +} +//------------------------------------------------------------------------------------------------- +static PF_Err +inToAlphap16 ( + 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 +inToAlphap32 ( + 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 +clearHalf8 ( + refconType refcon, + A_long xL, + A_long yL, + PF_Pixel *inP, + PF_Pixel *outP) +{ + PF_Err err = PF_Err_NONE; + ParamInfo * niP = reinterpret_cast(refcon); + PF_Pixel back = {PF_HALF_CHAN8,PF_HALF_CHAN8,PF_HALF_CHAN8,PF_HALF_CHAN8}; + *outP =back; + if (niP->noise>0){ + if (xorShift()>0x3fff) { + A_long a = (A_long)(((double)PF_MAX_CHAN8 - 2 * (double)PF_MAX_CHAN8 * xorShiftDouble()) * niP->noise); + + outP->alpha = RoundByteLong((A_long)PF_HALF_CHAN8 + a); + }else{ + xorShiftDouble(); + } + }else{ + xorShiftDouble(); + xorShiftDouble(); + } + + return err; +} +//------------------------------------------------------------------------------------------------- +static PF_Err +clearHalf16 ( + 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 back = {PF_HALF_CHAN16,PF_HALF_CHAN16,PF_HALF_CHAN16,PF_HALF_CHAN16}; + *outP =back; + if (niP->noise>0){ + if (xorShift()>0x3fff) { + A_long a = (A_long)(((double)PF_MAX_CHAN16 - 2 * (double)PF_MAX_CHAN16 * xorShiftDouble()) * niP->noise); + + outP->alpha = RoundShort((A_long)PF_HALF_CHAN16 + a); + }else{ + xorShiftDouble(); + } + + }else{ + xorShiftDouble(); + xorShiftDouble(); + } + return err; +} +//------------------------------------------------------------------------------------------------- +static PF_Err +clearHalf32 ( + refconType refcon, + A_long xL, + A_long yL, + PF_PixelFloat *inP, + PF_PixelFloat *outP) +{ + PF_Err err = PF_Err_NONE; + PF_PixelFloat back = {PF_HALF_CHAN32,PF_HALF_CHAN32,PF_HALF_CHAN32,PF_HALF_CHAN32}; + ParamInfo * niP = reinterpret_cast(refcon); + *outP =back; + if (niP->noise>0){ + if (xorShift()>0x3fff) { + double a = ((1.0 - 2.0 * xorShiftDouble()) * niP->noise); + + outP->alpha = RoundFpShortDouble(PF_HALF_CHAN32 + a); + }else{ + xorShiftDouble(); + } + + }else{ + xorShiftDouble(); + xorShiftDouble(); + } + return err; +} +//------------------------------------------------------------------------------------------------- +/* + redチャンネルだけグレーに +*/ +//------------------------------------------------------------------------------------------------- +static PF_Err +clearRed8 ( + refconType refcon, + A_long xL, + A_long yL, + PF_Pixel *inP, + PF_Pixel *outP) +{ + PF_Err err = PF_Err_NONE; + outP->red =PF_HALF_CHAN8; + return err; +} +//------------------------------------------------------------------------------------------------- +static PF_Err +clearRed16 ( + refconType refcon, + A_long xL, + A_long yL, + PF_Pixel16 *inP, + PF_Pixel16 *outP) +{ + PF_Err err = PF_Err_NONE; + outP->red =PF_HALF_CHAN16; + return err; +} +//------------------------------------------------------------------------------------------------- +static PF_Err +clearRed32 ( + refconType refcon, + A_long xL, + A_long yL, + PF_PixelFloat *inP, + PF_PixelFloat *outP) +{ + PF_Err err = PF_Err_NONE; + outP->red =PF_HALF_CHAN32; + return err; +} +//------------------------------------------------------------------------------------------------- +static void Draw8(ParamInfo *infoP,DrawInfo *di,int idx) +{ + int rndTable[6][8]= + { + {0,0,0,1,0,1,0,1}, + {2,3,2,1,2,1,2,1}, + {4,5,4,3,4,5,2,3}, + {6,7,6,7,6,5,4,5}, + {8,8,8,9,5,7,7,6}, + {10,10,10,10,10,9,8,7} + }; + if((infoP->map[idx].value>0)&&(infoP->map[idx].strong>0)){ + init_xorShift(infoP->map[idx].seed); + di->strong = infoP->map[idx].strong; + for ( int i=0; imap[idx].value; i++){ + + di->x = xorShift()*di->scr.width /0x7FFF; + di->y = xorShift()*di->scr.height /0x7FFF; + + int r = (int)((double)xorShift()*7.0/0x7FFF + 0.5); + if (r<0) r=0; else if(r>7) r = 7; + di->sizeIdx = rndTable[infoP->map[idx].size][r]; + drawSq8(di); + di->isW = (di->isW +1) %2; + } + + } +} +//------------------------------------------------------------------------------------------------- +static void Draw16(ParamInfo *infoP,DrawInfo *di,int idx) +{ + int rndTable[6][8]= + { + {0,0,0,1,0,1,0,1}, + {2,3,2,1,2,1,2,1}, + {4,5,4,3,4,5,2,3}, + {6,7,6,7,6,5,4,5}, + {8,8,8,9,5,7,7,6}, + {10,10,10,10,10,9,8,7} + }; + if((infoP->map[idx].value>0)&&(infoP->map[idx].strong>0)){ + init_xorShift(infoP->map[idx].seed); + di->strong = infoP->map[idx].strong; + for ( int i=0; imap[idx].value; i++){ + + di->x = xorShift()*di->scr.width /0x7FFF; + di->y = xorShift()*di->scr.height /0x7FFF; + + int r = (int)((double)xorShift()*7.0/0x7FFF + 0.5); + if (r<0) r=0; else if(r>7) r = 7; + di->sizeIdx = rndTable[infoP->map[idx].size][r]; + drawSq16(di); + di->isW = (di->isW +1) %2; + } + + } +} +//------------------------------------------------------------------------------------------------- +static void Draw32(ParamInfo *infoP,DrawInfo *di,int idx) +{ + int rndTable[6][8]= + { + {0,0,0,1,0,1,0,1}, + {2,3,2,1,2,1,2,1}, + {4,5,4,3,4,5,2,3}, + {6,7,6,7,6,5,4,5}, + {8,8,8,9,5,7,7,6}, + {10,10,10,10,10,9,8,7} + }; + if((infoP->map[idx].value>0)&&(infoP->map[idx].strong>0)){ + init_xorShift(infoP->map[idx].seed); + di->strong = infoP->map[idx].strong; + for ( int i=0; imap[idx].value; i++){ + + di->x = xorShift()*di->scr.width /0x7FFF; + di->y = xorShift()*di->scr.height /0x7FFF; + + int r = (int)((double)xorShift()*7.0/0x7FFF + 0.5); + if (r<0) r=0; else if(r>7) r = 7; + di->sizeIdx = rndTable[infoP->map[idx].size][r]; + drawSq32(di); + di->isW = (di->isW +1) %2; + } + + } +} +//------------------------------------------------------------------------------------------------- +/* +*/ +//------------------------------------------------------------------------------------------------- +static PF_Err +alphatoToRed8 ( + refconType refcon, + A_long xL, + A_long yL, + PF_Pixel *inP, + PF_Pixel *outP) +{ + PF_Err err = PF_Err_NONE; + + outP->red = outP->alpha; + return err; +} +//------------------------------------------------------------------------------------------------- +static PF_Err +alphatoToRed16 ( + refconType refcon, + A_long xL, + A_long yL, + PF_Pixel16 *inP, + PF_Pixel16 *outP) +{ + PF_Err err = PF_Err_NONE; + + outP->red = outP->alpha; + return err; +} +//------------------------------------------------------------------------------------------------- +static PF_Err +alphatoToRed32 ( + refconType refcon, + A_long xL, + A_long yL, + PF_PixelFloat *inP, + PF_PixelFloat *outP) +{ + PF_Err err = PF_Err_NONE; + + outP->red = outP->alpha; + return err; +} +//------------------------------------------------------------------------------------------------- +static PF_Err GetParams(CFsAE *ae, ParamInfo *infoP) +{ + PF_Err err = PF_Err_NONE; + + long valueTable[6] = { 128,32,16,4,2,1}; + + PF_Fixed f = 0; + double mv = 0; + ERR(ae->GetFIXED(ID_VALE,&f)); + if (!err){ + mv = (double)f/6553600.0; + } + ERR(ae->GetFIXED(ID_LENGTH_X,&infoP->lengthX)); + infoP->lengthX = (PF_Fixed)((double)infoP->lengthX *mv + 0.5); + ERR(ae->GetFIXED(ID_LENGTH_Y,&infoP->lengthY)); + infoP->lengthY = (PF_Fixed)((double)infoP->lengthY *mv + 0.5); + f = 0; + ERR(ae->GetFIXED(ID_LEVEL,&f)); + if (!err){ + infoP->level = (double)f/6553600.0; + infoP->level *= mv; + } + f = 0; + ERR(ae->GetFIXED(ID_NOISE,&f)); + if (!err){ + infoP->noise = (double)f/6553600.0; + infoP->noise *= mv; + } + + ERR(ae->GetANGLE(ID_ROT,&infoP->rot)); + infoP->rot = RoundAngle360(infoP->rot); + ERR(ae->GetFIXED(ID_SPEED,&infoP->speed)); + + //********************** + ERR(ae->GetADD(ID_A_SIZE,&infoP->map[0].size)); + infoP->map[0].size -=1; + if (infoP->map[0].size<0) infoP->map[0].size = 0; + else if (infoP->map[0].size>5) infoP->map[0].size = 5; + ERR(ae->GetADD(ID_A_VALUE,&infoP->map[0].value)); + infoP->map[0].value *= valueTable[infoP->map[0].size]; + + ERR(ae->GetFLOAT(ID_A_STRONG,&infoP->map[0].strong)); + infoP->map[0].strong /= 100; + ERR(ae->GetFLOAT(ID_A_SPEED,&infoP->map[0].speed)); + infoP->map[0].speed /= 100; + ERR(ae->GetADD(ID_A_SEED,&infoP->map[0].seed)); + + //********************** + ERR(ae->GetADD(ID_B_SIZE,&infoP->map[1].size)); + infoP->map[1].size -=1; + if (infoP->map[1].size<0) infoP->map[1].size = 0; + else if (infoP->map[1].size>5) infoP->map[1].size = 5; + ERR(ae->GetADD(ID_B_VALUE,&infoP->map[1].value)); + infoP->map[1].value *= valueTable[infoP->map[1].size]; + + ERR(ae->GetFLOAT(ID_B_STRONG,&infoP->map[1].strong)); + infoP->map[1].strong /= 100; + ERR(ae->GetFLOAT(ID_B_SPEED,&infoP->map[1].speed)); + infoP->map[1].speed /= 100; + ERR(ae->GetADD(ID_B_SEED,&infoP->map[1].seed)); + + //********************** + ERR(ae->GetADD(ID_C_SIZE,&infoP->map[2].size)); + infoP->map[2].size -=1; + if (infoP->map[2].size<0) infoP->map[2].size = 0; + else if (infoP->map[2].size>5) infoP->map[2].size = 5; + ERR(ae->GetADD(ID_C_VALUE,&infoP->map[2].value)); + infoP->map[2].value *= valueTable[infoP->map[2].size]; + + ERR(ae->GetFLOAT(ID_C_STRONG,&infoP->map[2].strong)); + infoP->map[2].strong /= 100; + ERR(ae->GetFLOAT(ID_C_SPEED,&infoP->map[2].speed)); + infoP->map[2].speed /= 100; + ERR(ae->GetADD(ID_C_SEED,&infoP->map[2].seed)); + //********************** + + ERR(ae->GetCHECKBOX(ID_DISPMAP,&infoP->disp_map)); + + //ERR(ae->GetFIXEDPOINT(ID_POINT,&infoP->point)); + + return err; +} +//------------------------------------------------------------------------------------------------- +static DrawInfo InitDrawInfo(CFsAE *ae , ParamInfo *infoP) +{ + DrawInfo di; + di.scr.data = ae->out->data(); + di.scr.width =ae->out->width(); + di.scr.widthTrue =ae->out->widthTrue(); + di.scr.height =ae->out->height(); + di.x = 0; + di.y = 0; + di.strong = 1; + di.isW = 0; + di.scale = ae->downSaleValue(); + + return di; +} +//------------------------------------------------------------------------------------------------- +static ShiftInfo InitShiftInfo(CFsAE *ae , ParamInfo *infoP) +{ + ShiftInfo si; + si.scr.data = ae->out->data(); + si.scr.width =ae->out->width(); + si.scr.widthTrue =ae->out->widthTrue(); + si.scr.height =ae->out->height(); + return si; + +} +//------------------------------------------------------------------------------------------------- +static PF_Err + Exec8 (CFsAE *ae , ParamInfo *infoP) +{ + PF_Err err = PF_Err_NONE; + + DrawInfo di = InitDrawInfo(ae,infoP); + + PF_Fixed len = infoP->speed * ae->frame()/ di.scale; + CRotCalc rt(ae->in_data); + + ShiftInfo si = InitShiftInfo(ae,infoP); + + F_SRAND(ae->frame()); + ERR(ae->iterate8((refconType)infoP,clearHalf8)); + + int idx = 0; + + F_SRAND(infoP->map[idx].seed); + if ( (infoP->map[idx].strong>0)&&(infoP->map[idx].value>0) ){ + Draw8(infoP,&di,idx); + rt.SetRotLength(infoP->rot, (PF_Fixed)((double)len * infoP->map[idx].speed)); + si.shift_x = rt.x() % (si.scr.width << 16); + si.shift_y = rt.y() % (si.scr.height << 16); + ERR(ae->iterate8((refconType)&si,shiftRed8)); + } + + idx = 1; + F_SRAND(infoP->map[idx].seed); + if ( (infoP->map[idx].strong>0)&&(infoP->map[idx].value>0) ){ + ERR(ae->iterate8((refconType)NULL,clearRed8)); + Draw8(infoP,&di,idx); + rt.SetRotLength(infoP->rot, (PF_Fixed)((double)len * infoP->map[idx].speed)); + si.shift_x = rt.x() % (si.scr.width << 16); + si.shift_y = rt.y() % (si.scr.height << 16); + ERR(ae->iterate8((refconType)&si,shiftRed8)); + } + + idx = 2; + F_SRAND(infoP->map[idx].seed); + if ( (infoP->map[idx].strong>0)&&(infoP->map[idx].value>0) ){ + ERR(ae->iterate8((refconType)NULL,clearRed8)); + Draw8(infoP,&di,idx); + rt.SetRotLength(infoP->rot, (PF_Fixed)((double)len * infoP->map[idx].speed)); + si.shift_x = rt.x() % (si.scr.width << 16); + si.shift_y = rt.y() % (si.scr.height << 16); + ERR(ae->iterate8((refconType)&si,shiftRed8)); + } + + ERR(ae->iterate8((refconType)NULL,alphatoToRed8)); + AlphaBlur8(ae->out); + ERR(ae->iterate8((refconType)NULL,alphatoToRed8)); + AlphaBlur8(ae->out); + + if (infoP->disp_map == TRUE){ + ERR(ae->iterate8((refconType)NULL,dispMap8)); + }else{ + si.scr.data = ae->in->data(); + si.scr.width =ae->in->width(); + si.scr.widthTrue =ae->in->widthTrue(); + si.scr.height =ae->in->height(); + + si.shift_x = infoP->lengthX; + si.shift_y = infoP->lengthY; + si.level = infoP->level; + ERR(ae->iterate8((refconType)&si,imageMap8)); + + } + return err; +} +//------------------------------------------------------------------------------------------------- +static PF_Err + Exec16 (CFsAE *ae , ParamInfo *infoP) +{ + PF_Err err = PF_Err_NONE; + + DrawInfo di = InitDrawInfo(ae,infoP); + + PF_Fixed len = infoP->speed * ae->frame()/ di.scale; + CRotCalc rt(ae->in_data); + + ShiftInfo si = InitShiftInfo(ae,infoP); + + F_SRAND(ae->frame()); + ERR(ae->iterate16((refconType)infoP,clearHalf16)); + + int idx = 0; + + F_SRAND(infoP->map[idx].seed); + if ( (infoP->map[idx].strong>0)&&(infoP->map[idx].value>0) ){ + Draw16(infoP,&di,idx); + rt.SetRotLength(infoP->rot, (PF_Fixed)((double)len * infoP->map[idx].speed)); + si.shift_x = rt.x() % (si.scr.width << 16); + si.shift_y = rt.y() % (si.scr.height << 16); + ERR(ae->iterate16((refconType)&si,shiftRed16)); + } + + idx = 1; + F_SRAND(infoP->map[idx].seed); + if ( (infoP->map[idx].strong>0)&&(infoP->map[idx].value>0) ){ + ERR(ae->iterate16((refconType)NULL,clearRed16)); + Draw16(infoP,&di,idx); + rt.SetRotLength(infoP->rot, (PF_Fixed)((double)len * infoP->map[idx].speed)); + si.shift_x = rt.x() % (si.scr.width << 16); + si.shift_y = rt.y() % (si.scr.height << 16); + ERR(ae->iterate16((refconType)&si,shiftRed16)); + } + + idx = 2; + F_SRAND(infoP->map[idx].seed); + if ( (infoP->map[idx].strong>0)&&(infoP->map[idx].value>0) ){ + ERR(ae->iterate16((refconType)NULL,clearRed16)); + Draw16(infoP,&di,idx); + rt.SetRotLength(infoP->rot, (PF_Fixed)((double)len * infoP->map[idx].speed)); + si.shift_x = rt.x() % (si.scr.width << 16); + si.shift_y = rt.y() % (si.scr.height << 16); + ERR(ae->iterate16((refconType)&si,shiftRed16)); + } + + ERR(ae->iterate16((refconType)NULL,alphatoToRed16)); + AlphaBlur16(ae->out); + ERR(ae->iterate16((refconType)NULL,alphatoToRed16)); + AlphaBlur16(ae->out); + + if (infoP->disp_map == TRUE){ + ERR(ae->iterate16((refconType)NULL,dispMap16)); + }else{ + si.scr.data = ae->in->data(); + si.scr.width =ae->in->width(); + si.scr.widthTrue =ae->in->widthTrue(); + si.scr.height =ae->in->height(); + + si.shift_x = infoP->lengthX; + si.shift_y = infoP->lengthY; + si.level = infoP->level; + ERR(ae->iterate16((refconType)&si,imageMap16)); + + } + return err; +} +//------------------------------------------------------------------------------------------------- +static PF_Err + Exec32 (CFsAE *ae , ParamInfo *infoP) +{ + PF_Err err = PF_Err_NONE; + + DrawInfo di = InitDrawInfo(ae,infoP); + + PF_Fixed len = infoP->speed * ae->frame()/ di.scale; + CRotCalc rt(ae->in_data); + + ShiftInfo si = InitShiftInfo(ae,infoP); + + F_SRAND(ae->frame()); + ERR(ae->iterate32((refconType)infoP,clearHalf32)); + + int idx = 0; + + F_SRAND(infoP->map[idx].seed); + if ( (infoP->map[idx].strong>0)&&(infoP->map[idx].value>0) ){ + Draw32(infoP,&di,idx); + rt.SetRotLength(infoP->rot, (PF_Fixed)((double)len * infoP->map[idx].speed)); + si.shift_x = rt.x() % (si.scr.width << 16); + si.shift_y = rt.y() % (si.scr.height << 16); + ERR(ae->iterate32((refconType)&si,shiftRed32)); + } + + idx = 1; + F_SRAND(infoP->map[idx].seed); + if ( (infoP->map[idx].strong>0)&&(infoP->map[idx].value>0) ){ + ERR(ae->iterate32((refconType)NULL,clearRed32)); + Draw32(infoP,&di,idx); + rt.SetRotLength(infoP->rot, (PF_Fixed)((double)len * infoP->map[idx].speed)); + si.shift_x = rt.x() % (si.scr.width << 16); + si.shift_y = rt.y() % (si.scr.height << 16); + ERR(ae->iterate32((refconType)&si,shiftRed32)); + } + + idx = 2; + F_SRAND(infoP->map[idx].seed); + if ( (infoP->map[idx].strong>0)&&(infoP->map[idx].value>0) ){ + ERR(ae->iterate32((refconType)NULL,clearRed32)); + Draw32(infoP,&di,idx); + rt.SetRotLength(infoP->rot, (PF_Fixed)((double)len * infoP->map[idx].speed)); + si.shift_x = rt.x() % (si.scr.width << 16); + si.shift_y = rt.y() % (si.scr.height << 16); + ERR(ae->iterate32((refconType)&si,shiftRed32)); + } + + + ERR(ae->iterate32((refconType)NULL,alphatoToRed32)); + AlphaBlur32(ae->out); + ERR(ae->iterate32((refconType)NULL,alphatoToRed32)); + AlphaBlur32(ae->out); + + if (infoP->disp_map == TRUE){ + ERR(ae->iterate32((refconType)NULL,dispMap32)); + }else{ + si.scr.data = ae->in->data(); + si.scr.width =ae->in->width(); + si.scr.widthTrue =ae->in->widthTrue(); + si.scr.height =ae->in->height(); + + si.shift_x = infoP->lengthX; + si.shift_y = infoP->lengthY; + si.level = infoP->level; + ERR(ae->iterate32((refconType)&si,imageMap32)); + + } + return err; +} +//------------------------------------------------------------------------------------------------- +static PF_Err + Exec (CFsAE *ae , ParamInfo *infoP) +{ + PF_Err err = PF_Err_NONE; + + bool b = false; + if ((infoP->lengthX<=0)&&(infoP->lengthY<=0)) b = true; + if ( (infoP->map[0].value <=0)&&(infoP->map[1].value <=0)&&(infoP->map[2].value <=0)&&(infoP->noise<=0)&&(infoP->level<=0)) b = true; + if ( (infoP->map[0].strong <=0)&&(infoP->map[1].strong <=0)&&(infoP->map[2].strong <=0)&&(infoP->noise<=0)&&(infoP->level<=0)) b = true; + + if (b){ + if (infoP->disp_map){ + PF_Pixel back = {PF_MAX_CHAN8,PF_HALF_CHAN8,PF_HALF_CHAN8,PF_HALF_CHAN8}; + ae->out->clear(back); + switch(ae->pixelFormat()) + { + case PF_PixelFormat_ARGB128: + ERR(ae->iterate32((refconType)NULL,inToAlphap32)); + break; + case PF_PixelFormat_ARGB64: + ERR(ae->iterate16((refconType)NULL,inToAlphap16)); + break; + case PF_PixelFormat_ARGB32: + ERR(ae->iterate8((refconType)NULL,inToAlphap8)); + break; + } + + }else{ + ae->CopyInToOut(); + } + return err; + } + + switch(ae->pixelFormat()) + { + case PF_PixelFormat_ARGB128: + ERR(Exec32(ae ,infoP)); + break; + case PF_PixelFormat_ARGB64: + ERR(Exec16(ae ,infoP)); + break; + case PF_PixelFormat_ARGB32: + 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/NamiGarasu/NamiGarasu.h b/NamiGarasu/NamiGarasu.h new file mode 100644 index 0000000..a27d96b --- /dev/null +++ b/NamiGarasu/NamiGarasu.h @@ -0,0 +1,239 @@ +//----------------------------------------------------------------------------------- +/* + NamiGarasu for VS2010 +*/ +//----------------------------------------------------------------------------------- + +#pragma once +#ifndef NamiGarasu_H +#define NamiGarasu_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_VALE, + + ID_ROT, + ID_SPEED, + + ID_LEVEL, + ID_NOISE, + + ID_TOPIC_A, + ID_A_SIZE, + ID_A_VALUE, + ID_A_STRONG, + ID_A_SPEED, + ID_A_SEED, + ID_TOPIC_A_END, + + ID_TOPIC_B, + ID_B_SIZE, + ID_B_VALUE, + ID_B_STRONG, + ID_B_SPEED, + ID_B_SEED, + ID_TOPIC_B_END, + + ID_TOPIC_C, + ID_C_SIZE, + ID_C_VALUE, + ID_C_STRONG, + ID_C_SPEED, + ID_C_SEED, + ID_TOPIC_C_END, + + ID_DISPMAP, + ID_LENGTH_X, + ID_LENGTH_Y, + + ID_NUM_PARAMS +}; + +//UIの表示文字列 +#define STR_VALUE "WaveValue" +#define STR_LENGTH_X "X_Length" +#define STR_LENGTH_Y "Y_Length" +#define STR_ROT "Rot" +#define STR_SPEED "Speed" +#define STR_LEVEL "AddMap" +#define STR_NOISE "Noise" + +#define STR_A "LayerA" +#define STR_A_SIZE "A_size" +#define STR_A_VALUE "A_value" +#define STR_A_STRONG "A_Strong" +#define STR_A_SPEED "A_Speed" +#define STR_A_SEED "A_Seed" + +#define STR_B "LayerB" +#define STR_B_SIZE "B_size" +#define STR_B_VALUE "B_value" +#define STR_B_STRONG "B_Strong" +#define STR_B_SPEED "B_Speed" +#define STR_B_SEED "B_Seed" + +#define STR_C "LayerC" +#define STR_C_SIZE "C_size" +#define STR_C_VALUE "C_value" +#define STR_C_STRONG "C_Strong" +#define STR_C_SPEED "C_Speed" +#define STR_C_SEED "C_Seed" + +#define STR_DISPMAP "DispMap" + +#define STR_POINT "point" + +//UIのパラメータ +typedef struct ScrInfo { + PF_PixelPtr data; + A_long width; + A_long widthTrue; + A_long height; +}ScrInfo; + +typedef struct MapInfo { + A_long size; + A_long value; + PF_FpLong strong; + PF_FpLong speed; + A_long seed; + PF_Fixed shift_x; + PF_Fixed shift_y; +}MapInfo; + +typedef struct ParamInfo { + PF_Fixed lengthX; + PF_Fixed lengthY; + PF_Fixed rot; + PF_Fixed speed; + double level; + double noise; + + MapInfo map[3]; + + PF_Boolean disp_map; + //PF_FixedPoint point; + +} ParamInfo, *ParamInfoP, **ParamInfoH; + + +#define PF_HALF_CHAN32 0.5 + +typedef struct DrawInfo{ + ScrInfo scr; + A_long x; + A_long y; + A_long sizeIdx; + A_long isW; + double strong; + A_long scale; +} DrawInfo; + +void drawSq8(DrawInfo *infoP); +void drawSq16(DrawInfo *infoP); +void drawSq32(DrawInfo *infoP); + +typedef struct ShiftInfo{ + ScrInfo scr; + PF_Fixed shift_x; + PF_Fixed shift_y; + double level; +} ShiftInfo; + +PF_Err +shiftRed8 ( + refconType refcon, + A_long xL, + A_long yL, + PF_Pixel *inP, + PF_Pixel *outP); +PF_Err +shiftRed16 ( + refconType refcon, + A_long xL, + A_long yL, + PF_Pixel16 *inP, + PF_Pixel16 *outP); + +PF_Err +shiftRed32 ( + refconType refcon, + A_long xL, + A_long yL, + PF_PixelFloat *inP, + PF_PixelFloat *outP); + +PF_Err +imageMap8 ( + refconType refcon, + A_long xL, + A_long yL, + PF_Pixel *inP, + PF_Pixel *outP); +PF_Err +imageMap16 ( + refconType refcon, + A_long xL, + A_long yL, + PF_Pixel16 *inP, + PF_Pixel16 *outP); +PF_Err +imageMap32 ( + refconType refcon, + A_long xL, + A_long yL, + PF_PixelFloat *inP, + PF_PixelFloat *outP); + +//------------------------------------------------------- +void AlphaBlur8(CFsGraph *g); +void AlphaBlur16(CFsGraph *g); +void AlphaBlur32(CFsGraph *g); + + +//----------------------------------------------------------------------------------- +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 // NamiGarasu_H diff --git a/NamiGarasu/NamiGarasuPiPL.r b/NamiGarasu/NamiGarasuPiPL.r new file mode 100644 index 0000000..98b2313 --- /dev/null +++ b/NamiGarasu/NamiGarasuPiPL.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/NamiGarasu/Win/NamiGarasu.sln b/NamiGarasu/Win/NamiGarasu.sln new file mode 100644 index 0000000..3869c57 --- /dev/null +++ b/NamiGarasu/Win/NamiGarasu.sln @@ -0,0 +1,26 @@ +サソ +Microsoft Visual Studio Solution File, Format Version 11.00 +# Visual Studio 2010 +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "NamiGarasu", "NamiGarasu.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/NamiGarasu/Win/NamiGarasu.vcxproj b/NamiGarasu/Win/NamiGarasu.vcxproj new file mode 100644 index 0000000..5814c69 --- /dev/null +++ b/NamiGarasu/Win/NamiGarasu.vcxproj @@ -0,0 +1,594 @@ +サソ + + + + Debug + Win32 + + + Debug + x64 + + + Release-MD + Win32 + + + Release-MD + x64 + + + Release + Win32 + + + Release + x64 + + + + {3AF9C08C-1DE7-4B2C-8980-B34A0A308454} + NamiGarasu + NamiGarasu + 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/NamiGarasu.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/NamiGarasu.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/NamiGarasu.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/NamiGarasu.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/NamiGarasu.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/NamiGarasu.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/NamiGarasu/Win/NamiGarasu.vcxproj.filters b/NamiGarasu/Win/NamiGarasu.vcxproj.filters new file mode 100644 index 0000000..06099b5 --- /dev/null +++ b/NamiGarasu/Win/NamiGarasu.vcxproj.filters @@ -0,0 +1,181 @@ +サソ + + + + {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 + + + + + Resource Files + + + + + + Supporting code\Fs + + + Supporting code\AE + + + Supporting code\AE + + + Supporting code\AE + + + Supporting code\AE + + + + + + + + + Supporting code\Fs + + + Supporting code\Fs + + + + + Resource Files + + + \ No newline at end of file diff --git a/NamiGarasu/Win/NamiGarasuPiPL.rc b/NamiGarasu/Win/NamiGarasuPiPL.rc new file mode 100644 index 0000000..63b187e --- /dev/null +++ b/NamiGarasu/Win/NamiGarasuPiPL.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 NamiGarasu\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 + 1050112L, + + "MIB8", + 0x65494E46L, + 0L, + 2L + 0L, + + "MIB8", + "OLGe", + 0L, + 4L, + 33556036L, + + "MIB8", + "2LGe", + 0L, + 4L, + 5193L, + + "MIB8", + "ANMe", + 0, 0x0, + 16, 0x0, + "\x0EF's NamiGarasu\0", + + "MIB8", + 0x6165464CL, + 0L, + 4L + 0L, + + +END + diff --git a/NamiGarasu/alphaBlur16.cpp b/NamiGarasu/alphaBlur16.cpp new file mode 100644 index 0000000..ae45b25 --- /dev/null +++ b/NamiGarasu/alphaBlur16.cpp @@ -0,0 +1,174 @@ +#include "NamiGarasu.h" + + +void AlphaBlur16(CFsGraph *g) +{ + PF_Pixel16 *data; + data = (PF_Pixel16 *)g->data(); + A_long wt = g->widthTrue(); + A_long ow = g->offsetWidth(); + + A_long w = g->width()-1; + A_long h = g->height()-1; + + A_long x,y; + A_long v; + + //まず、真ん中 + A_long adr=wt+1; + A_long adr2; + for(y=1;y> 5; + data[adr].alpha = RoundShort(v); + + adr++; + } + adr+=(ow+2); + } + //上下 + adr = 1; + A_long adrH = h*wt+1; + for(x=1;xdata(); + A_long wt = g->widthTrue(); + A_long ow = g->offsetWidth(); + + A_long w = g->width()-1; + A_long h = g->height()-1; + + A_long x,y; + PF_FpLong v; + + //まず、真ん中 + A_long adr=wt+1; + A_long adr2; + for(y=1;ydata(); + A_long wt = g->widthTrue(); + A_long ow = g->offsetWidth(); + + A_long w = g->width()-1; + A_long h = g->height()-1; + + A_long x,y; + A_long v; + + //まず、真ん中 + A_long adr=wt+1; + A_long adr2; + for(y=1;y> 5; + data[adr].alpha = RoundByteLong(v); + + adr++; + } + adr+=(ow+2); + } + //上下 + adr = 1; + A_long adrH = h*wt+1; + for(x=1;xdata; + + if (x<0) x=0; else if(x>=infoP->width) x =infoP->width -1; + if (y<0) y=0; else if(y>=infoP->height) y =infoP->height -1; + + return data[x + y * infoP->widthTrue]; + +} +//------------------------------------------------------------------------------------------------- +PF_Pixel16 getP16_sub(ScrInfo *infoP,A_long x, A_long y) +{ + PF_Pixel16 *data; + data = (PF_Pixel16 *)infoP->data; + + if (x<0) x=0; else if(x>=infoP->width) x =infoP->width -1; + if (y<0) y=0; else if(y>=infoP->height) y =infoP->height -1; + + return data[x + y * infoP->widthTrue]; + +} +//------------------------------------------------------------------------------------------------- +PF_Pixel32 getP32_sub(ScrInfo *infoP,A_long x, A_long y) +{ + PF_PixelFloat *data; + data = (PF_PixelFloat *)infoP->data; + + if (x<0) x=0; else if(x>=infoP->width) x =infoP->width -1; + if (y<0) y=0; else if(y>=infoP->height) y =infoP->height -1; + + return data[x + y * infoP->widthTrue]; + +} +//------------------------------------------------------------------------------------------------- +PF_Pixel getP8(ScrInfo *infoP,PF_Fixed x,PF_Fixed y) +{ + PF_Pixel p[4]; + A_long xx,yy,dx1,dy1,dx2,dy2; + 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 getP8_sub(infoP,xx,yy); + } + + p[0] = getP8_sub(infoP,xx ,yy ); + p[1] = getP8_sub(infoP,xx+1,yy ); + p[2] = getP8_sub(infoP,xx ,yy+1); + p[3] = getP8_sub(infoP,xx+1,yy+1); + + PF_Pixel ret; + ret.alpha = RoundByteLong(( ((A_long)p[0].alpha * dx2 * dy2) + ((A_long)p[1].alpha * dx1 * dy2) + ((A_long)p[2].alpha * dx2 * dy1) + ((A_long)p[3].alpha * dx1 * dy1) ) >>(16)); + ret.red = RoundByteLong(( ((A_long)p[0].red * dx2 * dy2) + ((A_long)p[1].red * dx1 * dy2) + ((A_long)p[2].red * dx2 * dy1) + ((A_long)p[3].red * dx1 * dy1) ) >>(16)); + ret.green = RoundByteLong(( ((A_long)p[0].green * dx2 * dy2) + ((A_long)p[1].green * dx1 * dy2) + ((A_long)p[2].green * dx2 * dy1) + ((A_long)p[3].green * dx1 * dy1) ) >>(16)); + ret.blue = RoundByteLong(( ((A_long)p[0].blue * dx2 * dy2) + ((A_long)p[1].blue * dx1 * dy2) + ((A_long)p[2].blue * dx2 * dy1) + ((A_long)p[3].blue * dx1 * dy1) ) >>(16)); + + + + return ret; +} +//------------------------------------------------------------------------------------------------- +PF_Pixel16 getP16(ScrInfo *infoP,PF_Fixed x,PF_Fixed y) +{ + PF_Pixel16 p[4]; + A_long xx,yy; + double dx1,dy1,dx2,dy2; + xx = x >>16; + yy = y >>16; + dx1 = ((double)(x & 0xFFFF))/65536.0; + dy1 = ((double)(y & 0xFFFF))/65536.0; + dx2 = 1.0 - dx1; + dy2 = 1.0 - dy1; + + if ( (dx1==0)&&(dy1==0) ) { + return getP16_sub(infoP,xx,yy); + } + + p[0] = getP16_sub(infoP,xx ,yy ); + p[1] = getP16_sub(infoP,xx+1,yy ); + p[2] = getP16_sub(infoP,xx ,yy+1); + p[3] = getP16_sub(infoP,xx+1,yy+1); + + PF_Pixel16 ret; + ret.alpha = RoundShortFpLong(( ((double)p[0].alpha * dx2 * dy2) + ((double)p[1].alpha * dx1 * dy2) + ((double)p[2].alpha * dx2 * dy1) + ((double)p[3].alpha * dx1 * dy1) ) ); + ret.red = RoundShortFpLong(( ((double)p[0].red * dx2 * dy2) + ((double)p[1].red * dx1 * dy2) + ((double)p[2].red * dx2 * dy1) + ((double)p[3].red * dx1 * dy1) ) ); + ret.green = RoundShortFpLong(( ((double)p[0].green * dx2 * dy2) + ((double)p[1].green * dx1 * dy2) + ((double)p[2].green * dx2 * dy1) + ((double)p[3].green * dx1 * dy1) ) ); + ret.blue = RoundShortFpLong(( ((double)p[0].blue * dx2 * dy2) + ((double)p[1].blue * dx1 * dy2) + ((double)p[2].blue * dx2 * dy1) + ((double)p[3].blue * dx1 * dy1) ) ); + //ret.blue = PF_MAX_CHAN16; + + + return ret; +} +//------------------------------------------------------------------------------------------------- +PF_Pixel32 getP32(ScrInfo *infoP,PF_Fixed x,PF_Fixed y) +{ + PF_PixelFloat p[4]; + A_long xx,yy; + double dx1,dy1,dx2,dy2; + xx = x >>16; + yy = y >>16; + dx1 = ((double)(x & 0xFFFF)) / (double)(1L<<16); + dy1 = ((double)(y & 0xFFFF)) / (double)(1L<<16); + dx2 = 1.0 - dx1; + dy2 = 1.0 - dy1; + + if ( (dx1==0)&&(dy1==0) ) { + return getP32_sub(infoP,xx,yy); + } + + p[0] = getP32_sub(infoP,xx ,yy ); + p[1] = getP32_sub(infoP,xx+1,yy ); + p[2] = getP32_sub(infoP,xx ,yy+1); + p[3] = getP32_sub(infoP,xx+1,yy+1); + + PF_PixelFloat ret; + ret.alpha = RoundFpShortDouble(( ((double)p[0].alpha * dx2 * dy2) + ((double)p[1].alpha * dx1 * dy2) + ((double)p[2].alpha * dx2 * dy1) + ((double)p[3].alpha * dx1 * dy1) ) ); + ret.red = RoundFpShortDouble(( ((double)p[0].red * dx2 * dy2) + ((double)p[1].red * dx1 * dy2) + ((double)p[2].red * dx2 * dy1) + ((double)p[3].red * dx1 * dy1) ) ); + ret.green = RoundFpShortDouble(( ((double)p[0].green * dx2 * dy2) + ((double)p[1].green * dx1 * dy2) + ((double)p[2].green * dx2 * dy1) + ((double)p[3].green * dx1 * dy1) ) ); + ret.blue = RoundFpShortDouble(( ((double)p[0].blue * dx2 * dy2) + ((double)p[1].blue * dx1 * dy2) + ((double)p[2].blue * dx2 * dy1) + ((double)p[3].blue * dx1 * dy1) ) ); + + return ret; +} +//------------------------------------------------------------------------------------------------- +PF_Err +imageMap8 ( + refconType refcon, + A_long xL, + A_long yL, + PF_Pixel *inP, + PF_Pixel *outP) +{ + PF_Err err = PF_Err_NONE; + ShiftInfo * niP = reinterpret_cast(refcon); + + double shft = ((double)outP->alpha - PF_HALF_CHAN8)/PF_HALF_CHAN8; + PF_Fixed sx = (PF_Fixed)(niP->shift_x * shft); + PF_Fixed sy = (PF_Fixed)(niP->shift_y * shft); + + + + if ((sx==0)&&(sy==0)){ + *outP = getP8_sub(&niP->scr,xL,yL); + }else{ + sx = (xL<<16) - sx; + sy = (yL<<16) - sy; + A_long a = (A_long)(((double)outP->alpha - PF_HALF_CHAN8) * niP->level); + *outP = getP8(&niP->scr,sx,sy); + if (niP->level>0){ + outP->blue = RoundByteLong(outP->blue + a); + outP->green = RoundByteLong(outP->green + a); + outP->red = RoundByteLong(outP->red + a); + } + } + return err; +} +//------------------------------------------------------------------------------------------------- +PF_Err +imageMap16 ( + refconType refcon, + A_long xL, + A_long yL, + PF_Pixel16 *inP, + PF_Pixel16 *outP) +{ + PF_Err err = PF_Err_NONE; + ShiftInfo * niP = reinterpret_cast(refcon); + + double shft = ((double)outP->alpha - PF_HALF_CHAN16)/PF_HALF_CHAN16; + PF_Fixed sx = (PF_Fixed)(niP->shift_x * shft); + PF_Fixed sy = (PF_Fixed)(niP->shift_y * shft); + + + if ((sx==0)&&(sy==0)){ + *outP = getP16_sub(&niP->scr,xL,yL); + }else{ + sx = (xL<<16) - sx; + sy = (yL<<16) - sy; + A_long a = (A_long)(((double)outP->alpha - PF_HALF_CHAN16) * niP->level); + *outP = getP16(&niP->scr,sx,sy); + if (niP->level>0){ + outP->blue = RoundShort(outP->blue + a); + outP->green = RoundShort(outP->green + a); + outP->red = RoundShort(outP->red + a); + } + } + + return err; +} +//------------------------------------------------------------------------------------------------- +PF_Err +imageMap32 ( + refconType refcon, + A_long xL, + A_long yL, + PF_PixelFloat *inP, + PF_PixelFloat *outP) +{ + PF_Err err = PF_Err_NONE; + ShiftInfo * niP = reinterpret_cast(refcon); + + double d = (double)outP->alpha; + if (d>1.0) d = 1.0; + double shft = ( d - PF_HALF_CHAN32)*2; + PF_Fixed sx = (PF_Fixed)(niP->shift_x * shft); + PF_Fixed sy = (PF_Fixed)(niP->shift_y * shft); + + + + + if ((sx==0)&&(sy==0)){ + *outP = getP32_sub(&niP->scr,xL,yL); + }else{ + sx = (xL<<16) - sx; + sy = (yL<<16) - sy; + double a = ((double)outP->alpha - PF_HALF_CHAN32) * niP->level; + *outP = getP32(&niP->scr,sx,sy); + if (niP->level>0){ + outP->blue = RoundFpShortDouble(outP->blue + a); + outP->green = RoundFpShortDouble(outP->green + a); + outP->red = RoundFpShortDouble(outP->red + a); + } + } + + return err; +} +//------------------------------------------------------------------------------------------------- diff --git a/NamiGarasu/shiftRed.cpp b/NamiGarasu/shiftRed.cpp new file mode 100644 index 0000000..10d4016 --- /dev/null +++ b/NamiGarasu/shiftRed.cpp @@ -0,0 +1,237 @@ +#include "NamiGarasu.h" + + + +//------------------------------------------------------------------------------------------------- +A_u_char getRed8_sub(ScrInfo *infoP,A_long x, A_long y) +{ + PF_Pixel *data; + data = (PF_Pixel *)infoP->data; + + if (x<0) { x = x + infoP->width;} + else if (x>=infoP->width) { x = x - infoP->width;} + + if (y<0) { y = y + infoP->height;} + else if (y>=infoP->height) { y = y - infoP->height;} + + return data[x + y * infoP->widthTrue].red; + +} +//------------------------------------------------------------------------------------------------- +A_u_short getRed16_sub(ScrInfo *infoP,A_long x, A_long y) +{ + PF_Pixel16 *data; + data = (PF_Pixel16 *)infoP->data; + + if (x<0) { x = x + infoP->width;} + else if (x>=infoP->width) { x = x - infoP->width;} + + if (y<0) { y = y + infoP->height;} + else if (y>=infoP->height) { y = y - infoP->height;} + + return data[x + y * infoP->widthTrue].red; + +} +//------------------------------------------------------------------------------------------------- +PF_FpShort getRed32_sub(ScrInfo *infoP,A_long x, A_long y) +{ + PF_PixelFloat *data; + data = (PF_PixelFloat *)infoP->data; + + if (x<0) { x = x + infoP->width;} + else if (x>=infoP->width) { x = x - infoP->width;} + + if (y<0) { y = y + infoP->height;} + else if (y>=infoP->height) { y = y - infoP->height;} + + return data[x + y * infoP->widthTrue].red; + +} +//------------------------------------------------------------------------------------------------- +A_u_char getRed8(ScrInfo *infoP,PF_Fixed x,PF_Fixed y) +{ + A_long p[4]; + A_long xx,yy,dx1,dy1,dx2,dy2; + 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 getRed8_sub(infoP,xx,yy); + } + + p[0] = (A_long)getRed8_sub(infoP,xx ,yy ); + p[1] = (A_long)getRed8_sub(infoP,xx+1,yy ); + p[2] = (A_long)getRed8_sub(infoP,xx ,yy+1); + p[3] = (A_long)getRed8_sub(infoP,xx+1,yy+1); + + A_long ret = ( (p[0] * dx2 * dy2) + (p[1] * dx1 * dy2) + (p[2] * dx2 * dy1) + (p[3] * dx1 * dy1) ) >>(16); + if ( ret>PF_MAX_CHAN8) { ret=PF_MAX_CHAN8;} + + return (A_u_char)ret; +} +//------------------------------------------------------------------------------------------------- +A_u_short getRed16(ScrInfo *infoP,PF_Fixed x,PF_Fixed y) +{ + A_long p[4]; + A_long xx,yy; + double dx1,dy1,dx2,dy2; + xx = x >>16; + yy = y >>16; + dx1 = ((double)(x & 0xFFFF))/65536.0; + dy1 = ((double)(y & 0xFFFF))/65536.0; + dx2 = 1.0 - dx1; + dy2 = 1.0 - dy1; + + if ( (dx1==0)&&(dy1==0) ) { + return getRed16_sub(infoP,xx,yy); + } + + p[0] = (A_long)getRed16_sub(infoP,xx ,yy ); + p[1] = (A_long)getRed16_sub(infoP,xx+1,yy ); + p[2] = (A_long)getRed16_sub(infoP,xx ,yy+1); + p[3] = (A_long)getRed16_sub(infoP,xx+1,yy+1); + + return RoundShortFpLong( ((double)p[0] * dx2 * dy2) + ((double)p[1] * dx1 * dy2) + ((double)p[2] * dx2 * dy1) + ((double)p[3] * dx1 * dy1) ); +} +//------------------------------------------------------------------------------------------------- +PF_FpShort getRed32(ScrInfo *infoP,PF_Fixed x,PF_Fixed y) +{ + double p[4]; + A_long xx,yy; + double dx1,dy1,dx2,dy2; + xx = x >>16; + yy = y >>16; + dx1 = ((double)(x & 0xFFFF))/65536; + dy1 = ((double)(y & 0xFFFF))/65536; + dx2 = 1.0 - dx1; + dy2 = 1.0 - dy1; + + if ( (dx1==0)&&(dy1==0) ) { + return getRed32_sub(infoP,xx,yy); + } + + p[0] = (double)getRed32_sub(infoP,xx ,yy ); + p[1] = (double)getRed32_sub(infoP,xx+1,yy ); + p[2] = (double)getRed32_sub(infoP,xx ,yy+1); + p[3] = (double)getRed32_sub(infoP,xx+1,yy+1); + + double ret = ( (p[0] * dx2 * dy2) + (p[1] * dx1 * dy2) + (p[2] * dx2 * dy1) + (p[3] * dx1 * dy1) ); + if ( ret>1.0) { ret = 1.0;} + + return (PF_FpShort)ret; +} +//------------------------------------------------------------------------------------------------- +PF_Err +shiftRed8 ( + refconType refcon, + A_long xL, + A_long yL, + PF_Pixel *inP, + PF_Pixel *outP) +{ + PF_Err err = PF_Err_NONE; + ShiftInfo * niP = reinterpret_cast(refcon); + + A_u_char ret = PF_HALF_CHAN8; + if ((niP->shift_x==0)&&(niP->shift_y==0)){ + ret = getRed8_sub(&niP->scr,xL,yL); + }else{ + PF_Fixed sx = (xL<<16) - niP->shift_x; + PF_Fixed sy = (yL<<16) - niP->shift_y; + ret = getRed8(&niP->scr,sx,sy); + + } + if (ret != PF_HALF_CHAN8){ + //outP->alpha = RoundByteLong((A_long)outP->alpha + (A_long)ret - PF_HALF_CHAN8); + A_long base = outP->alpha; + if (retalpha =ret; + } + return err; +} +//------------------------------------------------------------------------------------------------- +PF_Err +shiftRed16 ( + refconType refcon, + A_long xL, + A_long yL, + PF_Pixel16 *inP, + PF_Pixel16 *outP) +{ + PF_Err err = PF_Err_NONE; + ShiftInfo * niP = reinterpret_cast(refcon); + + A_u_short ret = PF_HALF_CHAN16; + if ((niP->shift_x==0)&&(niP->shift_y==0)){ + ret = getRed16_sub(&niP->scr,xL,yL); + }else{ + PF_Fixed sx = (xL<<16) - niP->shift_x; + PF_Fixed sy = (yL<<16) - niP->shift_y; + ret = getRed16(&niP->scr,sx,sy); + + } + if (ret != PF_HALF_CHAN16){ + //outP->alpha = RoundByteLong((A_long)outP->alpha + (A_long)ret - PF_HALF_CHAN8); + A_long base = outP->alpha; + if (retalpha =ret; + } + return err; +} +//------------------------------------------------------------------------------------------------- +PF_Err +shiftRed32 ( + refconType refcon, + A_long xL, + A_long yL, + PF_PixelFloat *inP, + PF_PixelFloat *outP) +{ + PF_Err err = PF_Err_NONE; + ShiftInfo * niP = reinterpret_cast(refcon); + + double ret = PF_HALF_CHAN32; + if ((niP->shift_x==0)&&(niP->shift_y==0)){ + ret = getRed32_sub(&niP->scr,xL,yL); + }else{ + PF_Fixed sx = (xL<<16) - niP->shift_x; + PF_Fixed sy = (yL<<16) - niP->shift_y; + ret = getRed32(&niP->scr,sx,sy); + + } + if (ret != PF_HALF_CHAN32){ + //outP->alpha = RoundByteLong((A_long)outP->alpha + (A_long)ret - PF_HALF_CHAN8); + double base = outP->alpha; + if (base>1.0) base = 1.0; + if (ret1.0) ret = 1.0; + outP->alpha =(PF_FpShort)ret; + } + return err; +} +//------------------------------------------------------------------------------------------------- diff --git a/NoiseHiLo_Alpha/Fs_Entry.h b/NoiseHiLo_Alpha/Fs_Entry.h new file mode 100644 index 0000000..15dc47a --- /dev/null +++ b/NoiseHiLo_Alpha/Fs_Entry.h @@ -0,0 +1,227 @@ +//----------------------------------------------------------------------------------- +/* + NoiseHiLo_Alpha 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/NoiseHiLo_Alpha/Fs_Target.h b/NoiseHiLo_Alpha/Fs_Target.h new file mode 100644 index 0000000..863bee0 --- /dev/null +++ b/NoiseHiLo_Alpha/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 NoiseHiLo_Alpha" + +//----------------------------------------------------------------------------------- +//プラグインの説明に使われる文字 +#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/NoiseHiLo_Alpha/NoiseHiLo_Alpha.cpp b/NoiseHiLo_Alpha/NoiseHiLo_Alpha.cpp new file mode 100644 index 0000000..3f3ae50 --- /dev/null +++ b/NoiseHiLo_Alpha/NoiseHiLo_Alpha.cpp @@ -0,0 +1,490 @@ +//----------------------------------------------------------------------------------- +/* + F's Plugins for VS2010/VS2012 +*/ +//----------------------------------------------------------------------------------- + + +#include "NoiseHiLo_Alpha.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_HI_POS, //Name + 5, //VALID_MIN + 30, //VALID_MAX + 5, //SLIDER_MIN + 30, //SLIDER_MAX + 1, //CURVE_TOLERANCE + 20, //DFLT + 1, //PREC + 0, //DISP + 0, //WANT_PHASE + ID_HI_POS + ); + //---------------------------------------------------------------- + AEFX_CLR_STRUCT(def); + PF_ADD_FLOAT_SLIDER(STR_LO_POS, //Name + 5, //VALID_MIN + 30, //VALID_MAX + 5, //SLIDER_MIN + 30, //SLIDER_MAX + 1, //CURVE_TOLERANCE + 20, //DFLT + 1, //PREC + 0, //DISP + 0, //WANT_PHASE + ID_LO_POS + ); + //---------------------------------------------------------------- + AEFX_CLR_STRUCT(def); + PF_ADD_FLOAT_SLIDER(STR_HI_LV, //Name + 0, //VALID_MIN + 100, //VALID_MAX + 0, //SLIDER_MIN + 5, //SLIDER_MAX + 1, //CURVE_TOLERANCE + 0, //DFLT + 1, //PREC + 0, //DISP + 0, //WANT_PHASE + ID_HI_LV + ); + //---------------------------------------------------------------- + AEFX_CLR_STRUCT(def); + PF_ADD_FLOAT_SLIDER(STR_MD_LV, //Name + 0, //VALID_MIN + 100, //VALID_MAX + 0, //SLIDER_MIN + 5, //SLIDER_MAX + 1, //CURVE_TOLERANCE + 0, //DFLT + 1, //PREC + 0, //DISP + 0, //WANT_PHASE + ID_MD_LV + ); + //---------------------------------------------------------------- + AEFX_CLR_STRUCT(def); + PF_ADD_FLOAT_SLIDER(STR_LO_LV, //Name + 0, //VALID_MIN + 100, //VALID_MAX + 0, //SLIDER_MIN + 5, //SLIDER_MAX + 1, //CURVE_TOLERANCE + 0, //DFLT + 1, //PREC + 0, //DISP + 0, //WANT_PHASE + ID_LO_LV + ); + + //---------------------------------------------------------------- + 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; + PF_Pixel p = *outP; + + + PF_FpLong a = (PF_FpLong)F_RAND_D1(); + PF_FpLong b = (PF_FpLong)F_RAND_D1(); + PF_FpLong m = (PF_FpLong)F_RAND_D1(); + + if (p.alpha<=0) return err; + + ParamInfo * niP = reinterpret_cast(refcon); + + PF_FpLong v = FS_CONVERT8TO32(p.alpha); + if((v<=0) || (v>=1.0) ) return err; + + a *= niP->hiLv; + if (a != 0){ + PF_FpLong st = ( 1 - 2 * niP->hiPos); + if(v>st){ + PF_FpLong md = ( 1 - niP->hiPos); + if (v == md){ + //そのまま + }else if (vmdLv; + if (m != 0){ + PF_FpLong st = (niP->loPos); + PF_FpLong md1 = (niP->loPos*2); + PF_FpLong md2 = (1 - niP->hiPos*2); + if ( md1>md2){ + md1 = (md1-md2)/2; + md2 = md1; + } + PF_FpLong lt = (1 - niP->hiPos); + if((v>st)&&(v= md1)&&(v <= md2)){ + //そのまま + }else if (vloLv; + if (b != 0){ + PF_FpLong lt = ( niP->loPos *2); + if(vloPos); + if (v == md){ + //そのまま + }else if (v(refcon); + + PF_FpLong v = (PF_FpLong)p.alpha / PF_MAX_CHAN16; + if((v<=0) || (v>=1.0) ) return err; + + a *= niP->hiLv; + if (a != 0){ + PF_FpLong st = ( 1 - 2 * niP->hiPos); + if(v>st){ + PF_FpLong md = ( 1 - niP->hiPos); + if (v == md){ + //そのまま + }else if (vmdLv; + if (m != 0){ + PF_FpLong st = (niP->loPos); + PF_FpLong md1 = (niP->loPos*2); + PF_FpLong md2 = (1 - niP->hiPos*2); + if ( md1>md2){ + md1 = (md1-md2)/2; + md2 = md1; + } + PF_FpLong lt = (1 - niP->hiPos); + if((v>st)&&(v= md1)&&(v <= md2)){ + //そのまま + }else if (vloLv; + if (b != 0){ + PF_FpLong lt = ( niP->loPos *2); + if(vloPos); + if (v == md){ + //そのまま + }else if (v(refcon); + + PF_FpLong v = p.alpha; + if((v<=0) || (v>=1.0) ) return err; + + a *= niP->hiLv; + if (a != 0){ + PF_FpLong st = ( 1 - 2 * niP->hiPos); + if(v>st){ + PF_FpLong md = ( 1 - niP->hiPos); + if (v == md){ + //そのまま + }else if (vmdLv; + if (m != 0){ + PF_FpLong st = (niP->loPos); + PF_FpLong md1 = (niP->loPos*2); + PF_FpLong md2 = (1 - niP->hiPos*2); + if ( md1>md2){ + md1 = (md1-md2)/2; + md2 = md1; + } + PF_FpLong lt = (1 - niP->hiPos); + if((v>st)&&(v= md1)&&(v <= md2)){ + //そのまま + }else if (vloLv; + if (b != 0){ + PF_FpLong lt = ( niP->loPos *2); + if(vloPos); + if (v == md){ + //そのまま + }else if (vGetFLOAT(ID_HI_POS,&infoP->hiPos)); + infoP->hiPos /= 100; + ERR(ae->GetFLOAT(ID_LO_POS,&infoP->loPos)); + infoP->loPos /= 100; + + ERR(ae->GetFLOAT(ID_HI_LV,&infoP->hiLv)); + infoP->hiLv /= 100; + ERR(ae->GetFLOAT(ID_MD_LV,&infoP->mdLv)); + infoP->mdLv /= 100; + ERR(ae->GetFLOAT(ID_LO_LV,&infoP->loLv)); + infoP->loLv /= 100; + return err; +} +//------------------------------------------------------------------------------------------------- +static PF_Err + Exec (CFsAE *ae , ParamInfo *infoP) +{ + PF_Err err = PF_Err_NONE; + + //画面をコピー + ERR(ae->CopyInToOut()); + + F_SRAND(ae->frame()); + 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/NoiseHiLo_Alpha/NoiseHiLo_Alpha.h b/NoiseHiLo_Alpha/NoiseHiLo_Alpha.h new file mode 100644 index 0000000..16b15f2 --- /dev/null +++ b/NoiseHiLo_Alpha/NoiseHiLo_Alpha.h @@ -0,0 +1,117 @@ +//----------------------------------------------------------------------------------- +/* + NoiseHiLo_Alpha for VS2010 +*/ +//----------------------------------------------------------------------------------- + +#pragma once +#ifndef NoiseHiLo_Alpha_H +#define NoiseHiLo_Alpha_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_HI_POS, + ID_LO_POS, + + ID_HI_LV, + ID_MD_LV, + ID_LO_LV, + + ID_NUM_PARAMS +}; + +//UIの表示文字列 +#define STR_HI_POS "HightPos(%)" +#define STR_LO_POS "LoPos(%)" +#define STR_HI_LV "HighLevel(%)" +#define STR_MD_LV "MidLevel(%)" +#define STR_LO_LV "LoLevel(%)" + +//UIのパラメータ +typedef struct ParamInfo { + PF_FpLong hiPos; + PF_FpLong loPos; + + PF_FpLong hiLv; + PF_FpLong mdLv; + PF_FpLong loLv; +} ParamInfo, *ParamInfoP, **ParamInfoH; + +//------------------------------------------------------- +inline PF_FpLong pxV8(PF_Pixel p) +{ + PF_PixelFloat pp = CONV8TO32(p); + PF_FpLong r = (PF_FpLong)(( 0.29891 * pp.red) + ( 0.58661 * pp.green) + ( 0.11448 * pp.blue)); + if ( r<0) r = 0; + else if(r>1) r = 1; + return r; +} +//------------------------------------------------------- +inline PF_FpLong pxV16(PF_Pixel16 p) +{ + PF_PixelFloat pp = CONV16TO32(p); + PF_FpLong r = (PF_FpLong)(( 0.29891 * pp.red) + ( 0.58661 * pp.green) + ( 0.11448 * pp.blue)); + if ( r<0) r = 0; + else if(r>1) r = 1; + return r; +} +//------------------------------------------------------- +inline PF_FpLong pxV32(PF_PixelFloat p) +{ + PF_FpLong r = (PF_FpLong)(( 0.29891 * p.red) + ( 0.58661 * p.green) + ( 0.11448 * p.blue)); + if ( r<0) r = 0; + else if(r>1) r = 1; + 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 // NoiseHiLo_Alpha_H diff --git a/NoiseHiLo_Alpha/NoiseHiLo_AlphaPiPL.r b/NoiseHiLo_Alpha/NoiseHiLo_AlphaPiPL.r new file mode 100644 index 0000000..33eadc0 --- /dev/null +++ b/NoiseHiLo_Alpha/NoiseHiLo_AlphaPiPL.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/NoiseHiLo_Alpha/Win/NoiseHiLo_Alpha.vcxproj b/NoiseHiLo_Alpha/Win/NoiseHiLo_Alpha.vcxproj new file mode 100644 index 0000000..6c47063 --- /dev/null +++ b/NoiseHiLo_Alpha/Win/NoiseHiLo_Alpha.vcxproj @@ -0,0 +1,591 @@ +サソ + + + + Debug + Win32 + + + Debug + x64 + + + Release-MD + Win32 + + + Release-MD + x64 + + + Release + Win32 + + + Release + x64 + + + + {2F37F615-6971-4E25-A7E7-F84C9667FC17} + NoiseHiLo_Alpha + NoiseHiLo_Alpha + 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/NoiseHiLo_Alpha.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/NoiseHiLo_Alpha.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/NoiseHiLo_Alpha.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/NoiseHiLo_Alpha.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/NoiseHiLo_Alpha.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/NoiseHiLo_Alpha.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/NoiseHiLo_Alpha/Win/NoiseHiLo_Alpha.vcxproj.filters b/NoiseHiLo_Alpha/Win/NoiseHiLo_Alpha.vcxproj.filters new file mode 100644 index 0000000..4e2919f --- /dev/null +++ b/NoiseHiLo_Alpha/Win/NoiseHiLo_Alpha.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/NoiseHiLo_Alpha/Win/NoiseHiLo_AlphaPiPL.rc b/NoiseHiLo_Alpha/Win/NoiseHiLo_AlphaPiPL.rc new file mode 100644 index 0000000..d36e00f --- /dev/null +++ b/NoiseHiLo_Alpha/Win/NoiseHiLo_AlphaPiPL.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 NoiseHiLo_Alpha", + + "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, + "\x13F's NoiseHiLo_Alpha", + + "MIB8", + 0x6165464CL, + 0L, + 4L + 0L, + + +END + diff --git a/NoiseHiLo_RGB/Fs_Entry.h b/NoiseHiLo_RGB/Fs_Entry.h new file mode 100644 index 0000000..b88277f --- /dev/null +++ b/NoiseHiLo_RGB/Fs_Entry.h @@ -0,0 +1,227 @@ +//----------------------------------------------------------------------------------- +/* + NoiseHiLo_RGB 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/NoiseHiLo_RGB/Fs_Target.h b/NoiseHiLo_RGB/Fs_Target.h new file mode 100644 index 0000000..204c4d6 --- /dev/null +++ b/NoiseHiLo_RGB/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 NoiseHiLo_RGB" + +//----------------------------------------------------------------------------------- +//プラグインの説明に使われる文字 +#define FS_DESCRIPTION "RGBチャンネルの明るい・暗いところ別にノイズを加えるフィルタ" + +//----------------------------------------------------------------------------------- +//プラグインが表示されるメニュー名 +#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/NoiseHiLo_RGB/NoiseHiLo_RGB.cpp b/NoiseHiLo_RGB/NoiseHiLo_RGB.cpp new file mode 100644 index 0000000..eaa543a --- /dev/null +++ b/NoiseHiLo_RGB/NoiseHiLo_RGB.cpp @@ -0,0 +1,511 @@ +//----------------------------------------------------------------------------------- +/* + F's Plugins for VS2010/VS2012 +*/ +//----------------------------------------------------------------------------------- + + +#include "NoiseHiLo_RGB.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_HI_POS, //Name + 5, //VALID_MIN + 30, //VALID_MAX + 5, //SLIDER_MIN + 30, //SLIDER_MAX + 1, //CURVE_TOLERANCE + 20, //DFLT + 1, //PREC + 0, //DISP + 0, //WANT_PHASE + ID_HI_POS + ); + //---------------------------------------------------------------- + AEFX_CLR_STRUCT(def); + PF_ADD_FLOAT_SLIDER(STR_LO_POS, //Name + 5, //VALID_MIN + 30, //VALID_MAX + 5, //SLIDER_MIN + 30, //SLIDER_MAX + 1, //CURVE_TOLERANCE + 20, //DFLT + 1, //PREC + 0, //DISP + 0, //WANT_PHASE + ID_LO_POS + ); + //---------------------------------------------------------------- + AEFX_CLR_STRUCT(def); + PF_ADD_FLOAT_SLIDER(STR_HI_LV, //Name + 0, //VALID_MIN + 100, //VALID_MAX + 0, //SLIDER_MIN + 5, //SLIDER_MAX + 1, //CURVE_TOLERANCE + 0, //DFLT + 1, //PREC + 0, //DISP + 0, //WANT_PHASE + ID_HI_LV + ); + //---------------------------------------------------------------- + AEFX_CLR_STRUCT(def); + PF_ADD_FLOAT_SLIDER(STR_MD_LV, //Name + 0, //VALID_MIN + 100, //VALID_MAX + 0, //SLIDER_MIN + 5, //SLIDER_MAX + 1, //CURVE_TOLERANCE + 0, //DFLT + 1, //PREC + 0, //DISP + 0, //WANT_PHASE + ID_MD_LV + ); + //---------------------------------------------------------------- + AEFX_CLR_STRUCT(def); + PF_ADD_FLOAT_SLIDER(STR_LO_LV, //Name + 0, //VALID_MIN + 100, //VALID_MAX + 0, //SLIDER_MIN + 5, //SLIDER_MAX + 1, //CURVE_TOLERANCE + 0, //DFLT + 1, //PREC + 0, //DISP + 0, //WANT_PHASE + ID_LO_LV + ); + + //---------------------------------------------------------------- + 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; + PF_Pixel p = *outP; + + + PF_FpLong a = (PF_FpLong)F_RAND_D1(); + PF_FpLong b = (PF_FpLong)F_RAND_D1(); + PF_FpLong m = (PF_FpLong)F_RAND_D1(); + + if (p.alpha<=0) return err; + + ParamInfo * niP = reinterpret_cast(refcon); + + PF_FpLong v = pxV8(p); + if((v<=0) || (v>=1.0) ) return err; + + a *= niP->hiLv; + if (a != 0){ + PF_FpLong st = ( 1 - 2 * niP->hiPos); + if(v>st){ + PF_FpLong md = ( 1 - niP->hiPos); + if (v == md){ + //そのまま + }else if (vmdLv; + if (m != 0){ + PF_FpLong st = (niP->loPos); + PF_FpLong md1 = (niP->loPos*2); + PF_FpLong md2 = (1 - niP->hiPos*2); + if ( md1>md2){ + md1 = (md1-md2)/2; + md2 = md1; + } + PF_FpLong lt = (1 - niP->hiPos); + if((v>st)&&(v= md1)&&(v <= md2)){ + //そのまま + }else if (vloLv; + if (b != 0){ + PF_FpLong lt = ( niP->loPos *2); + if(vloPos); + if (v == md){ + //そのまま + }else if (v(refcon); + + PF_FpLong v = pxV16(p); + if((v<=0) || (v>=1.0) ) return err; + + a *= niP->hiLv; + if (a != 0){ + PF_FpLong st = ( 1 - 2 * niP->hiPos); + if(v>st){ + PF_FpLong md = ( 1 - niP->hiPos); + if (v == md){ + //そのまま + }else if (vmdLv; + if (m != 0){ + PF_FpLong st = (niP->loPos); + PF_FpLong md1 = (niP->loPos*2); + PF_FpLong md2 = (1 - niP->hiPos*2); + if ( md1>md2){ + md1 = (md1-md2)/2; + md2 = md1; + } + PF_FpLong lt = (1 - niP->hiPos); + if((v>st)&&(v= md1)&&(v <= md2)){ + //そのまま + }else if (vloLv; + if (b != 0){ + PF_FpLong lt = ( niP->loPos *2); + if(vloPos); + if (v == md){ + //そのまま + }else if (v(refcon); + + PF_FpLong v = pxV32(p); + if((v<=0) || (v>=1.0) ) return err; + + a *= niP->hiLv; + if (a != 0){ + PF_FpLong st = ( 1 - 2 * niP->hiPos); + if(v>st){ + PF_FpLong md = ( 1 - niP->hiPos); + if (v == md){ + //そのまま + }else if (vmdLv; + if (m != 0){ + PF_FpLong st = (niP->loPos); + PF_FpLong md1 = (niP->loPos*2); + PF_FpLong md2 = (1 - niP->hiPos*2); + if ( md1>md2){ + md1 = (md1-md2)/2; + md2 = md1; + } + PF_FpLong lt = (1 - niP->hiPos); + if((v>st)&&(v= md1)&&(v <= md2)){ + //そのまま + }else if (vloLv; + if (b != 0){ + PF_FpLong lt = ( niP->loPos *2); + if(vloPos); + if (v == md){ + //そのまま + }else if (vGetFLOAT(ID_HI_POS,&infoP->hiPos)); + infoP->hiPos /= 100; + ERR(ae->GetFLOAT(ID_LO_POS,&infoP->loPos)); + infoP->loPos /= 100; + + ERR(ae->GetFLOAT(ID_HI_LV,&infoP->hiLv)); + infoP->hiLv /= 100; + ERR(ae->GetFLOAT(ID_MD_LV,&infoP->mdLv)); + infoP->mdLv /= 100; + ERR(ae->GetFLOAT(ID_LO_LV,&infoP->loLv)); + infoP->loLv /= 100; + return err; +} +//------------------------------------------------------------------------------------------------- +static PF_Err + Exec (CFsAE *ae , ParamInfo *infoP) +{ + PF_Err err = PF_Err_NONE; + + //画面をコピー + ERR(ae->CopyInToOut()); + + F_SRAND(ae->frame()); + 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/NoiseHiLo_RGB/NoiseHiLo_RGB.h b/NoiseHiLo_RGB/NoiseHiLo_RGB.h new file mode 100644 index 0000000..1167f78 --- /dev/null +++ b/NoiseHiLo_RGB/NoiseHiLo_RGB.h @@ -0,0 +1,117 @@ +//----------------------------------------------------------------------------------- +/* + NoiseHiLo_RGB for VS2010 +*/ +//----------------------------------------------------------------------------------- + +#pragma once +#ifndef NoiseHiLo_RGB_H +#define NoiseHiLo_RGB_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_HI_POS, + ID_LO_POS, + + ID_HI_LV, + ID_MD_LV, + ID_LO_LV, + + ID_NUM_PARAMS +}; + +//UIの表示文字列 +#define STR_HI_POS "HightPos(%)" +#define STR_LO_POS "LoPos(%)" +#define STR_HI_LV "HighLevel(%)" +#define STR_MD_LV "MidLevel(%)" +#define STR_LO_LV "LoLevel(%)" + +//UIのパラメータ +typedef struct ParamInfo { + PF_FpLong hiPos; + PF_FpLong loPos; + + PF_FpLong hiLv; + PF_FpLong mdLv; + PF_FpLong loLv; +} ParamInfo, *ParamInfoP, **ParamInfoH; + +//------------------------------------------------------- +inline PF_FpLong pxV8(PF_Pixel p) +{ + PF_PixelFloat pp = CONV8TO32(p); + PF_FpLong r = (PF_FpLong)(( 0.29891 * pp.red) + ( 0.58661 * pp.green) + ( 0.11448 * pp.blue)); + if ( r<0) r = 0; + else if(r>1) r = 1; + return r; +} +//------------------------------------------------------- +inline PF_FpLong pxV16(PF_Pixel16 p) +{ + PF_PixelFloat pp = CONV16TO32(p); + PF_FpLong r = (PF_FpLong)(( 0.29891 * pp.red) + ( 0.58661 * pp.green) + ( 0.11448 * pp.blue)); + if ( r<0) r = 0; + else if(r>1) r = 1; + return r; +} +//------------------------------------------------------- +inline PF_FpLong pxV32(PF_PixelFloat p) +{ + PF_FpLong r = (PF_FpLong)(( 0.29891 * p.red) + ( 0.58661 * p.green) + ( 0.11448 * p.blue)); + if ( r<0) r = 0; + else if(r>1) r = 1; + 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 // NoiseHiLo_RGB_H diff --git a/NoiseHiLo_RGB/NoiseHiLo_RGBPiPL.r b/NoiseHiLo_RGB/NoiseHiLo_RGBPiPL.r new file mode 100644 index 0000000..33eadc0 --- /dev/null +++ b/NoiseHiLo_RGB/NoiseHiLo_RGBPiPL.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/NoiseHiLo_RGB/Win/NoiseHiLo_RGB.vcxproj b/NoiseHiLo_RGB/Win/NoiseHiLo_RGB.vcxproj new file mode 100644 index 0000000..59f66f9 --- /dev/null +++ b/NoiseHiLo_RGB/Win/NoiseHiLo_RGB.vcxproj @@ -0,0 +1,591 @@ +サソ + + + + Debug + Win32 + + + Debug + x64 + + + Release-MD + Win32 + + + Release-MD + x64 + + + Release + Win32 + + + Release + x64 + + + + {EBF5387A-7397-47AE-BF29-ADCF3650796C} + NoiseHiLo_RGB + NoiseHiLo_RGB + 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/NoiseHiLo_RGB.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/NoiseHiLo_RGB.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/NoiseHiLo_RGB.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/NoiseHiLo_RGB.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/NoiseHiLo_RGB.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/NoiseHiLo_RGB.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/NoiseHiLo_RGB/Win/NoiseHiLo_RGB.vcxproj.filters b/NoiseHiLo_RGB/Win/NoiseHiLo_RGB.vcxproj.filters new file mode 100644 index 0000000..98197e8 --- /dev/null +++ b/NoiseHiLo_RGB/Win/NoiseHiLo_RGB.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/NoiseHiLo_RGB/Win/NoiseHiLo_RGBPiPL.rc b/NoiseHiLo_RGB/Win/NoiseHiLo_RGBPiPL.rc new file mode 100644 index 0000000..85d0c6e --- /dev/null +++ b/NoiseHiLo_RGB/Win/NoiseHiLo_RGBPiPL.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 NoiseHiLo_RGB\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 NoiseHiLo_RGB\0\0", + + "MIB8", + 0x6165464CL, + 0L, + 4L + 0L, + + +END + diff --git a/OpticalDiffusion/DF16.cpp b/OpticalDiffusion/DF16.cpp new file mode 100644 index 0000000..ebad26a --- /dev/null +++ b/OpticalDiffusion/DF16.cpp @@ -0,0 +1,399 @@ +#include "OpticalDiffusion.h" + +//ブレンド入れ替え用 +static PF_Err (*blendFunc16)(refconType refcon, A_long xL, A_long yL,PF_Pixel16 *inP,PF_Pixel16 *outP); + +//------------------------------------------------------------------------------------------------- +//デバンド対策の気休めノイズ +//------------------------------------------------------------------------------------------------- +static PF_Err +noise16 ( + 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_long v = (A_long)(niP->noiseValue * PF_MAX_CHAN16); + A_long rnd = v - (v * 2 * F_RAND() / F_RAND_MAX); + if (rnd!=0){ + if (outP->alpha>0){ + outP->red = RoundShort( outP->red + rnd); + outP->green = RoundShort( outP->green + rnd); + outP->blue = RoundShort( outP->blue + rnd); + } + } + return err; +} + +//------------------------------------------------------------------------------------------------- +//抽出 +//------------------------------------------------------------------------------------------------- +static PF_Err +extract16 ( + 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_long a = outP->alpha; + outP->alpha = 0; + + //アルファーを考慮して輝度を求める + A_long v = (A_long)( (( 0.29891 * (PF_FpLong)outP->red) + ( 0.58661 * (PF_FpLong)outP->green) + ( 0.11448 * (PF_FpLong)outP->blue)) * ((PF_FpLong)a / PF_MAX_CHAN16) ); + A_long v2 = v; + + A_long b0 = FS_CONVERT8TO16(niP->blackPoint - niP->blackSoftness); + A_long b1 = FS_CONVERT8TO16(niP->blackPoint); + A_long w0 = FS_CONVERT8TO16(niP->whitePoint); + A_long w1 = FS_CONVERT8TO16(niP->whitePoint + niP->whiteSoftness); + if ( vinvert){ + v2 = PF_MAX_CHAN16 - v2; + } + outP->alpha = RoundShort(a * v2 / PF_MAX_CHAN16); + + //指定した色を残す + if((niP->extract_color_Count>0)&&(outP->alphaextract_color_Count; i++){ + PF_Fixed ah = (PF_Fixed)(F_ABS(hlsa.H - niP->extract_colors[i].H) * 65536); + PF_Fixed as = (PF_Fixed)(F_ABS(hlsa.S - niP->extract_colors[i].S) * 65536); + if ( (ah<=niP->extract_color_Range)&&(as<=niP->extract_color_Range)){ + PF_Fixed al = (PF_Fixed)(F_ABS(hlsa.L - niP->extract_colors[i].L) * 65536); + if (al<0x4000) { + A_u_short a2 = RoundShort( PF_MAX_CHAN16 *(0x4000 - al) /0x4000); + if ( outP->alpha < a2) outP->alpha = a2; + break; + } + } + } + } + + return err; +} +//------------------------------------------------------------------------------------------------- +static PF_Err +persentBlend16 ( + 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 i = *inP; + PF_Pixel16 o = *outP; + + if(niP->blendOpacity >= 1){ + // + }else if (niP->blendOpacity <= 0){ + *outP = i; + }else{ + PF_FpLong r1 = niP->blendOpacity; + PF_FpLong r2 = 1 -r1; + + o.alpha = RoundShortFpLong( (PF_FpLong)o.alpha * r1 + (PF_FpLong)i.alpha * r2); + if (o.alpha ==0){ + o.blue = o.green = o.red = 0; + }else{ + //マット合成に直す + i.red = RoundShortFpLong( (A_long)i.red * (A_long)i.alpha / PF_MAX_CHAN16); + i.green = RoundShortFpLong( (A_long)i.green * (A_long)i.alpha / PF_MAX_CHAN16); + i.blue = RoundShortFpLong( (A_long)i.blue * (A_long)i.alpha / PF_MAX_CHAN16); + + //マット合成に直す + o.red = RoundShortFpLong( (A_long)o.red * (A_long)o.alpha / PF_MAX_CHAN16); + o.green = RoundShortFpLong( (A_long)o.green * (A_long)o.alpha / PF_MAX_CHAN16); + o.blue = RoundShortFpLong( (A_long)o.blue * (A_long)o.alpha / PF_MAX_CHAN16); + + o.red = RoundShortFpLong( ((PF_FpLong)o.red * r1 + (PF_FpLong)i.red * r2 )*PF_MAX_CHAN16 / (PF_FpLong)o.alpha); + o.green = RoundShortFpLong( ((PF_FpLong)o.green * r1 + (PF_FpLong)i.green * r2 )*PF_MAX_CHAN16 / (PF_FpLong)o.alpha); + o.blue = RoundShortFpLong( ((PF_FpLong)o.blue * r1 + (PF_FpLong)i.blue * r2 )*PF_MAX_CHAN16 / (PF_FpLong)o.alpha); + } + + *outP = o; + + } + return err; +} +//------------------------------------------------------------------------------------------------- +static PF_Err +normalBlend16 ( + 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 i = *inP; + PF_Pixel16 o = *outP; + + *outP = PixelBlend16(i,o); + return err; +} +//------------------------------------------------------------------------------------------------- +static PF_Err +ligtenBlend16 ( + 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 i = *inP; + PF_Pixel16 o = *outP; + + + if (i.alpha <= 0){ + return err; + } + + o = PixelBlend16(i,o); + + if (o.red(refcon); + + PF_Pixel16 i = *inP; + PF_Pixel16 o = *outP; + + if (i.alpha <= 0){ + return err; + } + + o = PixelBlend16(i,o); + + if (o.red>i.red) + o.red = i.red; + if (o.green>i.green) + o.green = i.green; + if (o.blue>i.blue) + o.blue = i.blue; + + *outP = o; + + + return err; +} +//------------------------------------------------------------------------------------------------- +static PF_Err +screenBlend16 ( + 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 i = *inP; + PF_Pixel16 o = *outP; + + if (i.alpha <= 0){ + return err; + }else if(o.alpha <=0){ + *outP = i; + return err; + } + A_u_short a = RoundShort(i.alpha + o.alpha - (i.alpha * o.alpha)/PF_MAX_CHAN16); + + if (a == 0){ + o.blue = o.green = o.red = 0; + o.alpha = 0; + }else{ + //マット合成に直す + i.red = RoundShort( (A_long)i.red * (A_long)i.alpha / PF_MAX_CHAN16); + i.green = RoundShort( (A_long)i.green * (A_long)i.alpha / PF_MAX_CHAN16); + i.blue = RoundShort( (A_long)i.blue * (A_long)i.alpha / PF_MAX_CHAN16); + + o.red = RoundShort( (A_long)o.red * (A_long)o.alpha / PF_MAX_CHAN16); + o.green = RoundShort( (A_long)o.green * (A_long)o.alpha / PF_MAX_CHAN16); + o.blue = RoundShort( (A_long)o.blue * (A_long)o.alpha / PF_MAX_CHAN16); + + + if (a==PF_MAX_CHAN16){ + o.red = RoundShort((i.red + o.red - (i.red * o.red) /PF_MAX_CHAN16)); + o.green = RoundShort((i.green + o.green - (i.green * o.green)/PF_MAX_CHAN16)); + o.blue = RoundShort((i.blue + o.blue - (i.blue * o.blue) /PF_MAX_CHAN16)); + o.alpha = PF_MAX_CHAN16; + }else{ + o.red = RoundShort((i.red + o.red - (i.red * o.red) /PF_MAX_CHAN16)*PF_MAX_CHAN16/a); + o.green = RoundShort((i.green + o.green - (i.green * o.green)/PF_MAX_CHAN16)*PF_MAX_CHAN16/a); + o.blue = RoundShort((i.blue + o.blue - (i.blue * o.blue) /PF_MAX_CHAN16)*PF_MAX_CHAN16/a); + o.alpha = a; + } + + } + *outP = o; + + return err; +} +//------------------------------------------------------------------------------------------------- +static PF_Err +multiplyBlend16 ( + 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 i = *inP; + PF_Pixel16 o = *outP; + + if (i.alpha <= 0){ + return err; + }else if(o.alpha <=0){ + *outP = i; + return err; + } + + + A_u_short a = RoundShort(i.alpha + o.alpha - (i.alpha * o.alpha)/PF_MAX_CHAN16); + if (a ==0){ + o.blue = o.green = o.red = 0; + o.alpha = 0; + + }else{ + //白マットへ + i.red = RoundShort( ((A_long)i.red * (A_long)i.alpha)/PF_MAX_CHAN16 + PF_MAX_CHAN16-(A_long)i.alpha); + i.green = RoundShort( ((A_long)i.green* (A_long)i.alpha)/PF_MAX_CHAN16 + PF_MAX_CHAN16-(A_long)i.alpha); + i.blue = RoundShort( ((A_long)i.blue * (A_long)i.alpha)/PF_MAX_CHAN16 + PF_MAX_CHAN16-(A_long)i.alpha); + + o.red = RoundShort( ((A_long)o.red * (A_long)o.alpha)/PF_MAX_CHAN16 + PF_MAX_CHAN16-(A_long)o.alpha); + o.green = RoundShort( ((A_long)o.green* (A_long)o.alpha)/PF_MAX_CHAN16 + PF_MAX_CHAN16-(A_long)o.alpha); + o.blue = RoundShort( ((A_long)o.blue * (A_long)o.alpha)/PF_MAX_CHAN16 + PF_MAX_CHAN16-(A_long)o.alpha); + + if (a == PF_MAX_CHAN16){ + o.red = RoundShort(i.red * o.red /PF_MAX_CHAN16); + o.green = RoundShort(i.green * o.green/PF_MAX_CHAN16); + o.blue = RoundShort(i.blue * o.blue /PF_MAX_CHAN16); + }else{ + o.red = RoundShort(((i.red * o.red /PF_MAX_CHAN16) - PF_MAX_CHAN16 + a ) * PF_MAX_CHAN16/a); + o.green = RoundShort(((i.green* o.green/PF_MAX_CHAN16) - PF_MAX_CHAN16 + a ) * PF_MAX_CHAN16/a); + o.blue = RoundShort(((i.blue * o.blue /PF_MAX_CHAN16) - PF_MAX_CHAN16 + a ) * PF_MAX_CHAN16/a); + } + o.alpha = a; + } + + *outP = o; + + return err; +} +//****************************************************************** +PF_Err DF16(CFsAE *ae , ParamInfo *infoP) +{ + PF_Err err = PF_Err_NONE; + ERR(ae->CopyInToOut()); + + if (infoP->blendOpacity<=0){ + return err; + } + + //画像抽出 + if (infoP->extractEnabled){ + ERR(ae->iterate16((refconType)infoP,extract16)); + } + + //最大・最小 + //最大・最小 + if (infoP->minimax1!=0){ + ae->out->Minimax16(infoP->minimax1); + } + if (infoP->minimax2!=0){ + ae->out->Minimax16(infoP->minimax2); + } + //ぼかし + if (infoP->blur>0){ + ae->out->gblur16(infoP->blur); + } + //ブレンド + if (infoP->blendMode != BLEND_MODE::none){ + blendFunc16 = NULL; + + switch(infoP->blendMode){ + case BLEND_MODE::Normal: + blendFunc16 = normalBlend16; + break; + case BLEND_MODE::Lighten: + blendFunc16 = ligtenBlend16; + break; + case BLEND_MODE::Darken: + blendFunc16 = darkenBlend16; + break; + case BLEND_MODE::Screen: + blendFunc16 = screenBlend16; + break; + case BLEND_MODE::Multiply: + blendFunc16 = multiplyBlend16; + break; + } + if (blendFunc16 != NULL){ + ERR(ae->iterate16((refconType)infoP,blendFunc16)); + } + } + if (infoP->blendOpacity<1){ + ERR(ae->iterate16((refconType)infoP,persentBlend16)); + } + if (infoP->noiseValue>0){ + F_SRAND(ae->frame()); + ERR(ae->iterate16((refconType)infoP,noise16)); + } + + + return err; +} +//****************************************************************** diff --git a/OpticalDiffusion/DF32.cpp b/OpticalDiffusion/DF32.cpp new file mode 100644 index 0000000..30912a6 --- /dev/null +++ b/OpticalDiffusion/DF32.cpp @@ -0,0 +1,400 @@ +#include "OpticalDiffusion.h" + +//ブレンド入れ替え用 +static PF_Err (*blendFunc32)(refconType refcon, A_long xL, A_long yL,PF_PixelFloat *inP,PF_PixelFloat *outP); + +//------------------------------------------------------------------------------------------------- +//デバンド対策の気休めノイズ +//------------------------------------------------------------------------------------------------- +static PF_Err +noise32 ( + 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); + + double v = niP->noiseValue; + double rnd = v - (v * 2 * (double)F_RAND() / F_RAND_MAX); + if (rnd!=0){ + if (outP->alpha>0){ + outP->red = RoundFpShortDouble( outP->red + rnd); + outP->green = RoundFpShortDouble( outP->green + rnd); + outP->blue = RoundFpShortDouble( outP->blue + rnd); + } + } + return err; +} + +//------------------------------------------------------------------------------------------------- +//抽出 +//------------------------------------------------------------------------------------------------- +static PF_Err +extract32 ( + 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_FpShort a = outP->alpha; + outP->alpha = 0; + + //アルファーを考慮して輝度を求める + //無理やり整数化 + double vb = ( (0.29891 * outP->red) + ( 0.58661 * outP->green) + ( 0.11448 * outP->blue)) * a ; + A_long v = (A_long)((vb * PF_MAX_CHAN16) + 0.5); + double v2 = v; + + A_long b0 = FS_CONVERT8TO16(niP->blackPoint - niP->blackSoftness); + A_long b1 = FS_CONVERT8TO16(niP->blackPoint); + A_long w0 = FS_CONVERT8TO16(niP->whitePoint); + A_long w1 = FS_CONVERT8TO16(niP->whitePoint + niP->whiteSoftness); + if ( vinvert){ + v2 = 1.0 - v2; + } + outP->alpha = RoundFpShortDouble(a * v2); + + //指定した色を残す + if((niP->extract_color_Count>0)&&(outP->alpha<1.0)){ + PF_PixelFloat p32 = *inP; + HLSA hlsa = RGBtoHLS(p32); + for ( int i=0; iextract_color_Count; i++){ + PF_Fixed ah = (PF_Fixed)(F_ABS(hlsa.H - niP->extract_colors[i].H) * 65536); + PF_Fixed as = (PF_Fixed)(F_ABS(hlsa.S - niP->extract_colors[i].S) * 65536); + if ( (ah<=niP->extract_color_Range)&&(as<=niP->extract_color_Range)){ + PF_Fixed al = (PF_Fixed)(F_ABS(hlsa.L - niP->extract_colors[i].L) * 65536); + if (al<0x4000) { + PF_FpShort a2 = RoundFpShortDouble( (double)(0x4000 - al) /(double)0x4000); + if ( outP->alpha < a2) outP->alpha = a2; + break; + } + } + } + } + + return err; +} +//------------------------------------------------------------------------------------------------- +static PF_Err +persentBlend32 ( + 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 i = *inP; + PF_PixelFloat o = *outP; + + if(niP->blendOpacity >= 1){ + // + }else if (niP->blendOpacity <= 0){ + *outP = i; + }else{ + + PF_FpLong r1 = niP->blendOpacity; + PF_FpLong r2 = 1 -r1; + + o.alpha = RoundFpShortDouble( (PF_FpLong)o.alpha * r1 + (PF_FpLong)i.alpha * r2); + if (o.alpha ==0){ + o.blue = o.green = o.red = 0; + }else{ + //マット合成に直す + i.red = RoundFpShortDouble( i.red * i.alpha); + i.green = RoundFpShortDouble( i.green* i.alpha); + i.blue = RoundFpShortDouble( i.blue * i.alpha ); + + //マット合成に直す + o.red = RoundFpShortDouble( o.red * o.alpha); + o.green = RoundFpShortDouble( o.green* o.alpha); + o.blue = RoundFpShortDouble( o.blue * o.alpha); + + o.red = RoundFpShortDouble( ((PF_FpLong)o.red * r1 + (PF_FpLong)i.red * r2 )/ (PF_FpLong)o.alpha); + o.green = RoundFpShortDouble( ((PF_FpLong)o.green * r1 + (PF_FpLong)i.green * r2 )/ (PF_FpLong)o.alpha); + o.blue = RoundFpShortDouble( ((PF_FpLong)o.blue * r1 + (PF_FpLong)i.blue * r2 )/ (PF_FpLong)o.alpha); + } + + *outP = o; + } + return err; +} +//------------------------------------------------------------------------------------------------- +static PF_Err +normalBlend32 ( + 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 i = *inP; + PF_PixelFloat o = *outP; + + *outP = PixelBlend32(i,o); + return err; +} +//------------------------------------------------------------------------------------------------- +static PF_Err +ligtenBlend32 ( + 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 i = *inP; + PF_PixelFloat o = *outP; + + + if (i.alpha <= 0){ + return err; + } + + o = PixelBlend32(i,o); + + if (o.red(refcon); + + PF_PixelFloat i = *inP; + PF_PixelFloat o = *outP; + + if (i.alpha <= 0){ + return err; + } + + o = PixelBlend32(i,o); + + if (o.red>i.red) + o.red = i.red; + if (o.green>i.green) + o.green = i.green; + if (o.blue>i.blue) + o.blue = i.blue; + + *outP = o; + + + return err; +} +//------------------------------------------------------------------------------------------------- +static PF_Err +screenBlend32 ( + 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 i = *inP; + PF_PixelFloat o = *outP; + + if (i.alpha <= 0){ + return err; + }else if(o.alpha <=0){ + *outP = i; + return err; + } + PF_FpShort a= RoundFpShortDouble(i.alpha + o.alpha - (i.alpha * o.alpha)); + + if (a == 0){ + o.blue = o.green = o.red = 0; + o.alpha = 0; + }else{ + //マット合成に直す + i.red = RoundFpShortDouble( i.red * i.alpha); + i.green = RoundFpShortDouble( i.green * i.alpha); + i.blue = RoundFpShortDouble( i.blue * i.alpha); + + o.red = RoundFpShortDouble( o.red * o.alpha); + o.green = RoundFpShortDouble( o.green * o.alpha); + o.blue = RoundFpShortDouble( o.blue * o.alpha); + + if (a>=1.0){ + o.red = RoundFpShortDouble(i.red + o.red - (i.red * o.red) ); + o.green = RoundFpShortDouble(i.green + o.green - (i.green * o.green)); + o.blue = RoundFpShortDouble(i.blue + o.blue - (i.blue * o.blue) ); + o.alpha = a; + }else{ + o.red = RoundFpShortDouble((i.red + o.red - (i.red * o.red) )/a); + o.green = RoundFpShortDouble((i.green + o.green - (i.green * o.green))/a); + o.blue = RoundFpShortDouble((i.blue + o.blue - (i.blue * o.blue) )/a); + o.alpha = a; + } + + } + *outP = o; + + return err; +} +//------------------------------------------------------------------------------------------------- +static PF_Err +multiplyBlend32 ( + 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 i = *inP; + PF_PixelFloat o = *outP; + + if (i.alpha <= 0){ + return err; + }else if(o.alpha <=0){ + *outP = i; + return err; + } + + + PF_FpShort a = RoundFpShortDouble(i.alpha + o.alpha - (i.alpha * o.alpha)); + if (a ==0){ + o.blue = o.green = o.red = 0; + o.alpha = 0; + + }else{ + //白マットへ + i.red = RoundFpShortDouble( (i.red * i.alpha) + 1.0 - i.alpha); + i.green = RoundFpShortDouble( (i.green* i.alpha) + 1.0 - i.alpha); + i.blue = RoundFpShortDouble( (i.blue * i.alpha) + 1.0 - i.alpha); + + o.red = RoundFpShortDouble( (o.red * o.alpha) + 1.0 - o.alpha); + o.green = RoundFpShortDouble( (o.green* o.alpha) + 1.0 - o.alpha); + o.blue = RoundFpShortDouble( (o.blue * o.alpha) + 1.0 - o.alpha); + + if (a >= 1.0){ + o.red = RoundFpShortDouble(i.red * o.red ); + o.green = RoundFpShortDouble(i.green * o.green); + o.blue = RoundFpShortDouble(i.blue * o.blue ); + }else{ + o.red = RoundFpShortDouble(((i.red * o.red ) - 1.0 + a ) /a); + o.green = RoundFpShortDouble(((i.green* o.green) - 1.0 + a ) /a); + o.blue = RoundFpShortDouble(((i.blue * o.blue ) - 1.0 + a ) /a); + } + o.alpha = a; + } + + *outP = o; + + return err; +} +//****************************************************************** +PF_Err DF32(CFsAE *ae , ParamInfo *infoP) +{ + PF_Err err = PF_Err_NONE; + ERR(ae->CopyInToOut()); + + if (infoP->blendOpacity<=0){ + return err; + } + + //画像抽出 + if (infoP->extractEnabled){ + ERR(ae->iterate32((refconType)infoP,extract32)); + } + + //最大・最小 + //最大・最小 + if (infoP->minimax1!=0){ + ae->out->Minimax32(infoP->minimax1); + } + if (infoP->minimax2!=0){ + ae->out->Minimax32(infoP->minimax2); + } + //ぼかし + if (infoP->blur>0){ + ae->out->gblur32(infoP->blur); + } + //ブレンド + if (infoP->blendMode != BLEND_MODE::none){ + blendFunc32 = NULL; + + switch(infoP->blendMode){ + case BLEND_MODE::Normal: + blendFunc32 = normalBlend32; + break; + case BLEND_MODE::Lighten: + blendFunc32 = ligtenBlend32; + break; + case BLEND_MODE::Darken: + blendFunc32 = darkenBlend32; + break; + case BLEND_MODE::Screen: + blendFunc32 = screenBlend32; + break; + case BLEND_MODE::Multiply: + blendFunc32 = multiplyBlend32; + break; + } + if (blendFunc32 != NULL){ + ERR(ae->iterate32((refconType)infoP,blendFunc32)); + } + } + if (infoP->blendOpacity<1){ + ERR(ae->iterate32((refconType)infoP,persentBlend32)); + } + if (infoP->noiseValue>0){ + F_SRAND(ae->frame()); + ERR(ae->iterate32((refconType)infoP,noise32)); + } + + + return err; +} +//****************************************************************** diff --git a/OpticalDiffusion/DF8.cpp b/OpticalDiffusion/DF8.cpp new file mode 100644 index 0000000..526221f --- /dev/null +++ b/OpticalDiffusion/DF8.cpp @@ -0,0 +1,398 @@ +#include "OpticalDiffusion.h" + +//ブレンド入れ替え用 +static PF_Err (*blendFunc8)(refconType refcon, A_long xL, A_long yL,PF_Pixel8 *inP,PF_Pixel8 *outP); + +//------------------------------------------------------------------------------------------------- +//デバンド対策の気休めノイズ +//------------------------------------------------------------------------------------------------- +static PF_Err +noise8 ( + 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_long v = (A_long)(niP->noiseValue * PF_MAX_CHAN8); + A_long rnd = v - (v * 2 * F_RAND() / F_RAND_MAX); + if (rnd!=0){ + if (outP->alpha>0){ + outP->red = RoundByteLong( outP->red + rnd); + outP->green = RoundByteLong( outP->green + rnd); + outP->blue = RoundByteLong( outP->blue + rnd); + } + } + return err; +} + +//------------------------------------------------------------------------------------------------- +//抽出 +//------------------------------------------------------------------------------------------------- +static PF_Err +extract8 ( + 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_long a = outP->alpha; + outP->alpha = 0; + + //アルファーを考慮して輝度を求める + A_long v = (A_long)( (( 0.29891 * (PF_FpLong)outP->red) + ( 0.58661 * (PF_FpLong)outP->green) + ( 0.11448 * (PF_FpLong)outP->blue)) * ((PF_FpLong)a / PF_MAX_CHAN8) +0.5); + A_long v2 = v; + + A_long b0 = niP->blackPoint - niP->blackSoftness; + A_long b1 = niP->blackPoint; + A_long w0 = niP->whitePoint; + A_long w1 = niP->whitePoint + niP->whiteSoftness; + if ( vinvert){ + v2 = PF_MAX_CHAN8 - v2; + } + outP->alpha = RoundByteLong(a * v2 / PF_MAX_CHAN8); + + //指定した色を残す + if((niP->extract_color_Count>0)&&(outP->alphaextract_color_Count; i++){ + PF_Fixed ah = (PF_Fixed)(F_ABS(hlsa.H - niP->extract_colors[i].H) * 65536); + PF_Fixed as = (PF_Fixed)(F_ABS(hlsa.S - niP->extract_colors[i].S) * 65536); + if ( (ah<=niP->extract_color_Range)&&(as<=niP->extract_color_Range)){ + PF_Fixed al = (PF_Fixed)(F_ABS(hlsa.L - niP->extract_colors[i].L) * 65536); + if (al<0x4000) { + A_u_char a2 = RoundByteLong( PF_MAX_CHAN8 *(0x4000 - al) /0x4000); + if ( outP->alpha < a2) outP->alpha = a2; + break; + } + } + } + } + + return err; +} +//------------------------------------------------------------------------------------------------- +static PF_Err +persentBlend8 ( + 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 i = *inP; + PF_Pixel o = *outP; + + if(niP->blendOpacity >= 1){ + // + }else if (niP->blendOpacity <= 0){ + *outP = i; + }else{ + + PF_FpLong r1 = niP->blendOpacity; + PF_FpLong r2 = 1 -r1; + + o.alpha = RoundByteFpLong( (PF_FpLong)o.alpha * r1 + (PF_FpLong)i.alpha * r2); + if (o.alpha ==0){ + o.blue = o.green = o.red = 0; + }else{ + //マット合成に直す + i.red = RoundByteLong( (A_long)i.red * (A_long)i.alpha / PF_MAX_CHAN8); + i.green = RoundByteLong( (A_long)i.green * (A_long)i.alpha / PF_MAX_CHAN8); + i.blue = RoundByteLong( (A_long)i.blue * (A_long)i.alpha / PF_MAX_CHAN8); + + //マット合成に直す + o.red = RoundByteLong( (A_long)o.red * (A_long)o.alpha / PF_MAX_CHAN8); + o.green = RoundByteLong( (A_long)o.green * (A_long)o.alpha / PF_MAX_CHAN8); + o.blue = RoundByteLong( (A_long)o.blue * (A_long)o.alpha / PF_MAX_CHAN8); + + o.red = RoundByteFpLong( ((PF_FpLong)o.red * r1 + (PF_FpLong)i.red * r2 )*PF_MAX_CHAN8 / (PF_FpLong)o.alpha); + o.green = RoundByteFpLong( ((PF_FpLong)o.green * r1 + (PF_FpLong)i.green * r2 )*PF_MAX_CHAN8 / (PF_FpLong)o.alpha); + o.blue = RoundByteFpLong( ((PF_FpLong)o.blue * r1 + (PF_FpLong)i.blue * r2 )*PF_MAX_CHAN8 / (PF_FpLong)o.alpha); + } + + *outP = o; + } + return err; +} +//------------------------------------------------------------------------------------------------- +static PF_Err +normalBlend8 ( + 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 i = *inP; + PF_Pixel o = *outP; + + *outP = PixelBlend8(i,o); + return err; +} +//------------------------------------------------------------------------------------------------- +static PF_Err +ligtenBlend8 ( + 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 i = *inP; + PF_Pixel o = *outP; + + + if (i.alpha <= 0){ + return err; + } + + o = PixelBlend8(i,o); + + if (o.red(refcon); + + PF_Pixel i = *inP; + PF_Pixel o = *outP; + + if (i.alpha <= 0){ + return err; + } + + o = PixelBlend8(i,o); + + if (o.red>i.red) + o.red = i.red; + if (o.green>i.green) + o.green = i.green; + if (o.blue>i.blue) + o.blue = i.blue; + + *outP = o; + + + return err; +} +//------------------------------------------------------------------------------------------------- +static PF_Err +screenBlend8 ( + 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 i = *inP; + PF_Pixel o = *outP; + + if (i.alpha <= 0){ + return err; + }else if(o.alpha <=0){ + *outP = i; + return err; + } + A_u_char a = RoundByteLong(i.alpha + o.alpha - (i.alpha * o.alpha)/PF_MAX_CHAN8); + + if (a == 0){ + o.blue = o.green = o.red = 0; + o.alpha = 0; + + }else{ + + //マット合成に直す + i.red = RoundByteLong( (A_long)i.red * (A_long)i.alpha / PF_MAX_CHAN8); + i.green = RoundByteLong( (A_long)i.green * (A_long)i.alpha / PF_MAX_CHAN8); + i.blue = RoundByteLong( (A_long)i.blue * (A_long)i.alpha / PF_MAX_CHAN8); + + o.red = RoundByteLong( (A_long)o.red * (A_long)o.alpha / PF_MAX_CHAN8); + o.green = RoundByteLong( (A_long)o.green * (A_long)o.alpha / PF_MAX_CHAN8); + o.blue = RoundByteLong( (A_long)o.blue * (A_long)o.alpha / PF_MAX_CHAN8); + + if (a==PF_MAX_CHAN8){ + o.red = RoundByteLong((i.red + o.red - (i.red * o.red) /PF_MAX_CHAN8)); + o.green = RoundByteLong((i.green + o.green - (i.green * o.green)/PF_MAX_CHAN8)); + o.blue = RoundByteLong((i.blue + o.blue - (i.blue * o.blue) /PF_MAX_CHAN8)); + o.alpha = PF_MAX_CHAN8; + }else{ + o.red = RoundByteLong((i.red + o.red - (i.red * o.red) /PF_MAX_CHAN8)*PF_MAX_CHAN8/a); + o.green = RoundByteLong((i.green + o.green - (i.green * o.green)/PF_MAX_CHAN8)*PF_MAX_CHAN8/a); + o.blue = RoundByteLong((i.blue + o.blue - (i.blue * o.blue) /PF_MAX_CHAN8)*PF_MAX_CHAN8/a); + o.alpha = a; + } + + } + *outP = o; + + return err; +} +//------------------------------------------------------------------------------------------------- +static PF_Err +multiplyBlend8 ( + 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 i = *inP; + PF_Pixel o = *outP; + + if (i.alpha <= 0){ + return err; + }else if(o.alpha <=0){ + *outP = i; + return err; + } + + + A_u_char a = RoundByteLong(i.alpha + o.alpha - (i.alpha * o.alpha)/PF_MAX_CHAN8); + if (a ==0){ + o.blue = o.green = o.red = 0; + o.alpha = 0; + + }else{ + //白マットへ + i.red = RoundByteLong( ((A_long)i.red * (A_long)i.alpha)/PF_MAX_CHAN8 + PF_MAX_CHAN8-(A_long)i.alpha); + i.green = RoundByteLong( ((A_long)i.green* (A_long)i.alpha)/PF_MAX_CHAN8 + PF_MAX_CHAN8-(A_long)i.alpha); + i.blue = RoundByteLong( ((A_long)i.blue * (A_long)i.alpha)/PF_MAX_CHAN8 + PF_MAX_CHAN8-(A_long)i.alpha); + + o.red = RoundByteLong( ((A_long)o.red * (A_long)o.alpha)/PF_MAX_CHAN8 + PF_MAX_CHAN8-(A_long)o.alpha); + o.green = RoundByteLong( ((A_long)o.green* (A_long)o.alpha)/PF_MAX_CHAN8 + PF_MAX_CHAN8-(A_long)o.alpha); + o.blue = RoundByteLong( ((A_long)o.blue * (A_long)o.alpha)/PF_MAX_CHAN8 + PF_MAX_CHAN8-(A_long)o.alpha); + + if (a == PF_MAX_CHAN8){ + o.red = RoundByteLong(i.red * o.red /PF_MAX_CHAN8); + o.green = RoundByteLong(i.green * o.green/PF_MAX_CHAN8); + o.blue = RoundByteLong(i.blue * o.blue /PF_MAX_CHAN8); + }else{ + o.red = RoundByteLong(((i.red * o.red /PF_MAX_CHAN8) - PF_MAX_CHAN8 + a ) * PF_MAX_CHAN8/a); + o.green = RoundByteLong(((i.green* o.green/PF_MAX_CHAN8) - PF_MAX_CHAN8 + a ) * PF_MAX_CHAN8/a); + o.blue = RoundByteLong(((i.blue * o.blue /PF_MAX_CHAN8) - PF_MAX_CHAN8 + a ) * PF_MAX_CHAN8/a); + } + o.alpha = a; + } + + *outP = o; + + return err; +} +//****************************************************************** +PF_Err DF8(CFsAE *ae , ParamInfo *infoP) +{ + PF_Err err = PF_Err_NONE; + ERR(ae->CopyInToOut()); + + if (infoP->blendOpacity<=0){ + return err; + } + + //画像抽出 + if (infoP->extractEnabled){ + ERR(ae->iterate8((refconType)infoP,extract8)); + } + + //最大・最小 + if (infoP->minimax1!=0){ + ae->out->Minimax8(infoP->minimax1); + } + if (infoP->minimax2!=0){ + ae->out->Minimax8(infoP->minimax2); + } + //ぼかし + if (infoP->blur>0){ + ae->out->gblur8(infoP->blur); + } + //ブレンド + if (infoP->blendMode != BLEND_MODE::none){ + blendFunc8 = NULL; + + switch(infoP->blendMode){ + case BLEND_MODE::Normal: + blendFunc8 = normalBlend8; + break; + case BLEND_MODE::Lighten: + blendFunc8 = ligtenBlend8; + break; + case BLEND_MODE::Darken: + blendFunc8 = darkenBlend8; + break; + case BLEND_MODE::Screen: + blendFunc8 = screenBlend8; + break; + case BLEND_MODE::Multiply: + blendFunc8 = multiplyBlend8; + break; + } + if (blendFunc8 != NULL){ + ERR(ae->iterate8((refconType)infoP,blendFunc8)); + } + } + if (infoP->blendOpacity<1){ + ERR(ae->iterate8((refconType)infoP,persentBlend8)); + } + if (infoP->noiseValue>0){ + F_SRAND(ae->frame()); + ERR(ae->iterate8((refconType)infoP,noise8)); + } + + return err; +} +//****************************************************************** diff --git a/OpticalDiffusion/Fs_Entry.h b/OpticalDiffusion/Fs_Entry.h new file mode 100644 index 0000000..399e688 --- /dev/null +++ b/OpticalDiffusion/Fs_Entry.h @@ -0,0 +1,227 @@ +//----------------------------------------------------------------------------------- +/* + OpticalDiffusion 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/OpticalDiffusion/Fs_Target.h b/OpticalDiffusion/Fs_Target.h new file mode 100644 index 0000000..64e737d --- /dev/null +++ b/OpticalDiffusion/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 OpticalDiffusion" + +//----------------------------------------------------------------------------------- +//プラグインの説明に使われる文字 +#define FS_DESCRIPTION "DF/Fogフィルタ" + +//----------------------------------------------------------------------------------- +//プラグインが表示されるメニュー名 +#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/OpticalDiffusion/OpticalDiffusion.cpp b/OpticalDiffusion/OpticalDiffusion.cpp new file mode 100644 index 0000000..d22b6e2 --- /dev/null +++ b/OpticalDiffusion/OpticalDiffusion.cpp @@ -0,0 +1,458 @@ +//----------------------------------------------------------------------------------- +/* + F's Plugins for VS2010/VS2012 +*/ +//----------------------------------------------------------------------------------- + + +#include "OpticalDiffusion.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_EXTRACT_ENABLED, + "", + TRUE, + 0, + ID_EXTRACT_ENABLED + ); + //---------------------------------------------------------------- + AEFX_CLR_STRUCT(def); + def.flags = PF_ParamFlag_START_COLLAPSED; //これをつけると表示時に開いた状態になる + PF_ADD_TOPIC(STR_EXTRACT_TOPIC, ID_EXTRACT_TOPIC); + + //---------------------------------------------------------------- + AEFX_CLR_STRUCT(def); + PF_ADD_SLIDER( STR_EXTRACT_BLACK_POINT, //パラメータの名前 + 0, //数値入力する場合の最小値 + 128, //数値入力する場合の最大値 + 0, //スライダーの最小値 + 128, //スライダーの最大値 + 64, //デフォルトの値 + ID_EXTRACT_BLACK_POINT + ); + //---------------------------------------------------------------- + AEFX_CLR_STRUCT(def); + PF_ADD_SLIDER( STR_EXTRACT_WHITE_POINT, //パラメータの名前 + 100, //数値入力する場合の最小値 + 255, //数値入力する場合の最大値 + 128, //スライダーの最小値 + 255, //スライダーの最大値 + 128, //デフォルトの値 + ID_EXTRACT_WHITE_POINT + ); + //---------------------------------------------------------------- + AEFX_CLR_STRUCT(def); + PF_ADD_SLIDER( STR_EXTRACT_BLACK_SOFTNESS, //パラメータの名前 + 0, //数値入力する場合の最小値 + 255, //数値入力する場合の最大値 + 0, //スライダーの最小値 + 128, //スライダーの最大値 + 128, //デフォルトの値 + ID_EXTRACT_BLACK_SOFTNESS + ); + //---------------------------------------------------------------- + AEFX_CLR_STRUCT(def); + PF_ADD_SLIDER( STR_EXTRACT_WHITE_SOFTNESS, //パラメータの名前 + 0, //数値入力する場合の最小値 + 255, //数値入力する場合の最大値 + 0, //スライダーの最小値 + 64, //スライダーの最大値 + 64, //デフォルトの値 + ID_EXTRACT_WHITE_SOFTNESS + ); + //---------------------------------------------------------------- + AEFX_CLR_STRUCT(def); + PF_ADD_CHECKBOX(STR_EXTRACT_INVERT, + "", + TRUE, + 0, + ID_EXTRACT_INVERT + ); + + //---------------------------------------------------------------- + AEFX_CLR_STRUCT(def); + PF_END_TOPIC(ID_EXTRACT_TOPIC_END); + //********************************** + //---------------------------------------------------------------- + AEFX_CLR_STRUCT(def); + def.flags = PF_ParamFlag_START_COLLAPSED; //これをつけると表示時に開いた状態になる + PF_ADD_TOPIC(STR_EXTRACT_COLOR_TOPIC, ID_EXTRACT_COLOR_TOPIC); + //---------------------------------------------------------------- + //---------------------------------------------------------------- + AEFX_CLR_STRUCT(def); + PF_ADD_SLIDER( STR_EXTRACT_COLOR_COUNT, //パラメータの名前 + 0, //数値入力する場合の最小値 + 8, //数値入力する場合の最大値 + 0, //スライダーの最小値 + 8, //スライダーの最大値 + 0, //デフォルトの値 + ID_EXTRACT_COL_COUNT + ); + //---------------------------------------------------------------- + AEFX_CLR_STRUCT(def); + PF_ADD_FIXED( STR_EXTRACT_COLOR_RANGE, //パラメータの名前 + 0, //数値入力する場合の最小値 + 100, //数値入力する場合の最大値 + 0, //スライダーの最小値 + 10, //スライダーの最大値 + 0.5, //デフォルトの値 + 1, //数値表示に関するフラグ + 0, + 0, + ID_EXTRACT_COLOR_RANGE + ); + //---------------------------------------------------------------- + AEFX_CLR_STRUCT(def); + def.flags = PF_ParamFlag_CANNOT_TIME_VARY;//これをつけるとキーフレームが撃てなくなる + PF_ADD_COLOR( STR_EXTRACT_COL1, + 0xFF, + 0x00, + 0x00, + ID_EXTRACT_COL1 + ); + //---------------------------------------------------------------- + AEFX_CLR_STRUCT(def); + def.flags = PF_ParamFlag_CANNOT_TIME_VARY;//これをつけるとキーフレームが撃てなくなる + PF_ADD_COLOR( STR_EXTRACT_COL2, + 0x00, + 0xFF, + 0x00, + ID_EXTRACT_COL2 + ); + //---------------------------------------------------------------- + AEFX_CLR_STRUCT(def); + def.flags = PF_ParamFlag_CANNOT_TIME_VARY;//これをつけるとキーフレームが撃てなくなる + PF_ADD_COLOR( STR_EXTRACT_COL3, + 0x00, + 0x00, + 0xFF, + ID_EXTRACT_COL3 + ); + + //---------------------------------------------------------------- + AEFX_CLR_STRUCT(def); + def.flags = PF_ParamFlag_CANNOT_TIME_VARY;//これをつけるとキーフレームが撃てなくなる + PF_ADD_COLOR( STR_EXTRACT_COL4, + 0xFF, + 0xFF, + 0x00, + ID_EXTRACT_COL4 + ); + //---------------------------------------------------------------- + AEFX_CLR_STRUCT(def); + def.flags = PF_ParamFlag_CANNOT_TIME_VARY;//これをつけるとキーフレームが撃てなくなる + PF_ADD_COLOR( STR_EXTRACT_COL5, + 0xFF, + 0x00, + 0xFF, + ID_EXTRACT_COL5 + ); + //---------------------------------------------------------------- + AEFX_CLR_STRUCT(def); + def.flags = PF_ParamFlag_CANNOT_TIME_VARY;//これをつけるとキーフレームが撃てなくなる + PF_ADD_COLOR( STR_EXTRACT_COL6, + 0x00, + 0xFF, + 0xFF, + ID_EXTRACT_COL6 + ); + + //---------------------------------------------------------------- + AEFX_CLR_STRUCT(def); + def.flags = PF_ParamFlag_CANNOT_TIME_VARY;//これをつけるとキーフレームが撃てなくなる + PF_ADD_COLOR( STR_EXTRACT_COL7, + 0xFF, + 0x80, + 0x00, + ID_EXTRACT_COL7 + ); + //---------------------------------------------------------------- + AEFX_CLR_STRUCT(def); + def.flags = PF_ParamFlag_CANNOT_TIME_VARY;//これをつけるとキーフレームが撃てなくなる + PF_ADD_COLOR( STR_EXTRACT_COL8, + 0x00, + 0x80, + 0xFF, + ID_EXTRACT_COL8 + ); + + //---------------------------------------------------------------- + AEFX_CLR_STRUCT(def); + PF_END_TOPIC(ID_EXTRACT_COLOR_TOPIC_END); + //********************************** + //---------------------------------------------------------------- + AEFX_CLR_STRUCT(def); + PF_ADD_SLIDER( STR_MINIMAX_1ST, //パラメータの名前 + -100, //数値入力する場合の最小値 + 100, //数値入力する場合の最大値 + -25, //スライダーの最小値 + 25, //スライダーの最大値 + -3, //デフォルトの値 + ID_MINIMAX_1ST + ); + //---------------------------------------------------------------- + AEFX_CLR_STRUCT(def); + PF_ADD_SLIDER( STR_MINIMAX_2ND, //パラメータの名前 + -100, //数値入力する場合の最小値 + 100, //数値入力する場合の最大値 + -25, //スライダーの最小値 + 25, //スライダーの最大値 + 3, //デフォルトの値 + ID_MINIMAX_2ND + ); + //---------------------------------------------------------------- + PF_ADD_FLOAT_SLIDER(STR_BLUR, //Name + 0, //VALID_MIN + 255, //VALID_MAX + 0, //SLIDER_MIN + 50, //SLIDER_MAX + 0, //CURVE_TOLERANCE + 30, //DFLT + 1, //PREC + 0, //DISP + 0, //WANT_PHASE + ID_BLUR + ); + //---------------------------------------------------------------- + //---------------------------------------------------------------- + //ポップアップメニュー + AEFX_CLR_STRUCT(def); + PF_ADD_POPUP( STR_BLEND_MODE, + STR_BLEND_COUNT, //メニューの数 + STR_BLEND_DFLT, //デフォルト + STR_BLEND_ITEMS, + ID_BLEND_MODE + ); + //---------------------------------------------------------------- + AEFX_CLR_STRUCT(def); + PF_ADD_FIXED( STR_BLEND_OPACITY, //パラメータの名前 + 0, //数値入力する場合の最小値 + 100, //数値入力する場合の最大値 + 0, //スライダーの最小値 + 100, //スライダーの最大値 + 70, //デフォルトの値 + 1, //数値表示に関するフラグ + 0, + 0, + ID_BLEND_OPACITY + ); + //---------------------------------------------------------------- + AEFX_CLR_STRUCT(def); + PF_ADD_FIXED( STR_NOISE_VALUE, //パラメータの名前 + 0, //数値入力する場合の最小値 + 300, //数値入力する場合の最大値 + 0, //スライダーの最小値 + 10, //スライダーの最大値 + 1, //デフォルトの値 + 1, //数値表示に関するフラグ + 0, + 0, + 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; + + 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; + PF_InData *in_data; + in_data= ae->in_data; + + ERR(ae->GetCHECKBOX(ID_EXTRACT_ENABLED,&infoP->extractEnabled)); + ERR(ae->GetADD(ID_EXTRACT_BLACK_POINT,&infoP->blackPoint)); + ERR(ae->GetADD(ID_EXTRACT_WHITE_POINT,&infoP->whitePoint)); + ERR(ae->GetADD(ID_EXTRACT_BLACK_SOFTNESS,&infoP->blackSoftness)); + ERR(ae->GetADD(ID_EXTRACT_WHITE_SOFTNESS,&infoP->whiteSoftness)); + ERR(ae->GetCHECKBOX(ID_EXTRACT_INVERT,&infoP->invert)); + + if (infoP->blackPoint>infoP->whitePoint){ + A_long tmp = infoP->blackPoint - infoP->whitePoint; + infoP->blackPoint -= tmp; + if (infoP->blackPoint<0) infoP->blackPoint = 0; + infoP->blackSoftness -= tmp; + if (infoP->blackSoftness<0) infoP->blackSoftness = 0; + } + + ERR(ae->GetFIXED(ID_EXTRACT_COLOR_RANGE,&infoP->extract_color_Range)); + ERR(ae->GetADD(ID_EXTRACT_COL_COUNT,&infoP->extract_color_Count)); + PF_Pixel p; + PF_PixelFloat p32; + A_long cnt = infoP->extract_color_Count; + for (int i=0; iGetCOLOR(ID_EXTRACT_COL1+i,&p)); + p32 = CONV8TO32(p); + infoP->extract_colors[i] = RGBtoHLS(p32); + } + + ERR(ae->GetADD(ID_MINIMAX_1ST,&infoP->minimax1)); + ERR(ae->GetADD(ID_MINIMAX_2ND,&infoP->minimax2)); + ERR(ae->GetFLOAT(ID_BLUR,&infoP->blur)); + + ERR(ae->GetPOPUP(ID_BLEND_MODE,&infoP->blendMode)); + ERR(ae->GetFIXED2FpShort(ID_BLEND_OPACITY,&infoP->blendOpacity)); + infoP->blendOpacity /= 100; + if (infoP->blendOpacity<0) infoP->blendOpacity = 0; + else if (infoP->blendOpacity>1) infoP->blendOpacity = 1; + + ERR(ae->GetFIXED2FpShort(ID_NOISE_VALUE,&infoP->noiseValue)); + infoP->noiseValue /= 100; + if (infoP->noiseValue<0) infoP->noiseValue = 0; + + if (infoP->blendOpacity<=0){ + infoP->noiseValue = 0; + }else if (infoP->blendOpacity<0.25){ + infoP->noiseValue = (PF_FpShort)(infoP->noiseValue * infoP->blendOpacity /0.25); + } + + return err; + +} +//------------------------------------------------------------------------------------------------- +static PF_Err + Exec (CFsAE *ae , ParamInfo *infoP) +{ + PF_Err err = PF_Err_NONE; + + if (infoP->blendOpacity <=0){ + ERR(ae->CopyInToOut()); + return err; + } + bool b = false; + switch(ae->pixelFormat()) + { + case PF_PixelFormat_ARGB128: + ERR(DF32(ae,infoP)); + break; + case PF_PixelFormat_ARGB64: + ERR(DF16(ae,infoP)); + break; + case PF_PixelFormat_ARGB32: + ERR(DF8(ae,infoP)); + } + + 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/OpticalDiffusion/OpticalDiffusion.h b/OpticalDiffusion/OpticalDiffusion.h new file mode 100644 index 0000000..8094a5b --- /dev/null +++ b/OpticalDiffusion/OpticalDiffusion.h @@ -0,0 +1,172 @@ +//----------------------------------------------------------------------------------- +/* + OpticalDiffusion for VS2010 +*/ +//----------------------------------------------------------------------------------- + +#pragma once +#ifndef OpticalDiffusion_H +#define OpticalDiffusion_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" + #ifndef refconType + #define refconType void* + #endif +#else + #include "PF_Suite_Helper.h" + #ifndef refconType + #define refconType A_long + #endif +#endif + +#ifdef AE_OS_WIN + #include +#endif + +#include "../FsLibrary/FsAE.h" +#include "../FsLibrary/FsHLS.h" +//#include "FsAE.h" + +//ユーザーインターフェースのID +//ParamsSetup関数とRender関数のparamsパラメータのIDになる +enum { + ID_INPUT = 0, // default input layer + + ID_EXTRACT_ENABLED, + + ID_EXTRACT_TOPIC, + ID_EXTRACT_BLACK_POINT, + ID_EXTRACT_WHITE_POINT, + ID_EXTRACT_BLACK_SOFTNESS, + ID_EXTRACT_WHITE_SOFTNESS, + ID_EXTRACT_INVERT, + ID_EXTRACT_TOPIC_END, + + ID_EXTRACT_COLOR_TOPIC, + ID_EXTRACT_COL_COUNT, + ID_EXTRACT_COLOR_RANGE, + ID_EXTRACT_COL1, + ID_EXTRACT_COL2, + ID_EXTRACT_COL3, + ID_EXTRACT_COL4, + ID_EXTRACT_COL5, + ID_EXTRACT_COL6, + ID_EXTRACT_COL7, + ID_EXTRACT_COL8, + ID_EXTRACT_COLOR_TOPIC_END, + + ID_MINIMAX_1ST, + ID_MINIMAX_2ND, + ID_BLUR, + ID_BLEND_MODE, + ID_BLEND_OPACITY, + ID_NOISE_VALUE, + + ID_NUM_PARAMS +}; + +//UIの表示文字列 +#define STR_EXTRACT_ENABLED "Extract Enabled" +#define STR_EXTRACT_TOPIC "Extract lightness" +#define STR_EXTRACT_BLACK_POINT "Black Point" +#define STR_EXTRACT_WHITE_POINT "White Point" +#define STR_EXTRACT_BLACK_SOFTNESS "Black Softness" +#define STR_EXTRACT_WHITE_SOFTNESS "White Softness" +#define STR_EXTRACT_INVERT "Invert" + +#define STR_EXTRACT_COLOR_TOPIC "Extract TargetColor" +#define STR_EXTRACT_COLOR_COUNT "Use Count" +#define STR_EXTRACT_COLOR_RANGE "Range" +#define STR_EXTRACT_COL1 "Color1" +#define STR_EXTRACT_COL2 "Color2" +#define STR_EXTRACT_COL3 "Color3" +#define STR_EXTRACT_COL4 "Color4" +#define STR_EXTRACT_COL5 "Color5" +#define STR_EXTRACT_COL6 "Color6" +#define STR_EXTRACT_COL7 "Color7" +#define STR_EXTRACT_COL8 "Color8" + +#define STR_MINIMAX_1ST "Minimax 1st" +#define STR_MINIMAX_2ND "Minimax 2nd" +#define STR_BLUR "Blur" + +#define STR_BLEND_MODE "Blend mode" +#define STR_BLEND_ITEMS "None|Normal|Lighten|Darkne|Screen|Multiply" +#define STR_BLEND_COUNT 6 +#define STR_BLEND_DFLT 2 +#define STR_BLEND_OPACITY "Blend Opacity" + +#define STR_NOISE_VALUE "Noise" + +namespace BLEND_MODE +{ + enum + { + none = 1, + Normal, + Lighten, + Darken, + Screen, + Multiply + }; +} + +//UIのパラメータ +typedef struct ParamInfo { + PF_Boolean extractEnabled; + A_long blackPoint; + A_long whitePoint; + A_long blackSoftness; + A_long whiteSoftness; + + PF_Boolean invert; + + PF_Fixed extract_color_Range; + A_long extract_color_Count; + HLSA extract_colors[8]; + + A_long minimax1; + A_long minimax2; + PF_FpLong blur; + A_long blendMode; + PF_FpShort blendOpacity; + + PF_FpShort noiseValue; + +} ParamInfo, *ParamInfoP, **ParamInfoH; + +//------------------------------------------------------- + +PF_Err DF8(CFsAE *ae , ParamInfo *infoP); +PF_Err DF16(CFsAE *ae , ParamInfo *infoP); +PF_Err DF32(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 // OpticalDiffusion_H diff --git a/OpticalDiffusion/OpticalDiffusionPiPL.r b/OpticalDiffusion/OpticalDiffusionPiPL.r new file mode 100644 index 0000000..33eadc0 --- /dev/null +++ b/OpticalDiffusion/OpticalDiffusionPiPL.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/OpticalDiffusion/Win/OpticalDiffusion.vcxproj b/OpticalDiffusion/Win/OpticalDiffusion.vcxproj new file mode 100644 index 0000000..768c73b --- /dev/null +++ b/OpticalDiffusion/Win/OpticalDiffusion.vcxproj @@ -0,0 +1,599 @@ +サソ + + + + Debug + Win32 + + + Debug + x64 + + + Release-MD + Win32 + + + Release-MD + x64 + + + Release + Win32 + + + Release + x64 + + + + {EEAFB167-BD4D-4CD8-BB63-083C667979D4} + OpticalDiffusion + OpticalDiffusion + 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/OpticalDiffusion.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/OpticalDiffusion.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/OpticalDiffusion.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/OpticalDiffusion.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/OpticalDiffusion.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/OpticalDiffusion.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/OpticalDiffusion/Win/OpticalDiffusion.vcxproj.filters b/OpticalDiffusion/Win/OpticalDiffusion.vcxproj.filters new file mode 100644 index 0000000..a67d1bb --- /dev/null +++ b/OpticalDiffusion/Win/OpticalDiffusion.vcxproj.filters @@ -0,0 +1,202 @@ +サソ + + + + {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 + + + Supporting code\Fs + + + Supporting code\Fs + + + Supporting code\Fs + + + Supporting code\Fs + + + + + + + + Resource Files + + + \ No newline at end of file diff --git a/OpticalDiffusion/Win/OpticalDiffusionPiPL.rc b/OpticalDiffusion/Win/OpticalDiffusionPiPL.rc new file mode 100644 index 0000000..200cfad --- /dev/null +++ b/OpticalDiffusion/Win/OpticalDiffusionPiPL.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, + "\x14F's OpticalDiffusion\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, + 24, 0x0, + "\x14F's OpticalDiffusion\0\0\0", + + "MIB8", + 0x6165464CL, + 0L, + 4L + 0L, + + +END + diff --git a/OpticalDiffusion/Win/PluginSkeletonPiPL.rc b/OpticalDiffusion/Win/PluginSkeletonPiPL.rc new file mode 100644 index 0000000..96a4b1d --- /dev/null +++ b/OpticalDiffusion/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/OpticalDiffusion/odf_noise.cpp b/OpticalDiffusion/odf_noise.cpp new file mode 100644 index 0000000..48b085c --- /dev/null +++ b/OpticalDiffusion/odf_noise.cpp @@ -0,0 +1,25 @@ +#include "OpticalDiffusion.h" + +//------------------------------------------------------------------------------------------------- +static PF_Err +noise8 ( + 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_long v = (A_long)(niP->noiseValue * PF_MAX_CHAN8); + A_long rnd = v - (v * 2 * F_RAND() / F_RAND_MAX); + if (rnd!=0){ + if (outP->alpha>0){ + outP->red = RoundByteLong( outP->red + rnd); + outP->green = RoundByteLong( outP->green + rnd); + outP->blue = RoundByteLong( outP->blue + rnd); + } + } + return err; +} diff --git a/OutLine/Fs_Entry.h b/OutLine/Fs_Entry.h new file mode 100644 index 0000000..639be9e --- /dev/null +++ b/OutLine/Fs_Entry.h @@ -0,0 +1,227 @@ +//----------------------------------------------------------------------------------- +/* + OutLine 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/OutLine/Fs_Target.h b/OutLine/Fs_Target.h new file mode 100644 index 0000000..914f4c5 --- /dev/null +++ b/OutLine/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 OutLine" + +//----------------------------------------------------------------------------------- +//プラグインの説明に使われる文字 +#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/OutLine/OutLine.cpp b/OutLine/OutLine.cpp new file mode 100644 index 0000000..b450540 --- /dev/null +++ b/OutLine/OutLine.cpp @@ -0,0 +1,631 @@ +//----------------------------------------------------------------------------------- +/* + F's Plugins for VS2010/VS2012 +*/ +//----------------------------------------------------------------------------------- + + +#include "OutLine.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_VALUE, //パラメータの名前 + 1, //数値入力する場合の最小値 + 100, //数値入力する場合の最大値 + 1, //スライダーの最小値 + 10, //スライダーの最大値 + 1, //デフォルトの値 + ID_VALUE + ); + + //---------------------------------------------------------------- + //色の指定 + AEFX_CLR_STRUCT(def); + def.flags = PF_ParamFlag_CANNOT_TIME_VARY;//これをつけるとキーフレームが撃てなくなる + PF_ADD_COLOR( STR_COLOR, + 0xFF, + 0xFF, + 0xFF, + ID_COLOR + ); + //---------------------------------------------------------------- + AEFX_CLR_STRUCT(def); + PF_ADD_FLOAT_SLIDER(STR_LEVEL, //Name + 0, //VALID_MIN + 400, //VALID_MAX + 100, //SLIDER_MIN + 200, //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 +CopyAlphaToRed8 ( + refconType refcon, + A_long xL, + A_long yL, + PF_Pixel8 *inP, + PF_Pixel8 *outP) +{ + PF_Err err = PF_Err_NONE; + + outP->red = inP->alpha; + outP->green = 0; + outP->blue = 0; + outP->alpha = PF_MAX_CHAN8; + + return err; +} +//------------------------------------------------------------------------------------------------- +static PF_Err +CopyAlphaToRed16 ( + refconType refcon, + A_long xL, + A_long yL, + PF_Pixel16 *inP, + PF_Pixel16 *outP) +{ + PF_Err err = PF_Err_NONE; + + outP->red = inP->alpha; + outP->green = 0; + outP->blue = 0; + outP->alpha = PF_MAX_CHAN16; + + return err; +} +//------------------------------------------------------------------------------------------------- +static PF_Err +CopyAlphaToRed32 ( + refconType refcon, + A_long xL, + A_long yL, + PF_PixelFloat *inP, + PF_PixelFloat *outP) +{ + PF_Err err = PF_Err_NONE; + + outP->red = inP->alpha; + outP->green = 0; + outP->blue = 0; + outP->alpha = 1.0; + + return err; +} +//------------------------------------------------------------------------------------------------- +static PF_Err +MinHor8 (MinInfo *infoP) +{ + PF_Err err = PF_Err_NONE; + PF_Pixel *data; + data = (PF_Pixel *)infoP->data; + + int xmax = infoP->width -1 - infoP->value; + + for (int y=0; yheight; y++){ + int posY = y * infoP->widthTrue; + int minIndex = -1000; + A_u_char minValue = 0; + for (int x=0; xwidth; x++){ + if ( (xvalue)||(x>= xmax)){ + data[x + posY].green = 0; + }else{ + int k0 = x - infoP->value; + int k1 = x + infoP->value; + + if ( k0=k1p){ + minIndex = k1; + minValue = k1p; + } + }else{ + minIndex = k0; + minValue = data[k0 + posY].red; + for (int k=k0+1; k<=k1;k++) + { + A_u_char kp = data[k + posY].red; + if (minValue>=kp){ + minIndex = k; + minValue = kp; + } + } + } + data[x + posY].green = minValue; + } + + } + } + + return err; +} +//------------------------------------------------------------------------------------------------- +static PF_Err +MinHor16 (MinInfo *infoP) +{ + PF_Err err = PF_Err_NONE; + PF_Pixel16 *data; + data = (PF_Pixel16 *)infoP->data; + + int xmax = infoP->width -1 - infoP->value; + + for (int y=0; yheight; y++){ + int posY = y * infoP->widthTrue; + int minIndex = -1000; + A_u_short minValue = 0; + for (int x=0; xwidth; x++){ + if ( (xvalue)||(x> xmax)){ + data[x + posY].green = 0; + }else{ + int k0 = x - infoP->value; + int k1 = x + infoP->value; + + if ( k0=k1p){ + minIndex = k1; + minValue = k1p; + } + }else{ + minIndex = k0; + minValue = data[k0 + posY].red; + for (int k=k0+1; k<=k1;k++) + { + A_u_short kp = data[k + posY].red; + if (minValue>=kp){ + minIndex = k; + minValue = kp; + } + } + } + data[x + posY].green = minValue; + } + + } + } + + return err; +} +//------------------------------------------------------------------------------------------------- +static PF_Err +MinHor32 (MinInfo *infoP) +{ + PF_Err err = PF_Err_NONE; + PF_PixelFloat *data; + data = (PF_PixelFloat *)infoP->data; + + int xmax = infoP->width -1 - infoP->value; + + for (int y=0; yheight; y++){ + int posY = y * infoP->widthTrue; + int minIndex = -1000; + PF_FpShort minValue = 0; + for (int x=0; xheight; x++){ + if ( (xvalue)||(x> xmax)){ + data[x + posY].green = 0; + }else{ + int k0 = x - infoP->value; + int k1 = x + infoP->value; + + if ( k0=k1p){ + minIndex = k1; + minValue = k1p; + } + }else{ + minIndex = k0; + minValue = data[k0 + posY].red; + for (int k=k0+1; k<=k1;k++) + { + PF_FpShort kp = data[k + posY].red; + if (minValue>=kp){ + minIndex = k; + minValue = kp; + } + } + } + data[x + posY].green = minValue; + } + + } + } + + return err; +} +//------------------------------------------------------------------------------------------------- +static PF_Err +MinVur8 (MinInfo *infoP) +{ + PF_Err err = PF_Err_NONE; + PF_Pixel *data; + data = (PF_Pixel *)infoP->data; + + int ymax = infoP->height -1 - infoP->value; + + for (int x=0; xwidth; x++){ + int minIndex = -1000; + A_u_char minValue = 0; + for (int y=0; yheight; y++){ + if ( (yvalue)||(y>= ymax)){ + data[x + y*infoP->widthTrue].alpha = 0; + }else{ + int k0 = y - infoP->value; + int k1 = y + infoP->value; + + if ( k0widthTrue].green; + if (minValue>=k1p){ + minIndex = k1; + minValue = k1p; + } + }else{ + minIndex = k0; + minValue = data[x + k0*infoP->widthTrue].green; + for (int k=k0+1; k<=k1;k++) + { + A_u_char kp = data[x + k*infoP->widthTrue].green; + if (minValue>=kp){ + minIndex = k; + minValue = kp; + } + } + } + data[x + y*infoP->widthTrue].alpha = minValue; + } + + } + } + + return err; +} +//------------------------------------------------------------------------------------------------- +static PF_Err +MinVur16 (MinInfo *infoP) +{ + PF_Err err = PF_Err_NONE; + PF_Pixel16 *data; + data = (PF_Pixel16 *)infoP->data; + + int ymax = infoP->height -1 - infoP->value; + + for (int x=0; xwidth; x++){ + int minIndex = -1000; + A_u_short minValue = 0; + for (int y=0; yheight; y++){ + if ( (yvalue)||(y> ymax)){ + data[x + y*infoP->widthTrue].alpha = 0; + }else{ + int k0 = y - infoP->value; + int k1 = y + infoP->value; + + if ( k0widthTrue].green; + if (minValue>=k1p){ + minIndex = k1; + minValue = k1p; + } + }else{ + minIndex = k0; + minValue = data[x + k0*infoP->widthTrue].green; + for (int k=k0+1; k<=k1;k++) + { + A_u_short kp = data[x + k*infoP->widthTrue].green; + if (minValue>=kp){ + minIndex = k; + minValue = kp; + } + } + } + data[x + y*infoP->widthTrue].alpha = minValue; + } + + } + } + + return err; +} +//------------------------------------------------------------------------------------------------- +static PF_Err +MinVur32 (MinInfo *infoP) +{ + PF_Err err = PF_Err_NONE; + PF_PixelFloat *data; + data = (PF_PixelFloat *)infoP->data; + + int ymax = infoP->height -1 - infoP->value; + + for (int x=0; xwidth; x++){ + int minIndex = -1000; + PF_FpShort minValue = 0; + for (int y=0; yheight; y++){ + if ( (yvalue)||(y> ymax)){ + data[x + y*infoP->widthTrue].alpha = 0; + }else{ + int k0 = y - infoP->value; + int k1 = y + infoP->value; + + if ( k0widthTrue].green; + if (minValue>=k1p){ + minIndex = k1; + minValue = k1p; + } + }else{ + minIndex = k0; + minValue = data[x + k0*infoP->widthTrue].green; + for (int k=k0+1; k<=k1;k++) + { + PF_FpShort kp = data[x + k*infoP->widthTrue].green; + if (minValue>=kp){ + minIndex = k; + minValue = kp; + } + } + } + data[x + y*infoP->widthTrue].alpha = minValue; + } + + } + } + + return err; +} +//------------------------------------------------------------------------------------------------- +static PF_Err +MaskAlpha8 ( + 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_long v = (A_long)inP->alpha -(A_long)outP->alpha; + + if (niP->level != 1.0){ + v = (A_long)((double)v * niP->level + 0.5); + } + if (v <0) v = 0; + else if (v>PF_MAX_CHAN8) v = PF_MAX_CHAN8; + + *outP = niP->color; + outP->alpha = (A_u_char)v; + return err; +} +//------------------------------------------------------------------------------------------------- +static PF_Err +MaskAlpha16 ( + 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_long v = (A_long)inP->alpha -(A_long)outP->alpha; + + if (niP->level != 1.0){ + v = (A_long)((double)v * niP->level + 0.5); + } + if (v <0) v = 0; + else if (v>PF_MAX_CHAN16) v = PF_MAX_CHAN16; + + *outP = niP->color16; + outP->alpha = (A_u_short)v; + + return err; +} +//------------------------------------------------------------------------------------------------- +static PF_Err +MaskAlpha32 ( + 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); + + + double v = (double)inP->alpha -(double)outP->alpha; + + if (niP->level != 1.0){ + v = (v * niP->level); + } + if (v <0) v = 0; + else if (v>1.0) v = 1.0; + + *outP = niP->color32; + outP->alpha = (PF_FpShort)v; + + return err; +} +//------------------------------------------------------------------------------------------------- +static PF_Err GetParams(CFsAE *ae, ParamInfo *infoP) +{ + PF_Err err = PF_Err_NONE; + + + ERR(ae->GetADD(ID_VALUE,&infoP->value)); + ERR(ae->GetCOLOR(ID_COLOR,&infoP->color)); + infoP->color16 = CONV8TO16(infoP->color); + infoP->color32 = CONV8TO32(infoP->color); + ERR(ae->GetFLOAT(ID_LEVEL,&infoP->level)); + if (infoP->level <0) infoP->level =0; + infoP->level /= 100.0; + + return err; +} +//------------------------------------------------------------------------------------------------- +static PF_Err + Exec (CFsAE *ae , ParamInfo *infoP) +{ + PF_Err err = PF_Err_NONE; + + //画面をコピー + MinInfo mi; + mi.data = ae->out->data(); + mi.width = ae->out->width(); + mi.widthTrue = ae->out->widthTrue(); + mi.height = ae->out->height(); + mi.value = infoP->value; + + switch(ae->pixelFormat()) + { + case PF_PixelFormat_ARGB128: + ERR(ae->iterate32((refconType)infoP,CopyAlphaToRed32)); + MinHor32(&mi); + MinVur32(&mi); + ERR(ae->iterate32((refconType)infoP,MaskAlpha32)); + break; + case PF_PixelFormat_ARGB64: + ERR(ae->iterate16((refconType)infoP,CopyAlphaToRed16)); + MinHor16(&mi); + MinVur16(&mi); + ERR(ae->iterate16((refconType)infoP,MaskAlpha16)); + break; + case PF_PixelFormat_ARGB32: + ERR(ae->iterate8((refconType)infoP,CopyAlphaToRed8)); + MinHor8(&mi); + MinVur8(&mi); + ERR(ae->iterate8((refconType)infoP,MaskAlpha8)); + 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/OutLine/OutLine.h b/OutLine/OutLine.h new file mode 100644 index 0000000..8ca1c09 --- /dev/null +++ b/OutLine/OutLine.h @@ -0,0 +1,93 @@ +//----------------------------------------------------------------------------------- +/* + OutLine for VS2010 +*/ +//----------------------------------------------------------------------------------- + +#pragma once +#ifndef OutLine_H +#define OutLine_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_VALUE, + ID_COLOR, + ID_LEVEL, + ID_NUM_PARAMS +}; + +//UIの表示文字列 +#define STR_VALUE "Value" +#define STR_COLOR "Color" +#define STR_LEVEL "Level(%)" + + +//UIのパラメータ +typedef struct ParamInfo { + A_long value; + PF_Pixel color; + PF_Pixel16 color16; + PF_PixelFloat color32; + PF_FpLong level; + +} ParamInfo, *ParamInfoP, **ParamInfoH; + +typedef struct MinInfo { + PF_PixelPtr data; + A_long width; + A_long widthTrue; + A_long height; + + A_long value; + +} MinInfo; + +//------------------------------------------------------- + + +//----------------------------------------------------------------------------------- +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 // OutLine_H diff --git a/OutLine/OutLinePiPL.r b/OutLine/OutLinePiPL.r new file mode 100644 index 0000000..98b2313 --- /dev/null +++ b/OutLine/OutLinePiPL.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/OutLine/Win/OutLine.sln b/OutLine/Win/OutLine.sln new file mode 100644 index 0000000..216621e --- /dev/null +++ b/OutLine/Win/OutLine.sln @@ -0,0 +1,26 @@ +サソ +Microsoft Visual Studio Solution File, Format Version 11.00 +# Visual Studio 2010 +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "OutLine", "OutLine.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/OutLine/Win/OutLine.vcxproj b/OutLine/Win/OutLine.vcxproj new file mode 100644 index 0000000..8bd53f3 --- /dev/null +++ b/OutLine/Win/OutLine.vcxproj @@ -0,0 +1,585 @@ +サソ + + + + Debug + Win32 + + + Debug + x64 + + + Release-MD + Win32 + + + Release-MD + x64 + + + Release + Win32 + + + Release + x64 + + + + {A48F2124-FDA5-4D0D-92F6-CF1EE3166A92} + OutLine + OutLine + 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/OutLine.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/OutLine.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/OutLine.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/OutLine.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/OutLine.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/OutLine.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/OutLine/Win/OutLine.vcxproj.filters b/OutLine/Win/OutLine.vcxproj.filters new file mode 100644 index 0000000..f6ad7ec --- /dev/null +++ b/OutLine/Win/OutLine.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/OutLine/Win/OutLinePiPL.rc b/OutLine/Win/OutLinePiPL.rc new file mode 100644 index 0000000..e0eedb9 --- /dev/null +++ b/OutLine/Win/OutLinePiPL.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 OutLine", + + "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, + 12, 0x0, + "\x0BF's OutLine", + + "MIB8", + 0x6165464CL, + 0L, + 4L + 0L, + + +END + diff --git a/Paint/Fs_Target.h b/Paint/Fs_Target.h new file mode 100644 index 0000000..ec1369b --- /dev/null +++ b/Paint/Fs_Target.h @@ -0,0 +1,80 @@ +//----------------------------------------------------------------------------------- +/* + F's Plugins for VS2010/VS2012 +*/ +//----------------------------------------------------------------------------------- + +#pragma once +#ifndef Fs_TARGET_H +#define Fs_TARGET_H + + +//----------------------------------------------------------------------------------- +//プラグインの識別に使われる名前 +#define FS_NAME "F's Paint" +//----------------------------------------------------------------------------------- +//プラグインの説明に使われる文字 +#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/Paint/Paint.cpp b/Paint/Paint.cpp new file mode 100644 index 0000000..d1e3fd7 --- /dev/null +++ b/Paint/Paint.cpp @@ -0,0 +1,386 @@ +//----------------------------------------------------------------------------------- +/* + F's Plugins for VS2010/VS2012 +*/ +//----------------------------------------------------------------------------------- +#include "Paint.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_CHECKBOX(StrEXECUTED_CB1, + StrEXECUTED_CB2, + TRUE, + 0, + ID_EXECUTED_CB + ); + + //---------------------------------------------------------------- + //位置の指定 + AEFX_CLR_STRUCT(def); + PF_ADD_POINT(StrPOS, /*"New Center"*/ + 50, // X + 50, // Y + 0, // Flag + ID_POS + ); + //---------------------------------------------------------------- + //色の指定 + AEFX_CLR_STRUCT(def); + PF_ADD_COLOR( StrCOLOR, + 0xFF, + 0x00, + 0x00, + ID_COLOR + ); + //---------------------------------------------------------------- + AEFX_CLR_STRUCT(def); + PF_ADD_FIXED( StrCOLOR_Opacity, //パラメータの名前 + 0, //数値入力する場合の最小値 + 100, //数値入力する場合の最大値 + 0, //スライダーの最小値 + 100, //スライダーの最大値 + 100, //デフォルトの値 + 1, //数値表示に関するフラグ + 0, + 0, + ID_COLOR_OPACITY + ); + + //---------------------------------------------------------------- + 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, PaintInfo *infoP) +{ + PF_Err err = PF_Err_NONE; + + ERR(ae->GetCHECKBOX(ID_EXECUTED_CB,&infoP->executed)); + ERR(ae->GetFIXEDPOINT(ID_POS,&infoP->pos)); + ERR(ae->GetCOLOR(ID_COLOR,&infoP->color)); + ERR(ae->GetFIXED(ID_COLOR_OPACITY,&infoP->opacity)); + if (!err){ + if(!err) infoP->opacity /= 100; + if(!err) infoP->color.alpha = RoundByteLong( PF_MAX_CHAN8 * infoP->opacity >>16); + } + return err; +} +//------------------------------------------------------------------------------------------------- +static PF_Err + Exec (CFsAE *ae , PaintInfo *infoP) +{ + PF_Err err = PF_Err_NONE; + + //画面をコピー + ERR(ae->CopyInToOut()); + if (!err){ + if (infoP->executed==TRUE){ + err = ae->out->paint(infoP->pos,infoP->color); + } + } + 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()); + PaintInfo info; + ERR(GetParams(&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(PaintInfo),ID_NUM_PARAMS); + err = ae.resultErr(); + if (!err){ + + PaintInfo *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){ + PaintInfo *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/Paint/Paint.h b/Paint/Paint.h new file mode 100644 index 0000000..6de3a6d --- /dev/null +++ b/Paint/Paint.h @@ -0,0 +1,84 @@ +//----------------------------------------------------------------------------------- +/* + F's Plugins for VS2010/VS2012 +*/ +//----------------------------------------------------------------------------------- + + +#pragma once + +#ifndef Paint_H +#define Paint_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 StrEXECUTED_CB1 "塗りつぶす" +#define StrEXECUTED_CB2 "ON" +#define StrPOS "位置" +#define StrCOLOR "ペイント色" +#define StrCOLOR_Opacity "不透明度(%)" +#define StrERR_getParams "パラメータエラーです。御免なさい。" + + +//ユーザーインターフェースのID +//ParamsSetup関数とRender関数のparamsパラメータのIDになる +enum { + ID_INPUT = 0, // default input layer + ID_EXECUTED_CB, //boolean + ID_POS, + ID_COLOR, + ID_COLOR_OPACITY, + ID_NUM_PARAMS + }; + +typedef struct PaintInfo{ + PF_Boolean executed; + PF_FixedPoint pos; + PF_Pixel color; + PF_Fixed opacity; +} PaintInfo, *PaintInfoP, **PaintInfoH; + +//------------------------------------------------------- +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 // Paint_H diff --git a/Paint/PaintPiPL.r b/Paint/PaintPiPL.r new file mode 100644 index 0000000..1cf1ba6 --- /dev/null +++ b/Paint/PaintPiPL.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 { + 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/Paint/Win/Paint.vcxproj b/Paint/Win/Paint.vcxproj new file mode 100644 index 0000000..9b444a0 --- /dev/null +++ b/Paint/Win/Paint.vcxproj @@ -0,0 +1,334 @@ +サソ + + + + Debug + x64 + + + Release-MD + x64 + + + Release + x64 + + + + {E08EF309-965E-48B8-B74C-9D494A685FC7} + Paint + 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/Paint.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/Paint.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/Paint.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/Paint/Win/Paint.vcxproj.filters b/Paint/Win/Paint.vcxproj.filters new file mode 100644 index 0000000..ee1def7 --- /dev/null +++ b/Paint/Win/Paint.vcxproj.filters @@ -0,0 +1,169 @@ + + + + + {16385773-49f8-4efb-b433-c1f1f5bf2a8a} + h;hpp;hxx;hm;inl;fi;fd + + + {78bcef5c-d1c4-483c-8b0f-2a2e6af26372} + + + {6cf6b53f-5ec8-4189-9f4e-1d0f6a6a6af5} + ico;cur;bmp;dlg;rc2;rct;bin;cnt;rtf;gif;jpg;jpeg;jpe + + + {4db92b37-be71-4e55-bbb9-8350fe00d4f5} + + + {add0969b-84df-4368-b474-45124bd87f8e} + + + {c6c2a423-9c78-4ad3-b260-6fd9bb5f708c} + + + {06ed1df7-34f4-4cdc-af46-7bbd436a1821} + + + {a40541e5-2ac3-4f44-b00a-272e4113deef} + + + + + Header Files + + + Header Files\Windows + + + Header Files\Windows + + + Header Files + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\AE + + + Header Files\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 + + + 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/Paint/Win/PaintPiPL.rc b/Paint/Win/PaintPiPL.rc new file mode 100644 index 0000000..7395cc9 --- /dev/null +++ b/Paint/Win/PaintPiPL.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 Paint\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, + 12, 0x0, + "\x09F's Paint\0\0", + + "MIB8", + 0x6165464CL, + 0L, + 4L + 0L, + + +END + diff --git a/PaintMultPoint/Fs_Target.h b/PaintMultPoint/Fs_Target.h new file mode 100644 index 0000000..1c67d56 --- /dev/null +++ b/PaintMultPoint/Fs_Target.h @@ -0,0 +1,80 @@ +//----------------------------------------------------------------------------------- +/* + F's Plugins for VS2010/VS2012 +*/ +//----------------------------------------------------------------------------------- + +#pragma once +#ifndef Fs_TARGET_H +#define Fs_TARGET_H + + +//----------------------------------------------------------------------------------- +//プラグインの識別に使われる名前 +#define FS_NAME "F's PaintMalutPaint" +//----------------------------------------------------------------------------------- +//プラグインの説明に使われる文字 +#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/PaintMultPoint/PaintMultPoint.cpp b/PaintMultPoint/PaintMultPoint.cpp new file mode 100644 index 0000000..16c01f8 --- /dev/null +++ b/PaintMultPoint/PaintMultPoint.cpp @@ -0,0 +1,397 @@ +//----------------------------------------------------------------------------------- +/* + F's Plugins for VS2010/VS2012 +*/ +//----------------------------------------------------------------------------------- +#include "PaintMultPoint.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_Pixel cols[POINT_COLOR_COUNT] ={ + {PF_MAX_CHAN8,PF_MAX_CHAN8,0,0}, + {PF_MAX_CHAN8,0,PF_MAX_CHAN8,0}, + {PF_MAX_CHAN8,0,0,PF_MAX_CHAN8}, + {PF_MAX_CHAN8,PF_MAX_CHAN8,PF_MAX_CHAN8,0}, + {PF_MAX_CHAN8,PF_MAX_CHAN8,0,PF_MAX_CHAN8}, + {PF_MAX_CHAN8,0,PF_MAX_CHAN8,PF_MAX_CHAN8}, + {PF_MAX_CHAN8,PF_MAX_CHAN8/2,0,0}, + {PF_MAX_CHAN8,0,PF_MAX_CHAN8/2,0} + }; + + PF_Err err = PF_Err_NONE; + PF_ParamDef def; + + char cap[255] = {"\0"}; + for (A_long i=0; inum_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; + + A_long idx =0; + for (A_long i = 0 ;i GetCHECKBOX(ID_UI_CB(i),&b)); + if ((!err)&&(b==TRUE)){ + ERR(ae->GetFIXEDPOINT(ID_UI_POS(i),&infoP->prms[idx].pos)); + ERR(ae->GetCOLOR(ID_UI_COL(i),&infoP->prms[idx].color)); + ERR(ae->GetCHECKBOX(ID_UI_GID(i),&infoP->prms[idx].disp_guide)); + if (!err) idx++; + } + if (err) break; + } + infoP->Count = idx; + ERR(ae->GetCHECKBOX(ID_UI_GUIDE_VISIBLE,&infoP->disp_guide_all)); + return err; +} +//------------------------------------------------------------------------------------------------- +static PF_Err + Exec (CFsAE *ae , ParamInfo *infoP) +{ + PF_Err err = PF_Err_NONE; + + //画面をコピー + ERR(ae->CopyInToOut()); + if (!err){ + if ( infoP->Count>0){ + for ( A_long i=0; iCount; i++){ + ERR(ae->out->paint(infoP->prms[i].pos,infoP->prms[i].color)); + } + if ( infoP->disp_guide_all == FALSE){ + for ( A_long i=0; iCount; i++){ + if (infoP->prms[i].disp_guide == TRUE){ + PF_Pixel b; + b.alpha = PF_MAX_CHAN8; + b.blue = PF_MAX_CHAN8 - infoP->prms[i].color.blue; + b.green = PF_MAX_CHAN8 - infoP->prms[i].color.green; + b.red = PF_MAX_CHAN8 - infoP->prms[i].color.red; + ae->out->lineHeiht = 2; + ae->out->XLine(0,ae->out->width(),infoP->prms[i].pos.y>>16,b); + ae->out->YLine(infoP->prms[i].pos.x>>16,0,ae->out->height(),b); + } + + } + } + } + } + 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)); + + } + 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 +//----------------------------------------------------------------------------------- +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/PaintMultPoint/PaintMultPoint.h b/PaintMultPoint/PaintMultPoint.h new file mode 100644 index 0000000..53d72ed --- /dev/null +++ b/PaintMultPoint/PaintMultPoint.h @@ -0,0 +1,102 @@ +//----------------------------------------------------------------------------------- +/* + F's Plugins for VS2010/VS2012 +*/ +//----------------------------------------------------------------------------------- + + +#pragma once + +#ifndef Paint_H +#define Paint_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_TOPIC "Point_%d" +#define STR_EXECUTED_CB1 "塗りつぶす_%d" +#define STR_EXECUTED_CB2 "ON" +#define STR_POS "位置_%d" +#define STR_COLOR "ペイント色_%d" + +#ifdef AE_OS_WIN +#define STR_GUIDE_CB1 "ガイド表示_%d" +#define STR_GUIDE_ALL_CB2 "非表示" +#define STR_GUIDE_ALL_CB1 "ガイドをすべて非表示にする" +#else +#define STR_GUIDE_CB1 "ガイド表\示_%d" +#define STR_GUIDE_ALL_CB2 "非表\示" +#define STR_GUIDE_ALL_CB1 "ガイドをすべて非表\示にする" +#endif + + +typedef struct{ + PF_FixedPoint pos; + PF_Pixel color; + PF_Boolean disp_guide; +} PointColorInfo; + +#define POINT_COLOR_COUNT 8 + +typedef struct{ + A_long Count; + PointColorInfo prms[POINT_COLOR_COUNT]; + PF_Boolean disp_guide_all; +} ParamInfo; + +//ユーザーインターフェースのID +#define ID_INPUT 0 +#define ID_UI_START 1 +#define ID_UI_COUNT 6 +#define ID_UI_TOPIC(X) ((X)*ID_UI_COUNT + ID_UI_START + 0) +#define ID_UI_CB(X) ((X)*ID_UI_COUNT + ID_UI_START + 1) +#define ID_UI_POS(X) ((X)*ID_UI_COUNT + ID_UI_START + 2) +#define ID_UI_COL(X) ((X)*ID_UI_COUNT + ID_UI_START + 3) +#define ID_UI_GID(X) ((X)*ID_UI_COUNT + ID_UI_START + 4) +#define ID_UI_TOPIC_END(X) ((X)*ID_UI_COUNT + ID_UI_START + 5) +#define ID_UI_GUIDE_VISIBLE (POINT_COLOR_COUNT * ID_UI_COUNT + ID_UI_START) +#define ID_NUM_PARAMS (ID_UI_GUIDE_VISIBLE + 1) + +//------------------------------------------------------- +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 // Paint_H diff --git a/PaintMultPoint/PaintMultPointPiPL.r b/PaintMultPoint/PaintMultPointPiPL.r new file mode 100644 index 0000000..1cf1ba6 --- /dev/null +++ b/PaintMultPoint/PaintMultPointPiPL.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 { + 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/PaintMultPoint/Win/PaintMultPoint.sln b/PaintMultPoint/Win/PaintMultPoint.sln new file mode 100644 index 0000000..fa4f8d0 --- /dev/null +++ b/PaintMultPoint/Win/PaintMultPoint.sln @@ -0,0 +1,20 @@ +サソ +Microsoft Visual Studio Solution File, Format Version 11.00 +# Visual Studio 2010 +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "PaintMultPoint", "PaintMultPoint.vcxproj", "{E08EF309-965E-48B8-B74C-9D494A685FC7}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|x64 = Debug|x64 + Release|x64 = Release|x64 + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {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|x64.ActiveCfg = Release|x64 + {E08EF309-965E-48B8-B74C-9D494A685FC7}.Release|x64.Build.0 = Release|x64 + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/PaintMultPoint/Win/PaintMultPoint.vcxproj b/PaintMultPoint/Win/PaintMultPoint.vcxproj new file mode 100644 index 0000000..d5d8401 --- /dev/null +++ b/PaintMultPoint/Win/PaintMultPoint.vcxproj @@ -0,0 +1,334 @@ +サソ + + + + Debug + x64 + + + Release-MD + x64 + + + Release + x64 + + + + {A7067AA4-DFD9-439A-8B04-561FED26BD8D} + PaintMultPoint + 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/PaintMultPoint.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/PaintMultPoint.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/PaintMultPoint.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/PaintMultPoint/Win/PaintMultPoint.vcxproj.filters b/PaintMultPoint/Win/PaintMultPoint.vcxproj.filters new file mode 100644 index 0000000..d2cb867 --- /dev/null +++ b/PaintMultPoint/Win/PaintMultPoint.vcxproj.filters @@ -0,0 +1,169 @@ + + + + + {16385773-49f8-4efb-b433-c1f1f5bf2a8a} + h;hpp;hxx;hm;inl;fi;fd + + + {78bcef5c-d1c4-483c-8b0f-2a2e6af26372} + + + {6cf6b53f-5ec8-4189-9f4e-1d0f6a6a6af5} + ico;cur;bmp;dlg;rc2;rct;bin;cnt;rtf;gif;jpg;jpeg;jpe + + + {4db92b37-be71-4e55-bbb9-8350fe00d4f5} + + + {add0969b-84df-4368-b474-45124bd87f8e} + + + {c6c2a423-9c78-4ad3-b260-6fd9bb5f708c} + + + {06ed1df7-34f4-4cdc-af46-7bbd436a1821} + + + {a40541e5-2ac3-4f44-b00a-272e4113deef} + + + + + 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 + + + Header 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 + + + + + Resource Files + + + \ No newline at end of file diff --git a/PaintMultPoint/Win/PaintMultPointPiPL.rc b/PaintMultPoint/Win/PaintMultPointPiPL.rc new file mode 100644 index 0000000..098ca99 --- /dev/null +++ b/PaintMultPoint/Win/PaintMultPointPiPL.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 PaintMalutPaint", + + "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 PaintMalutPaint", + + "MIB8", + 0x6165464CL, + 0L, + 4L + 0L, + + +END + diff --git a/PaperPlaneGetWeight/Fs_Entry.h b/PaperPlaneGetWeight/Fs_Entry.h new file mode 100644 index 0000000..fb72042 --- /dev/null +++ b/PaperPlaneGetWeight/Fs_Entry.h @@ -0,0 +1,227 @@ +//----------------------------------------------------------------------------------- +/* + PaperPlaneGetWeight 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/PaperPlaneGetWeight/Fs_Target.h b/PaperPlaneGetWeight/Fs_Target.h new file mode 100644 index 0000000..396dd7e --- /dev/null +++ b/PaperPlaneGetWeight/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 PaperPlaneGetWeight" + +//----------------------------------------------------------------------------------- +//プラグインの説明に使われる文字 +#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 FS_CATEGORY "F's Plugins-PaperPlane" + +//----------------------------------------------------------- +//#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/PaperPlaneGetWeight/PaperPlaneGetWeight.cpp b/PaperPlaneGetWeight/PaperPlaneGetWeight.cpp new file mode 100644 index 0000000..c87b151 --- /dev/null +++ b/PaperPlaneGetWeight/PaperPlaneGetWeight.cpp @@ -0,0 +1,262 @@ +//----------------------------------------------------------------------------------- +/* + F's Plugins for VS2010/VS2012 +*/ +//----------------------------------------------------------------------------------- + + +#include "PaperPlaneGetWeight.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); + def.flags = PF_ParamFlag_CANNOT_TIME_VARY;//これをつけるとキーフレームが撃てなくなる + PF_ADD_CHECKBOX(STR_ISHALF, + "on", + FALSE, + 0, + ID_ISHALF + ); + //---------------------------------------------------------------- + AEFX_CLR_STRUCT(def); + def.flags = PF_ParamFlag_CANNOT_TIME_VARY;//これをつけるとキーフレームが撃てなくなる + PF_ADD_SLIDER(STR_COUNT, //パラメータの名前 + 0, //数値入力する場合の最小値 + 5, //数値入力する場合の最大値 + 0, //スライダーの最小値 + 5, //スライダーの最大値 + 1, //デフォルトの値 + ID_COUNT + ); + + //---------------------------------------------------------------- + //ポップアップメニュー + AEFX_CLR_STRUCT(def); + def.flags = PF_ParamFlag_CANNOT_TIME_VARY;//これをつけるとキーフレームが撃てなくなる + PF_ADD_POPUP( STR_WEIGHT, + STR_WEIGHT_COUNT, //メニューの数 + STR_WEIGHT_DFLT, //デフォルト + STR_WEIGHT_ITEMS, + ID_WEIGHT + ); + //---------------------------------------------------------------- + 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 a = outP->alpha; + outP->alpha = PF_MAX_CHAN8; + outP->red = outP->green = outP->blue = 0; + + if ((a ==0 ) || (niP->count <= 0) || (niP->weight <= 0)) { + return err; + } + outP->red= RoundByteLong( (A_long)((double)niP->weightR * a / PF_MAX_CHAN8 + 0.5)); + outP->green = RoundByteLong((A_long)((double)niP->weightG * a / PF_MAX_CHAN8 + 0.5)); + outP->blue = niP->weightB; + + + return err; +} +//------------------------------------------------------------------------------------------------- +static PF_Err GetParams(CFsAE *ae, ParamInfo *infoP) +{ + PF_Err err = PF_Err_NONE; + + ERR(ae->GetCHECKBOX(ID_ISHALF,&infoP->isHalf)); + ERR(ae->GetADD(ID_COUNT,&infoP->count)); + A_long w = 0; + ERR(ae->GetPOPUP(ID_WEIGHT,&w)); + + switch (w) + { + case 1: infoP->weight = pw180; break; + case 2: infoP->weight = pw225; break; + case 3: infoP->weight = pw310; break; + case 4: infoP->weight = pw360; break; + default: + infoP->weight = 0; + break; + } + + A_long c = infoP->count; + if (infoP->isHalf) { + infoP->weight *= c * 2; + c = c | ((c * 2) << 4); + } + else { + infoP->weight *= c; + c = c | (c << 4); + } + + infoP->weightB = (A_u_char)c; + + + if (infoP->weight > (255 + 255)) infoP->weight = (255 + 255); + + infoP->weightG = (A_u_char)(infoP->weight / 2); + infoP->weightR = (A_u_char)(infoP->weight - infoP->weightG); + + + return err; +} +//------------------------------------------------------------------------------------------------- +static PF_Err + Exec (CFsAE *ae , ParamInfo *infoP) +{ + PF_Err err = PF_Err_NONE; + + //画面をコピー + if (infoP->count<=0) { + ERR(ae->out->clear()); + return err; + } + + 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/PaperPlaneGetWeight/PaperPlaneGetWeight.h b/PaperPlaneGetWeight/PaperPlaneGetWeight.h new file mode 100644 index 0000000..c9f62a2 --- /dev/null +++ b/PaperPlaneGetWeight/PaperPlaneGetWeight.h @@ -0,0 +1,96 @@ +//----------------------------------------------------------------------------------- +/* + PaperPlaneGetWeight for VS2010 +*/ +//----------------------------------------------------------------------------------- + +#pragma once +#ifndef PaperPlaneGetWeight_H +#define PaperPlaneGetWeight_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_ISHALF, + ID_COUNT, + ID_WEIGHT, + + ID_NUM_PARAMS +}; + +#define WEIGHT_SCALE 5 +enum { + pw180 = 180 / WEIGHT_SCALE, + pw225 = 225 / WEIGHT_SCALE, + pw310 = 310 / WEIGHT_SCALE, + pw360 = 360 / WEIGHT_SCALE, +}; + +//UIの表示文字列 +#define STR_ISHALF "HalfSize" +#define STR_COUNT "Count" +#define STR_WEIGHT "Weight" +#define STR_WEIGHT_ITEMS "180|225|310|360" +#define STR_WEIGHT_COUNT 4 +#define STR_WEIGHT_DFLT 2 + + +//UIのパラメータ +typedef struct ParamInfo { + PF_Boolean isHalf; + A_long count; + A_long weight; + A_u_char weightG; + A_u_char weightR; + A_u_char weightB; + +} 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 // PaperPlaneGetWeight_H diff --git a/PaperPlaneGetWeight/PaperPlaneGetWeightPiPL.r b/PaperPlaneGetWeight/PaperPlaneGetWeightPiPL.r new file mode 100644 index 0000000..98b2313 --- /dev/null +++ b/PaperPlaneGetWeight/PaperPlaneGetWeightPiPL.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/PaperPlaneGetWeight/Win/PaperPlaneGetWeight.vcxproj b/PaperPlaneGetWeight/Win/PaperPlaneGetWeight.vcxproj new file mode 100644 index 0000000..094898e --- /dev/null +++ b/PaperPlaneGetWeight/Win/PaperPlaneGetWeight.vcxproj @@ -0,0 +1,593 @@ +サソ + + + + Debug + Win32 + + + Debug + x64 + + + Release-MD + Win32 + + + Release-MD + x64 + + + Release + Win32 + + + Release + x64 + + + + {22B65B86-5251-4F16-BB10-B6550F974FA3} + PaperPlaneGetWeight + PaperPlaneGetWeight + 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)\$(Co..\..\outAEX64\$(Configuration)\ + $(Platform)\$(Co..\..\outAEX64\$(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 + + + $(Platform)\$(Configuration)\ + F's $(ProjectName)_CC2018 + + + $(Platform)\$(Configuration)\ + F's $(ProjectName)_CC2018_MD + + + + _DEBUG;%(PreprocessorDefinitions) + true + true + Win32 + .\Debug/PaperPlaneGetWeight.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/PaperPlaneGetWeight.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/PaperPlaneGetWeight.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/PaperPlaneGetWeight.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/PaperPlaneGetWeight.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/PaperPlaneGetWeight.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/PaperPlaneGetWeight/Win/PaperPlaneGetWeight.vcxproj.filters b/PaperPlaneGetWeight/Win/PaperPlaneGetWeight.vcxproj.filters new file mode 100644 index 0000000..fe4fa6b --- /dev/null +++ b/PaperPlaneGetWeight/Win/PaperPlaneGetWeight.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/PaperPlaneGetWeight/Win/PaperPlaneGetWeight.zip b/PaperPlaneGetWeight/Win/PaperPlaneGetWeight.zip new file mode 100644 index 0000000..28ff5b2 Binary files /dev/null and b/PaperPlaneGetWeight/Win/PaperPlaneGetWeight.zip differ diff --git a/PaperPlaneGetWeight/Win/PaperPlaneGetWeightPiPL.rc b/PaperPlaneGetWeight/Win/PaperPlaneGetWeightPiPL.rc new file mode 100644 index 0000000..09f3713 --- /dev/null +++ b/PaperPlaneGetWeight/Win/PaperPlaneGetWeightPiPL.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 PaperPlaneGetWeight", + + "MIB8", + "gtac", + 0, 0x0, + 24, 0x0, + "\x16F's Plugins-PaperPlane\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, + 73L, + + "MIB8", + "ANMe", + 0, 0x0, + 24, 0x0, + "\x17F's PaperPlaneGetWeight", + + "MIB8", + 0x6165464CL, + 0L, + 4L + 0L, + + +END + diff --git a/PaperPlaneGetWeightInfo/AEDebugAngel.cpp b/PaperPlaneGetWeightInfo/AEDebugAngel.cpp new file mode 100644 index 0000000..f2591c5 --- /dev/null +++ b/PaperPlaneGetWeightInfo/AEDebugAngel.cpp @@ -0,0 +1,2092 @@ + +#include +#include "AEDebugAngel.h" +#define STR_START 32 +#define STR_LAST 126 +#define STR_COUNT 95 +#define STR_WIDTH 12 +#define STR_HEIGHT 18 +#define STR_SIZE 216 +A_u_char STR_FONT[STR_COUNT][STR_SIZE]={ +//32 +{ + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 +}, +//33 +{ + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x33,0xDA,0x8B,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x33,0xFF,0x7A,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x33,0xFF,0x7A,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x26,0xFF,0x7A,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0xDA,0x7A,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0xDA,0x7A,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0xDA,0x33,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0xDA,0x33,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x7A,0x0C,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x19,0xC3,0x8B,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x26,0xFF,0xC3,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x40,0x19,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 +}, +//34 +{ + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x7A,0x7A,0x00,0x40,0x7A,0x40,0x00,0x00,0x00, + 0x00,0x00,0x00,0xC3,0xDA,0x00,0x6B,0xFF,0x33,0x00,0x00,0x00, + 0x00,0x00,0x00,0xC3,0xC3,0x00,0x33,0xFF,0x33,0x00,0x00,0x00, + 0x00,0x00,0x00,0x7A,0xC3,0x00,0x33,0xDA,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x6B,0x7A,0x00,0x00,0xAE,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 +}, +//35 +{ + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0xDA,0x00,0x00,0xAE,0x6B,0x00,0x00, + 0x00,0x00,0x00,0x00,0x40,0xC3,0x00,0x00,0xDA,0x26,0x00,0x00, + 0x00,0x00,0x00,0x00,0x8B,0x8B,0x00,0x33,0xDA,0x00,0x00,0x00, + 0x00,0x40,0x7A,0x7A,0xDA,0x9C,0x7A,0xAE,0xDA,0x7A,0x00,0x00, + 0x00,0x40,0x7A,0x8B,0xDA,0x7A,0x7A,0xDA,0x8B,0x7A,0x00,0x00, + 0x00,0x00,0x00,0x5C,0xC3,0x00,0x00,0xDA,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x9C,0x7A,0x00,0x40,0xC3,0x00,0x00,0x00,0x00, + 0x00,0x0C,0x33,0xDA,0x5C,0x33,0x9C,0x9C,0x33,0x33,0x00,0x00, + 0x00,0x6B,0xC3,0xDA,0xC3,0xC3,0xFF,0xC3,0xC3,0xAE,0x00,0x00, + 0x00,0x00,0x6B,0xAE,0x00,0x26,0xDA,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0xAE,0x6B,0x00,0x6B,0xC3,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0xDA,0x26,0x00,0xAE,0x7A,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 +}, +//36 +{ + 0x00,0x00,0x00,0x00,0x00,0x0C,0x0C,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x7A,0x7A,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x40,0xC3,0xDA,0xDA,0xC3,0x8B,0x00,0x00,0x00, + 0x00,0x00,0x26,0xDA,0x9C,0x9C,0x8B,0x6B,0x8B,0x00,0x00,0x00, + 0x00,0x00,0x9C,0xDA,0x00,0x7A,0x7A,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x8B,0xDA,0x19,0x7A,0x7A,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x19,0xDA,0xC3,0x9C,0x7A,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x33,0xC3,0xFF,0x9C,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x9C,0xFF,0xC3,0x40,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x7A,0x9C,0xC3,0xDA,0x19,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x7A,0x7A,0x19,0xDA,0x7A,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x7A,0x7A,0x0C,0xDA,0x6B,0x00,0x00, + 0x00,0x00,0xAE,0x9C,0x40,0x8B,0x9C,0xC3,0xDA,0x00,0x00,0x00, + 0x00,0x00,0x6B,0xC3,0xDA,0xDA,0xDA,0x9C,0x19,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x7A,0x7A,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x0C,0x0C,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 +}, +//37 +{ + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x33,0x0C,0x00, + 0x00,0x26,0xC3,0xDA,0xAE,0x00,0x00,0x00,0x4E,0xDA,0x0C,0x00, + 0x00,0xAE,0x9C,0x00,0xAE,0x9C,0x00,0x00,0xC3,0x4E,0x00,0x00, + 0x00,0xDA,0x33,0x00,0x5C,0xC3,0x00,0x8B,0x9C,0x00,0x00,0x00, + 0x00,0xDA,0x33,0x00,0x5C,0xC3,0x40,0xDA,0x0C,0x00,0x00,0x00, + 0x00,0xAE,0x8B,0x00,0xAE,0x8B,0xC3,0x5C,0x00,0x00,0x00,0x00, + 0x00,0x00,0xAE,0xDA,0xAE,0x8B,0xAE,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x26,0xDA,0x7A,0xDA,0xDA,0x8B,0x00,0x00, + 0x00,0x00,0x00,0x00,0xC3,0x8B,0xDA,0x40,0x33,0xDA,0x40,0x00, + 0x00,0x00,0x00,0x7A,0xAE,0x33,0xDA,0x00,0x00,0xC3,0x7A,0x00, + 0x00,0x00,0x26,0xDA,0x19,0x33,0xDA,0x00,0x00,0xC3,0x7A,0x00, + 0x00,0x00,0xAE,0x7A,0x00,0x00,0xDA,0x40,0x33,0xDA,0x26,0x00, + 0x00,0x6B,0xC3,0x00,0x00,0x00,0x4E,0xDA,0xDA,0x5C,0x00,0x00, + 0x00,0x7A,0x26,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 +}, +//38 +{ + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x33,0x26,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x4E,0xDA,0xC3,0xDA,0xAE,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0xDA,0x7A,0x00,0x19,0xDA,0x33,0x00,0x00,0x00,0x00, + 0x00,0x00,0xDA,0x40,0x00,0x19,0xDA,0x19,0x00,0x00,0x00,0x00, + 0x00,0x00,0xC3,0x9C,0x00,0xC3,0x9C,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x4E,0xFF,0xDA,0xC3,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x33,0xDA,0xDA,0x40,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x19,0xDA,0x9C,0xC3,0xDA,0x19,0x00,0xDA,0x6B,0x00,0x00, + 0x00,0x9C,0xAE,0x00,0x19,0xDA,0xC3,0x0C,0xDA,0x33,0x00,0x00, + 0x00,0xDA,0x7A,0x00,0x00,0x40,0xFF,0xC3,0xDA,0x19,0x00,0x00, + 0x00,0xDA,0x7A,0x00,0x00,0x00,0x6B,0xFF,0xC3,0x00,0x00,0x00, + 0x00,0x9C,0xDA,0x33,0x00,0x00,0x7A,0xFF,0xFF,0x40,0x00,0x00, + 0x00,0x00,0xAE,0xDA,0xC3,0xDA,0xDA,0x4E,0xAE,0xDA,0x26,0x00, + 0x00,0x00,0x00,0x26,0x4E,0x33,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 +}, +//39 +{ + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x40,0x7A,0x7A,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x6B,0xFF,0xDA,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x33,0xFF,0xC3,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0xDA,0x8B,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0xDA,0x6B,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x26,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 +}, +//40 +{ + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x5C,0x9C,0x26,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x5C,0xDA,0xDA,0x9C,0x0C,0x00,0x00, + 0x00,0x00,0x00,0x00,0x5C,0xFF,0x9C,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x26,0xDA,0x9C,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0xAE,0xC3,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x19,0xDA,0x6B,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x5C,0xFF,0x33,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x7A,0xDA,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x7A,0xDA,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x6B,0xFF,0x26,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x26,0xFF,0x6B,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0xAE,0xC3,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x40,0xFF,0x7A,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x8B,0xFF,0x6B,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x6B,0xDA,0xC3,0x6B,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x19,0x8B,0xC3,0x33,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 +}, +//41 +{ + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x9C,0x7A,0x26,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x6B,0xC3,0xFF,0xAE,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x40,0xDA,0xC3,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x33,0xDA,0x9C,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x5C,0xFF,0x40,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xDA,0x9C,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC3,0xDA,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7A,0xDA,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7A,0xDA,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xAE,0xDA,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xDA,0xAE,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x5C,0xFF,0x40,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0xC3,0xAE,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x19,0xC3,0xDA,0x19,0x00,0x00,0x00,0x00, + 0x00,0x00,0x40,0x9C,0xDA,0xC3,0x26,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0xAE,0xAE,0x5C,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 +}, +//42 +{ + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x33,0x0C,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0xDA,0x7A,0x00,0x0C,0x00,0x00,0x00, + 0x00,0x00,0x5C,0xC3,0x26,0xDA,0x33,0x7A,0xC3,0x00,0x00,0x00, + 0x00,0x00,0x33,0xAE,0xDA,0xDA,0xDA,0xDA,0x7A,0x00,0x00,0x00, + 0x00,0x00,0x00,0x19,0xC3,0xFF,0xDA,0x6B,0x00,0x00,0x00,0x00, + 0x00,0x00,0x7A,0xDA,0x9C,0xC3,0x8B,0xDA,0xC3,0x0C,0x00,0x00, + 0x00,0x00,0x26,0x4E,0x00,0xDA,0x5C,0x0C,0x7A,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0xDA,0x7A,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 +}, +//43 +{ + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x6B,0x0C,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0xC3,0x33,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0xC3,0x33,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0xC3,0x33,0x00,0x00,0x00,0x00,0x00, + 0x00,0x6B,0xC3,0xC3,0xC3,0xDA,0xC3,0xC3,0xC3,0xAE,0x00,0x00, + 0x00,0x40,0x7A,0x7A,0x7A,0xDA,0x8B,0x7A,0x7A,0x7A,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0xC3,0x33,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0xC3,0x33,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0xAE,0x33,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 +}, +//44 +{ + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x33,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x7A,0xFF,0xDA,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x7A,0xFF,0xFF,0x33,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x5C,0xFF,0x26,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x9C,0xC3,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x9C,0xC3,0x26,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x26,0x00,0x00,0x00,0x00,0x00,0x00,0x00 +}, +//45 +{ + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x0C,0x7A,0x7A,0x7A,0x7A,0x7A,0x6B,0x00,0x00,0x00, + 0x00,0x00,0x26,0xC3,0xC3,0xC3,0xC3,0xC3,0x9C,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 +}, +//46 +{ + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x19,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x4E,0xDA,0xC3,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x6B,0xFF,0xDA,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x4E,0x19,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 +}, +//47 +{ + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x33,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x9C,0xAE,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0xDA,0x26,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC3,0x8B,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x6B,0xDA,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x0C,0xDA,0x5C,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x9C,0xAE,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x40,0xDA,0x26,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0xC3,0x8B,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x6B,0xDA,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x0C,0xDA,0x5C,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x9C,0xAE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x40,0xDA,0x26,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x5C,0x6B,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 +}, +//48 +{ + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x19,0x33,0x33,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x8B,0xDA,0xDA,0xDA,0xC3,0x33,0x00,0x00,0x00, + 0x00,0x00,0x7A,0xFF,0x5C,0x00,0x0C,0xC3,0xC3,0x00,0x00,0x00, + 0x00,0x00,0xDA,0x9C,0x00,0x00,0x00,0xAE,0xFF,0x6B,0x00,0x00, + 0x00,0x33,0xFF,0x40,0x00,0x00,0x6B,0xDA,0xDA,0xC3,0x00,0x00, + 0x00,0x6B,0xFF,0x26,0x00,0x0C,0xDA,0x6B,0xC3,0xDA,0x00,0x00, + 0x00,0x7A,0xDA,0x00,0x00,0x9C,0xAE,0x00,0x8B,0xDA,0x00,0x00, + 0x00,0x7A,0xDA,0x00,0x4E,0xDA,0x26,0x00,0x7A,0xDA,0x00,0x00, + 0x00,0x6B,0xFF,0x33,0xC3,0x8B,0x00,0x00,0xC3,0xDA,0x00,0x00, + 0x00,0x33,0xFF,0xC3,0xC3,0x00,0x00,0x00,0xDA,0xC3,0x00,0x00, + 0x00,0x00,0xDA,0xFF,0x4E,0x00,0x00,0x40,0xFF,0x6B,0x00,0x00, + 0x00,0x00,0x7A,0xFF,0x5C,0x00,0x0C,0xC3,0xDA,0x00,0x00,0x00, + 0x00,0x00,0x00,0x9C,0xFF,0xC3,0xDA,0xDA,0x33,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x26,0x4E,0x33,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 +}, +//49 +{ + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x40,0xDA,0xAE,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x19,0x9C,0xDA,0xDA,0xC3,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x7A,0xAE,0x19,0xC3,0xC3,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x0C,0x00,0x00,0xC3,0xC3,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0xC3,0xC3,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0xC3,0xC3,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0xC3,0xC3,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0xC3,0xC3,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0xC3,0xC3,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0xC3,0xC3,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x0C,0x33,0x33,0xC3,0xC3,0x33,0x33,0x26,0x00,0x00, + 0x00,0x00,0x7A,0xDA,0xDA,0xDA,0xDA,0xDA,0xDA,0xAE,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 +}, +//50 +{ + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x33,0x33,0x33,0x19,0x00,0x00,0x00,0x00, + 0x00,0x00,0x6B,0xDA,0xDA,0xC3,0xDA,0xDA,0x8B,0x00,0x00,0x00, + 0x00,0x00,0x4E,0x40,0x00,0x00,0x00,0x9C,0xDA,0x19,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x33,0xFF,0x33,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x9C,0xDA,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x5C,0xFF,0x5C,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x4E,0xFF,0x5C,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x33,0xDA,0x5C,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x33,0xDA,0x5C,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x0C,0xDA,0x8B,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x9C,0xDA,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0xC3,0xC3,0x33,0x33,0x33,0x33,0x33,0x0C,0x00,0x00, + 0x00,0x00,0xAE,0xDA,0xDA,0xDA,0xDA,0xDA,0xDA,0x7A,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 +}, +//51 +{ + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x26,0x33,0x33,0x33,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0xAE,0xDA,0xDA,0xDA,0xDA,0xC3,0x26,0x00,0x00,0x00, + 0x00,0x00,0x4E,0x19,0x00,0x00,0x33,0xDA,0xAE,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC3,0xC3,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xDA,0xAE,0x00,0x00,0x00, + 0x00,0x00,0x00,0x26,0x33,0x40,0xAE,0xC3,0x19,0x00,0x00,0x00, + 0x00,0x00,0x00,0xAE,0xDA,0xDA,0xDA,0x7A,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x5C,0xDA,0xC3,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x5C,0xFF,0x40,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xDA,0x7A,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0xFF,0x5C,0x00,0x00, + 0x00,0x00,0x7A,0x19,0x00,0x00,0x19,0xC3,0xC3,0x00,0x00,0x00, + 0x00,0x00,0xC3,0xDA,0xDA,0xC3,0xDA,0xC3,0x26,0x00,0x00,0x00, + 0x00,0x00,0x00,0x26,0x40,0x33,0x26,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 +}, +//52 +{ + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0xC3,0xDA,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x8B,0xFF,0xDA,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x40,0xFF,0xC3,0xDA,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0xC3,0x9C,0x7A,0xDA,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x8B,0xC3,0x00,0x7A,0xDA,0x00,0x00,0x00,0x00, + 0x00,0x00,0x40,0xFF,0x40,0x00,0x7A,0xDA,0x00,0x00,0x00,0x00, + 0x00,0x0C,0xDA,0x8B,0x00,0x00,0x7A,0xDA,0x00,0x00,0x00,0x00, + 0x00,0x9C,0xDA,0x8B,0x7A,0x7A,0xAE,0xDA,0x7A,0x7A,0x0C,0x00, + 0x00,0x9C,0xC3,0xC3,0xC3,0xC3,0xDA,0xFF,0xC3,0xC3,0x26,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x7A,0xDA,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x7A,0xDA,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x7A,0xDA,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 +}, +//53 +{ + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x7A,0xDA,0xDA,0xDA,0xDA,0xDA,0xDA,0x33,0x00,0x00, + 0x00,0x00,0x7A,0xDA,0x7A,0x7A,0x7A,0x7A,0x7A,0x0C,0x00,0x00, + 0x00,0x00,0x7A,0xDA,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x7A,0xDA,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x7A,0xFF,0xAE,0x7A,0x5C,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x6B,0xC3,0xC3,0xDA,0xFF,0xDA,0x4E,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x40,0xDA,0xDA,0x19,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x4E,0xFF,0x6B,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xDA,0x7A,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x4E,0xFF,0x5C,0x00,0x00, + 0x00,0x00,0x7A,0x40,0x00,0x00,0x40,0xDA,0xC3,0x00,0x00,0x00, + 0x00,0x00,0xAE,0xDA,0xDA,0xDA,0xFF,0xC3,0x26,0x00,0x00,0x00, + 0x00,0x00,0x00,0x19,0x33,0x40,0x26,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 +}, +//54 +{ + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x26,0x33,0x33,0x26,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0xAE,0xDA,0xC3,0xDA,0xDA,0x00,0x00,0x00, + 0x00,0x00,0x00,0xC3,0xC3,0x19,0x00,0x00,0x40,0x00,0x00,0x00, + 0x00,0x00,0x7A,0xDA,0x19,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0xDA,0x9C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0xDA,0x40,0x00,0x5C,0x7A,0x5C,0x00,0x00,0x00,0x00, + 0x00,0x33,0xFF,0x5C,0xC3,0xDA,0xC3,0xDA,0xC3,0x19,0x00,0x00, + 0x00,0x33,0xFF,0xDA,0x9C,0x00,0x00,0x0C,0xDA,0xAE,0x00,0x00, + 0x00,0x19,0xDA,0xDA,0x00,0x00,0x00,0x00,0x8B,0xDA,0x00,0x00, + 0x00,0x00,0xDA,0xC3,0x00,0x00,0x00,0x00,0x7A,0xDA,0x00,0x00, + 0x00,0x00,0xAE,0xDA,0x00,0x00,0x00,0x00,0xAE,0xC3,0x00,0x00, + 0x00,0x00,0x40,0xFF,0x9C,0x00,0x00,0x5C,0xFF,0x4E,0x00,0x00, + 0x00,0x00,0x00,0x5C,0xDA,0xDA,0xDA,0xDA,0x5C,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x19,0x40,0x33,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 +}, +//55 +{ + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0xAE,0xDA,0xDA,0xDA,0xDA,0xDA,0xDA,0xDA,0x00,0x00, + 0x00,0x00,0x6B,0x7A,0x7A,0x7A,0x7A,0x7A,0xC3,0xC3,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0C,0xDA,0x5C,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xAE,0xAE,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x7A,0xDA,0x0C,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x40,0xFF,0x40,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0xC3,0x8B,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x8B,0xC3,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x19,0xDA,0x5C,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x5C,0xDA,0x19,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x7A,0xDA,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x7A,0xDA,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 +}, +//56 +{ + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x33,0x33,0x19,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x5C,0xDA,0xDA,0xDA,0xDA,0x5C,0x00,0x00,0x00, + 0x00,0x00,0x00,0xDA,0x6B,0x00,0x00,0x9C,0xDA,0x00,0x00,0x00, + 0x00,0x00,0x33,0xDA,0x00,0x00,0x00,0x4E,0xDA,0x00,0x00,0x00, + 0x00,0x00,0x19,0xDA,0x8B,0x00,0x00,0x9C,0xAE,0x00,0x00,0x00, + 0x00,0x00,0x00,0x8B,0xFF,0x9C,0x9C,0xDA,0x26,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0xC3,0xFF,0xDA,0x4E,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x9C,0xFF,0x7A,0xDA,0xDA,0x33,0x00,0x00,0x00, + 0x00,0x00,0x7A,0xFF,0x5C,0x00,0x33,0xDA,0xDA,0x19,0x00,0x00, + 0x00,0x00,0xDA,0xC3,0x00,0x00,0x00,0x33,0xDA,0x7A,0x00,0x00, + 0x00,0x00,0xDA,0x9C,0x00,0x00,0x00,0x00,0xDA,0x7A,0x00,0x00, + 0x00,0x00,0xAE,0xDA,0x33,0x00,0x00,0x6B,0xFF,0x4E,0x00,0x00, + 0x00,0x00,0x00,0xC3,0xDA,0xC3,0xDA,0xDA,0x8B,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x26,0x4E,0x33,0x19,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 +}, +//57 +{ + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x26,0x33,0x26,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0xAE,0xDA,0xC3,0xDA,0xC3,0x00,0x00,0x00,0x00, + 0x00,0x00,0xC3,0xC3,0x0C,0x00,0x33,0xDA,0xAE,0x00,0x00,0x00, + 0x00,0x40,0xFF,0x26,0x00,0x00,0x00,0x6B,0xFF,0x26,0x00,0x00, + 0x00,0x7A,0xDA,0x00,0x00,0x00,0x00,0x33,0xFF,0x7A,0x00,0x00, + 0x00,0x6B,0xDA,0x00,0x00,0x00,0x00,0x6B,0xFF,0x9C,0x00,0x00, + 0x00,0x19,0xDA,0x8B,0x00,0x00,0x33,0xDA,0xDA,0xC3,0x00,0x00, + 0x00,0x00,0x5C,0xDA,0xC3,0xC3,0xDA,0x5C,0xC3,0xC3,0x00,0x00, + 0x00,0x00,0x00,0x19,0x6B,0x6B,0x19,0x00,0xDA,0x8B,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x19,0xDA,0x5C,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7A,0xDA,0x00,0x00,0x00, + 0x00,0x00,0x26,0x00,0x00,0x00,0x5C,0xFF,0x7A,0x00,0x00,0x00, + 0x00,0x00,0x7A,0xDA,0xC3,0xDA,0xDA,0x7A,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x33,0x4E,0x33,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 +}, +//58 +{ + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x26,0xC3,0x8B,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x7A,0xFF,0xDA,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x7A,0x4E,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x19,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x4E,0xDA,0xC3,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x6B,0xFF,0xDA,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x4E,0x19,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 +}, +//59 +{ + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x4E,0xDA,0x8B,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0xAE,0xFF,0xC3,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x26,0x7A,0x26,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x33,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x7A,0xFF,0xDA,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x7A,0xFF,0xFF,0x33,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x5C,0xFF,0x26,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x9C,0xC3,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x9C,0xC3,0x26,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x26,0x00,0x00,0x00,0x00,0x00,0x00,0x00 +}, +//60 +{ + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x26,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x19,0x9C,0xDA,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x26,0x9C,0xDA,0x9C,0x26,0x00,0x00, + 0x00,0x00,0x00,0x40,0xAE,0xDA,0x9C,0x19,0x00,0x00,0x00,0x00, + 0x00,0x26,0xAE,0xFF,0xAE,0x19,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x40,0xAE,0xDA,0x9C,0x19,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x40,0xAE,0xDA,0x9C,0x19,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x40,0xAE,0xDA,0x9C,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0xAE,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 +}, +//61 +{ + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x7A,0xDA,0xDA,0xDA,0xDA,0xDA,0xDA,0xDA,0xDA,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x40,0x7A,0x7A,0x7A,0x7A,0x7A,0x7A,0x7A,0x7A,0x00,0x00, + 0x00,0x6B,0xC3,0xC3,0xC3,0xC3,0xC3,0xC3,0xC3,0xAE,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 +}, +//62 +{ + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x26,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x7A,0xC3,0x5C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x7A,0xDA,0xC3,0x5C,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x7A,0xDA,0xDA,0x7A,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x7A,0xDA,0xDA,0x7A,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x40,0xAE,0xDA,0x7A,0x00,0x00,0x00, + 0x00,0x00,0x00,0x40,0xAE,0xDA,0x7A,0x00,0x00,0x00,0x00,0x00, + 0x00,0x40,0xC3,0xDA,0x7A,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x7A,0x7A,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 +}, +//63 +{ + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x33,0x33,0x33,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x26,0xDA,0xDA,0xC3,0xDA,0xDA,0x5C,0x00,0x00,0x00, + 0x00,0x00,0x26,0x40,0x00,0x00,0x00,0x9C,0xDA,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7A,0xFF,0x26,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC3,0xAE,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0xAE,0xC3,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x9C,0xC3,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x7A,0xDA,0x0C,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0xC3,0x9C,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x7A,0x40,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0xAE,0x8B,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x26,0xFF,0xDA,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x40,0x19,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 +}, +//64 +{ + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x19,0x33,0x33,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0xAE,0xC3,0x7A,0x9C,0xDA,0x7A,0x00,0x00,0x00, + 0x00,0x00,0xC3,0x9C,0x00,0x00,0x00,0x00,0x9C,0x7A,0x00,0x00, + 0x00,0x5C,0xAE,0x00,0x00,0x33,0x33,0x26,0x0C,0xDA,0x00,0x00, + 0x00,0xAE,0x5C,0x33,0xDA,0xC3,0xDA,0xC3,0x00,0xAE,0x40,0x00, + 0x00,0xDA,0x0C,0xC3,0x7A,0x00,0x7A,0xC3,0x00,0x7A,0x7A,0x00, + 0x00,0xDA,0x33,0xDA,0x19,0x00,0x7A,0xC3,0x00,0x7A,0x7A,0x00, + 0x00,0xDA,0x33,0xDA,0x00,0x0C,0xDA,0xC3,0x00,0x9C,0x5C,0x00, + 0x00,0xDA,0x0C,0xC3,0xAE,0xC3,0xAE,0xDA,0x8B,0xDA,0x00,0x00, + 0x00,0xAE,0x40,0x26,0xAE,0x5C,0x00,0x8B,0x9C,0x19,0x00,0x00, + 0x00,0x5C,0xAE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0xAE,0x9C,0x00,0x00,0x00,0x19,0x0C,0x00,0x00,0x00, + 0x00,0x00,0x00,0xAE,0xC3,0x7A,0x9C,0xDA,0x26,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x26,0x40,0x33,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 +}, +//65 +{ + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x26,0xDA,0xAE,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x8B,0xFF,0xDA,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0xDA,0xC3,0xFF,0x5C,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x19,0xDA,0x6B,0xDA,0x9C,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x6B,0xDA,0x19,0xAE,0xDA,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0xC3,0xC3,0x00,0x5C,0xFF,0x40,0x00,0x00,0x00, + 0x00,0x00,0x00,0xDA,0x6B,0x00,0x19,0xDA,0x8B,0x00,0x00,0x00, + 0x00,0x00,0x5C,0xFF,0x26,0x00,0x00,0xC3,0xDA,0x00,0x00,0x00, + 0x00,0x00,0xAE,0xFF,0xC3,0xC3,0xC3,0xDA,0xFF,0x26,0x00,0x00, + 0x00,0x00,0xDA,0x8B,0x33,0x33,0x33,0x5C,0xFF,0x7A,0x00,0x00, + 0x00,0x40,0xFF,0x26,0x00,0x00,0x00,0x00,0xDA,0xC3,0x00,0x00, + 0x00,0x9C,0xDA,0x00,0x00,0x00,0x00,0x00,0x8B,0xDA,0x19,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 +}, +//66 +{ + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0xAE,0xDA,0xDA,0xDA,0xDA,0xAE,0x00,0x00,0x00,0x00, + 0x00,0x00,0xC3,0xDA,0x33,0x33,0x6B,0xDA,0xAE,0x00,0x00,0x00, + 0x00,0x00,0xC3,0xDA,0x00,0x00,0x00,0x8B,0xDA,0x00,0x00,0x00, + 0x00,0x00,0xC3,0xDA,0x00,0x00,0x00,0x9C,0xDA,0x00,0x00,0x00, + 0x00,0x00,0xC3,0xDA,0x00,0x00,0x33,0xDA,0x6B,0x00,0x00,0x00, + 0x00,0x00,0xC3,0xDA,0x7A,0x9C,0xDA,0x7A,0x00,0x00,0x00,0x00, + 0x00,0x00,0xC3,0xDA,0x7A,0xAE,0xDA,0xC3,0x33,0x00,0x00,0x00, + 0x00,0x00,0xC3,0xDA,0x00,0x00,0x00,0x9C,0xDA,0x00,0x00,0x00, + 0x00,0x00,0xC3,0xDA,0x00,0x00,0x00,0x33,0xFF,0x33,0x00,0x00, + 0x00,0x00,0xC3,0xDA,0x00,0x00,0x00,0x5C,0xFF,0x33,0x00,0x00, + 0x00,0x00,0xC3,0xDA,0x33,0x33,0x5C,0xDA,0xC3,0x00,0x00,0x00, + 0x00,0x00,0xAE,0xDA,0xDA,0xDA,0xDA,0x9C,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 +}, +//67 +{ + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x19,0x5C,0x5C,0x26,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x9C,0xDA,0xDA,0xDA,0xDA,0x7A,0x00,0x00, + 0x00,0x00,0x00,0xC3,0xDA,0x4E,0x00,0x00,0x19,0x40,0x00,0x00, + 0x00,0x00,0x5C,0xFF,0x6B,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0xC3,0xDA,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0xDA,0xAE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0xDA,0x7A,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0xDA,0x7A,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0xDA,0xAE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0xC3,0xDA,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x5C,0xFF,0x5C,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0xAE,0xDA,0x40,0x00,0x00,0x19,0x40,0x00,0x00, + 0x00,0x00,0x00,0x00,0x9C,0xDA,0xC3,0xC3,0xDA,0x6B,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x19,0x40,0x33,0x26,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 +}, +//68 +{ + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0xAE,0xDA,0xDA,0xDA,0xDA,0x7A,0x00,0x00,0x00,0x00, + 0x00,0x00,0xC3,0xC3,0x33,0x33,0x8B,0xDA,0xC3,0x00,0x00,0x00, + 0x00,0x00,0xC3,0xC3,0x00,0x00,0x00,0x40,0xFF,0x5C,0x00,0x00, + 0x00,0x00,0xC3,0xC3,0x00,0x00,0x00,0x00,0xDA,0xAE,0x00,0x00, + 0x00,0x00,0xC3,0xC3,0x00,0x00,0x00,0x00,0xC3,0xC3,0x00,0x00, + 0x00,0x00,0xC3,0xC3,0x00,0x00,0x00,0x00,0xC3,0xDA,0x00,0x00, + 0x00,0x00,0xC3,0xC3,0x00,0x00,0x00,0x00,0xC3,0xDA,0x00,0x00, + 0x00,0x00,0xC3,0xC3,0x00,0x00,0x00,0x00,0xC3,0xC3,0x00,0x00, + 0x00,0x00,0xC3,0xC3,0x00,0x00,0x00,0x00,0xDA,0x9C,0x00,0x00, + 0x00,0x00,0xC3,0xC3,0x00,0x00,0x00,0x6B,0xFF,0x40,0x00,0x00, + 0x00,0x00,0xC3,0xC3,0x33,0x5C,0x9C,0xFF,0x9C,0x00,0x00,0x00, + 0x00,0x00,0xAE,0xDA,0xDA,0xDA,0xDA,0x7A,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 +}, +//69 +{ + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x7A,0xDA,0xDA,0xDA,0xDA,0xDA,0xDA,0x00,0x00,0x00, + 0x00,0x00,0x7A,0xFF,0x5C,0x33,0x33,0x33,0x33,0x00,0x00,0x00, + 0x00,0x00,0x7A,0xFF,0x33,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x7A,0xFF,0x33,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x7A,0xFF,0x33,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x7A,0xFF,0xC3,0xC3,0xC3,0xC3,0x6B,0x00,0x00,0x00, + 0x00,0x00,0x7A,0xFF,0x8B,0x7A,0x7A,0x7A,0x40,0x00,0x00,0x00, + 0x00,0x00,0x7A,0xFF,0x33,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x7A,0xFF,0x33,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x7A,0xFF,0x33,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x7A,0xFF,0x5C,0x33,0x33,0x33,0x33,0x00,0x00,0x00, + 0x00,0x00,0x7A,0xDA,0xDA,0xDA,0xDA,0xDA,0xDA,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 +}, +//70 +{ + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x33,0xDA,0xDA,0xDA,0xDA,0xDA,0xDA,0x33,0x00,0x00, + 0x00,0x00,0x33,0xFF,0x5C,0x33,0x33,0x33,0x33,0x00,0x00,0x00, + 0x00,0x00,0x33,0xFF,0x33,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x33,0xFF,0x33,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x33,0xFF,0x33,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x33,0xFF,0xC3,0xC3,0xC3,0xC3,0xAE,0x00,0x00,0x00, + 0x00,0x00,0x33,0xFF,0x8B,0x7A,0x7A,0x7A,0x7A,0x00,0x00,0x00, + 0x00,0x00,0x33,0xFF,0x33,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x33,0xFF,0x33,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x33,0xFF,0x33,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x33,0xFF,0x33,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x33,0xDA,0x33,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 +}, +//71 +{ + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x19,0x5C,0x5C,0x26,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x9C,0xDA,0xDA,0xDA,0xDA,0x7A,0x00,0x00, + 0x00,0x00,0x00,0xC3,0xDA,0x4E,0x00,0x00,0x19,0x40,0x00,0x00, + 0x00,0x00,0x5C,0xFF,0x6B,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0xC3,0xDA,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0xDA,0xAE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0xDA,0x7A,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0xDA,0x7A,0x00,0x00,0x33,0xDA,0xDA,0x7A,0x00,0x00, + 0x00,0x00,0xDA,0xAE,0x00,0x00,0x00,0x5C,0xFF,0x7A,0x00,0x00, + 0x00,0x00,0xC3,0xDA,0x00,0x00,0x00,0x33,0xFF,0x7A,0x00,0x00, + 0x00,0x00,0x5C,0xFF,0x5C,0x00,0x00,0x33,0xFF,0x7A,0x00,0x00, + 0x00,0x00,0x00,0xAE,0xDA,0x40,0x00,0x33,0xFF,0x7A,0x00,0x00, + 0x00,0x00,0x00,0x00,0x9C,0xDA,0xDA,0xC3,0xFF,0x7A,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x19,0x40,0x33,0x26,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 +}, +//72 +{ + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0xDA,0x7A,0x00,0x00,0x00,0x00,0xDA,0x7A,0x00,0x00, + 0x00,0x00,0xDA,0x7A,0x00,0x00,0x00,0x00,0xDA,0x7A,0x00,0x00, + 0x00,0x00,0xDA,0x7A,0x00,0x00,0x00,0x00,0xDA,0x7A,0x00,0x00, + 0x00,0x00,0xDA,0x7A,0x00,0x00,0x00,0x00,0xDA,0x7A,0x00,0x00, + 0x00,0x00,0xDA,0x7A,0x00,0x00,0x00,0x00,0xDA,0x7A,0x00,0x00, + 0x00,0x00,0xDA,0xDA,0xC3,0xC3,0xC3,0xC3,0xFF,0x7A,0x00,0x00, + 0x00,0x00,0xDA,0x8B,0x33,0x33,0x33,0x33,0xDA,0x7A,0x00,0x00, + 0x00,0x00,0xDA,0x7A,0x00,0x00,0x00,0x00,0xDA,0x7A,0x00,0x00, + 0x00,0x00,0xDA,0x7A,0x00,0x00,0x00,0x00,0xDA,0x7A,0x00,0x00, + 0x00,0x00,0xDA,0x7A,0x00,0x00,0x00,0x00,0xDA,0x7A,0x00,0x00, + 0x00,0x00,0xDA,0x7A,0x00,0x00,0x00,0x00,0xDA,0x7A,0x00,0x00, + 0x00,0x00,0xDA,0x7A,0x00,0x00,0x00,0x00,0xDA,0x7A,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 +}, +//73 +{ + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0xAE,0xDA,0xDA,0xDA,0xDA,0xDA,0xDA,0x33,0x00,0x00, + 0x00,0x00,0x26,0x33,0x33,0xDA,0x8B,0x33,0x33,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0xDA,0x7A,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0xDA,0x7A,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0xDA,0x7A,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0xDA,0x7A,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0xDA,0x7A,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0xDA,0x7A,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0xDA,0x7A,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0xDA,0x7A,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x26,0x33,0x33,0xDA,0x8B,0x33,0x33,0x00,0x00,0x00, + 0x00,0x00,0xAE,0xDA,0xDA,0xDA,0xDA,0xDA,0xDA,0x33,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 +}, +//74 +{ + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0xDA,0xDA,0xDA,0xDA,0x7A,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x33,0x33,0x5C,0xFF,0x7A,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x33,0xFF,0x7A,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x33,0xFF,0x7A,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x33,0xFF,0x7A,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x33,0xFF,0x7A,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x33,0xFF,0x7A,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x33,0xFF,0x7A,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x33,0xFF,0x7A,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x33,0xFF,0x33,0x00,0x00,0x00, + 0x00,0x26,0x5C,0x00,0x00,0x00,0x9C,0xDA,0x00,0x00,0x00,0x00, + 0x00,0x26,0xDA,0xDA,0xC3,0xDA,0xDA,0x4E,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x33,0x4E,0x33,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 +}, +//75 +{ + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0xAE,0xAE,0x00,0x00,0x00,0x33,0xDA,0x7A,0x00,0x00, + 0x00,0x00,0xC3,0xC3,0x00,0x00,0x00,0xC3,0xAE,0x00,0x00,0x00, + 0x00,0x00,0xC3,0xC3,0x00,0x00,0x9C,0xDA,0x0C,0x00,0x00,0x00, + 0x00,0x00,0xC3,0xC3,0x00,0x6B,0xFF,0x40,0x00,0x00,0x00,0x00, + 0x00,0x00,0xC3,0xC3,0x33,0xDA,0x7A,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0xC3,0xC3,0xC3,0xC3,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0xC3,0xC3,0xC3,0xFF,0x40,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0xC3,0xC3,0x0C,0xDA,0xDA,0x0C,0x00,0x00,0x00,0x00, + 0x00,0x00,0xC3,0xC3,0x00,0x33,0xDA,0xC3,0x00,0x00,0x00,0x00, + 0x00,0x00,0xC3,0xC3,0x00,0x00,0x5C,0xFF,0x8B,0x00,0x00,0x00, + 0x00,0x00,0xC3,0xC3,0x00,0x00,0x00,0x9C,0xFF,0x5C,0x00,0x00, + 0x00,0x00,0xAE,0xAE,0x00,0x00,0x00,0x00,0xC3,0xDA,0x26,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 +}, +//76 +{ + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x33,0xDA,0x33,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x33,0xFF,0x33,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x33,0xFF,0x33,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x33,0xFF,0x33,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x33,0xFF,0x33,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x33,0xFF,0x33,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x33,0xFF,0x33,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x33,0xFF,0x33,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x33,0xFF,0x33,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x33,0xFF,0x33,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x33,0xFF,0x5C,0x33,0x33,0x33,0x33,0x00,0x00,0x00, + 0x00,0x00,0x33,0xDA,0xDA,0xDA,0xDA,0xDA,0xDA,0x33,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 +}, +//77 +{ + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x7A,0xDA,0x26,0x00,0x00,0x00,0x00,0x9C,0xDA,0x00,0x00, + 0x00,0x7A,0xFF,0x8B,0x00,0x00,0x00,0x00,0xDA,0xDA,0x00,0x00, + 0x00,0x7A,0xFF,0xDA,0x00,0x00,0x00,0x40,0xFF,0xDA,0x00,0x00, + 0x00,0x7A,0xFF,0xFF,0x26,0x00,0x00,0xAE,0xAE,0xDA,0x00,0x00, + 0x00,0x7A,0xC3,0xDA,0x8B,0x00,0x00,0xDA,0x5C,0xDA,0x00,0x00, + 0x00,0x7A,0xC3,0x9C,0xDA,0x00,0x5C,0xDA,0x33,0xDA,0x00,0x00, + 0x00,0x7A,0xC3,0x40,0xFF,0x40,0xAE,0x8B,0x33,0xDA,0x00,0x00, + 0x00,0x7A,0xC3,0x00,0xDA,0xAE,0xDA,0x26,0x33,0xDA,0x00,0x00, + 0x00,0x7A,0xC3,0x00,0x8B,0xFF,0xC3,0x00,0x33,0xDA,0x00,0x00, + 0x00,0x7A,0xC3,0x00,0x26,0xC3,0x6B,0x00,0x33,0xDA,0x00,0x00, + 0x00,0x7A,0xC3,0x00,0x00,0x00,0x00,0x00,0x33,0xDA,0x00,0x00, + 0x00,0x7A,0xAE,0x00,0x00,0x00,0x00,0x00,0x33,0xDA,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 +}, +//78 +{ + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0xDA,0x9C,0x00,0x00,0x00,0x00,0xDA,0x7A,0x00,0x00, + 0x00,0x00,0xDA,0xDA,0x26,0x00,0x00,0x00,0xDA,0x7A,0x00,0x00, + 0x00,0x00,0xDA,0xFF,0xAE,0x00,0x00,0x00,0xDA,0x7A,0x00,0x00, + 0x00,0x00,0xDA,0xC3,0xFF,0x40,0x00,0x00,0xDA,0x7A,0x00,0x00, + 0x00,0x00,0xDA,0x7A,0xC3,0xAE,0x00,0x00,0xDA,0x7A,0x00,0x00, + 0x00,0x00,0xDA,0x7A,0x40,0xFF,0x40,0x00,0xDA,0x7A,0x00,0x00, + 0x00,0x00,0xDA,0x7A,0x00,0xAE,0xC3,0x00,0xDA,0x7A,0x00,0x00, + 0x00,0x00,0xDA,0x7A,0x00,0x40,0xFF,0x5C,0xDA,0x7A,0x00,0x00, + 0x00,0x00,0xDA,0x7A,0x00,0x00,0xAE,0xDA,0xDA,0x7A,0x00,0x00, + 0x00,0x00,0xDA,0x7A,0x00,0x00,0x40,0xFF,0xFF,0x7A,0x00,0x00, + 0x00,0x00,0xDA,0x7A,0x00,0x00,0x00,0x9C,0xFF,0x7A,0x00,0x00, + 0x00,0x00,0xDA,0x7A,0x00,0x00,0x00,0x19,0xDA,0x7A,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 +}, +//79 +{ + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x19,0x33,0x33,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x8B,0xDA,0xDA,0xDA,0xC3,0x33,0x00,0x00,0x00, + 0x00,0x00,0x7A,0xFF,0x5C,0x00,0x0C,0xC3,0xC3,0x00,0x00,0x00, + 0x00,0x00,0xDA,0x9C,0x00,0x00,0x00,0x40,0xFF,0x6B,0x00,0x00, + 0x00,0x33,0xFF,0x40,0x00,0x00,0x00,0x00,0xDA,0xC3,0x00,0x00, + 0x00,0x6B,0xFF,0x26,0x00,0x00,0x00,0x00,0xC3,0xDA,0x00,0x00, + 0x00,0x7A,0xDA,0x00,0x00,0x00,0x00,0x00,0xC3,0xDA,0x00,0x00, + 0x00,0x7A,0xDA,0x00,0x00,0x00,0x00,0x00,0xC3,0xDA,0x00,0x00, + 0x00,0x6B,0xFF,0x26,0x00,0x00,0x00,0x00,0xC3,0xDA,0x00,0x00, + 0x00,0x33,0xFF,0x40,0x00,0x00,0x00,0x00,0xDA,0xC3,0x00,0x00, + 0x00,0x00,0xDA,0x9C,0x00,0x00,0x00,0x40,0xFF,0x6B,0x00,0x00, + 0x00,0x00,0x7A,0xFF,0x5C,0x00,0x0C,0xC3,0xDA,0x00,0x00,0x00, + 0x00,0x00,0x00,0x9C,0xFF,0xC3,0xDA,0xDA,0x33,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x26,0x4E,0x33,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 +}, +//80 +{ + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0xAE,0xDA,0xDA,0xDA,0xDA,0xC3,0x4E,0x00,0x00,0x00, + 0x00,0x00,0xC3,0xDA,0x33,0x33,0x5C,0xAE,0xFF,0x40,0x00,0x00, + 0x00,0x00,0xC3,0xDA,0x00,0x00,0x00,0x00,0xDA,0xAE,0x00,0x00, + 0x00,0x00,0xC3,0xDA,0x00,0x00,0x00,0x00,0xC3,0xC3,0x00,0x00, + 0x00,0x00,0xC3,0xDA,0x00,0x00,0x00,0x00,0xDA,0x9C,0x00,0x00, + 0x00,0x00,0xC3,0xDA,0x00,0x00,0x00,0x9C,0xFF,0x40,0x00,0x00, + 0x00,0x00,0xC3,0xDA,0x7A,0x9C,0xDA,0xDA,0x5C,0x00,0x00,0x00, + 0x00,0x00,0xC3,0xFF,0x9C,0x7A,0x6B,0x19,0x00,0x00,0x00,0x00, + 0x00,0x00,0xC3,0xDA,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0xC3,0xDA,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0xC3,0xDA,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0xAE,0xDA,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 +}, +//81 +{ + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x19,0x33,0x33,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x8B,0xDA,0xDA,0xDA,0xC3,0x33,0x00,0x00,0x00, + 0x00,0x00,0x7A,0xFF,0x5C,0x00,0x0C,0xC3,0xC3,0x00,0x00,0x00, + 0x00,0x00,0xDA,0x9C,0x00,0x00,0x00,0x40,0xFF,0x6B,0x00,0x00, + 0x00,0x33,0xFF,0x40,0x00,0x00,0x00,0x00,0xDA,0xC3,0x00,0x00, + 0x00,0x6B,0xFF,0x26,0x00,0x00,0x00,0x00,0xC3,0xDA,0x00,0x00, + 0x00,0x7A,0xDA,0x00,0x00,0x00,0x00,0x00,0xC3,0xDA,0x00,0x00, + 0x00,0x7A,0xDA,0x00,0x00,0x00,0x00,0x00,0xC3,0xDA,0x00,0x00, + 0x00,0x5C,0xFF,0x26,0x00,0x00,0x00,0x00,0xC3,0xDA,0x00,0x00, + 0x00,0x26,0xFF,0x40,0x00,0x00,0x00,0x00,0xDA,0xC3,0x00,0x00, + 0x00,0x00,0xC3,0x9C,0x00,0x00,0x00,0x40,0xFF,0x6B,0x00,0x00, + 0x00,0x00,0x5C,0xFF,0x5C,0x00,0x0C,0xC3,0xC3,0x00,0x00,0x00, + 0x00,0x00,0x00,0x8B,0xDA,0xC3,0xDA,0xC3,0x33,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x19,0x6B,0xDA,0x0C,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0xAE,0xC3,0x40,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xAE,0xFF,0xDA,0x6B,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x26,0x33,0x0C,0x00 +}, +//82 +{ + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0xAE,0xDA,0xDA,0xDA,0xDA,0xAE,0x26,0x00,0x00,0x00, + 0x00,0x00,0xC3,0xC3,0x33,0x33,0x5C,0xDA,0xDA,0x00,0x00,0x00, + 0x00,0x00,0xC3,0xC3,0x00,0x00,0x00,0x4E,0xFF,0x33,0x00,0x00, + 0x00,0x00,0xC3,0xC3,0x00,0x00,0x00,0x40,0xFF,0x26,0x00,0x00, + 0x00,0x00,0xC3,0xC3,0x00,0x00,0x00,0x9C,0xC3,0x00,0x00,0x00, + 0x00,0x00,0xC3,0xC3,0x33,0x33,0x9C,0xDA,0x26,0x00,0x00,0x00, + 0x00,0x00,0xC3,0xFF,0xDA,0xDA,0xDA,0x19,0x00,0x00,0x00,0x00, + 0x00,0x00,0xC3,0xC3,0x00,0x4E,0xFF,0x8B,0x00,0x00,0x00,0x00, + 0x00,0x00,0xC3,0xC3,0x00,0x00,0xAE,0xDA,0x26,0x00,0x00,0x00, + 0x00,0x00,0xC3,0xC3,0x00,0x00,0x19,0xDA,0xAE,0x00,0x00,0x00, + 0x00,0x00,0xC3,0xC3,0x00,0x00,0x00,0x7A,0xFF,0x5C,0x00,0x00, + 0x00,0x00,0xAE,0xAE,0x00,0x00,0x00,0x00,0xC3,0xDA,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 +}, +//83 +{ + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x19,0x33,0x33,0x33,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x8B,0xDA,0xDA,0xC3,0xDA,0xAE,0x00,0x00,0x00, + 0x00,0x00,0x5C,0xFF,0x5C,0x00,0x00,0x00,0x40,0x00,0x00,0x00, + 0x00,0x00,0x9C,0xDA,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x8B,0xDA,0x33,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x26,0xDA,0xDA,0x4E,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x40,0xDA,0xFF,0xAE,0x19,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x7A,0xDA,0xDA,0x5C,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x26,0xC3,0xDA,0x19,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x19,0xDA,0x7A,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xDA,0x7A,0x00,0x00, + 0x00,0x00,0x6B,0x26,0x00,0x00,0x00,0x9C,0xDA,0x19,0x00,0x00, + 0x00,0x00,0xAE,0xDA,0xDA,0xC3,0xDA,0xDA,0x5C,0x00,0x00,0x00, + 0x00,0x00,0x00,0x19,0x33,0x40,0x33,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 +}, +//84 +{ + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0xAE,0xDA,0xDA,0xDA,0xDA,0xDA,0xDA,0xDA,0xDA,0x33,0x00, + 0x00,0x26,0x33,0x33,0x33,0xDA,0x8B,0x33,0x33,0x33,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0xDA,0x7A,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0xDA,0x7A,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0xDA,0x7A,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0xDA,0x7A,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0xDA,0x7A,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0xDA,0x7A,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0xDA,0x7A,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0xDA,0x7A,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0xDA,0x7A,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0xDA,0x7A,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 +}, +//85 +{ + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0xDA,0x7A,0x00,0x00,0x00,0x00,0xDA,0x7A,0x00,0x00, + 0x00,0x00,0xDA,0x7A,0x00,0x00,0x00,0x00,0xDA,0x7A,0x00,0x00, + 0x00,0x00,0xDA,0x7A,0x00,0x00,0x00,0x00,0xDA,0x7A,0x00,0x00, + 0x00,0x00,0xDA,0x7A,0x00,0x00,0x00,0x00,0xDA,0x7A,0x00,0x00, + 0x00,0x00,0xDA,0x7A,0x00,0x00,0x00,0x00,0xDA,0x7A,0x00,0x00, + 0x00,0x00,0xDA,0x7A,0x00,0x00,0x00,0x00,0xDA,0x7A,0x00,0x00, + 0x00,0x00,0xDA,0x7A,0x00,0x00,0x00,0x00,0xDA,0x7A,0x00,0x00, + 0x00,0x00,0xDA,0x7A,0x00,0x00,0x00,0x00,0xDA,0x7A,0x00,0x00, + 0x00,0x00,0xDA,0x7A,0x00,0x00,0x00,0x00,0xDA,0x7A,0x00,0x00, + 0x00,0x00,0xDA,0xAE,0x00,0x00,0x00,0x19,0xDA,0x40,0x00,0x00, + 0x00,0x00,0x9C,0xDA,0x33,0x00,0x00,0x9C,0xDA,0x00,0x00,0x00, + 0x00,0x00,0x00,0xC3,0xDA,0xC3,0xDA,0xDA,0x33,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x33,0x4E,0x33,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 +}, +//86 +{ + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x9C,0xDA,0x19,0x00,0x00,0x00,0x00,0x6B,0xDA,0x19,0x00, + 0x00,0x40,0xFF,0x5C,0x00,0x00,0x00,0x00,0xC3,0xC3,0x00,0x00, + 0x00,0x00,0xDA,0xAE,0x00,0x00,0x00,0x00,0xDA,0x7A,0x00,0x00, + 0x00,0x00,0xAE,0xDA,0x00,0x00,0x00,0x5C,0xFF,0x26,0x00,0x00, + 0x00,0x00,0x5C,0xFF,0x5C,0x00,0x00,0xAE,0xDA,0x00,0x00,0x00, + 0x00,0x00,0x00,0xDA,0x9C,0x00,0x00,0xDA,0x8B,0x00,0x00,0x00, + 0x00,0x00,0x00,0xAE,0xDA,0x00,0x40,0xFF,0x40,0x00,0x00,0x00, + 0x00,0x00,0x00,0x5C,0xFF,0x40,0x9C,0xDA,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x19,0xDA,0x8B,0xDA,0x9C,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0xC3,0xDA,0xDA,0x40,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x6B,0xFF,0xDA,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x19,0xDA,0xAE,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 +}, +//87 +{ + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0xAE,0xAE,0x00,0x00,0xDA,0x7A,0x00,0x00,0xDA,0x33,0x00, + 0x00,0x8B,0xC3,0x00,0x33,0xFF,0xC3,0x00,0x00,0xDA,0x00,0x00, + 0x00,0x7A,0xDA,0x00,0x6B,0xDA,0xDA,0x00,0x33,0xDA,0x00,0x00, + 0x00,0x5C,0xDA,0x00,0x8B,0xAE,0xDA,0x19,0x40,0xDA,0x00,0x00, + 0x00,0x33,0xFF,0x26,0xC3,0x4E,0xDA,0x33,0x7A,0xC3,0x00,0x00, + 0x00,0x19,0xDA,0x33,0xDA,0x26,0xDA,0x7A,0x8B,0x9C,0x00,0x00, + 0x00,0x00,0xDA,0x7A,0xDA,0x00,0xAE,0xAE,0xC3,0x7A,0x00,0x00, + 0x00,0x00,0xDA,0xAE,0xC3,0x00,0x7A,0xDA,0xDA,0x6B,0x00,0x00, + 0x00,0x00,0xC3,0xDA,0xAE,0x00,0x33,0xFF,0xFF,0x33,0x00,0x00, + 0x00,0x00,0xAE,0xFF,0x7A,0x00,0x00,0xDA,0xFF,0x26,0x00,0x00, + 0x00,0x00,0x7A,0xFF,0x33,0x00,0x00,0xDA,0xDA,0x00,0x00,0x00, + 0x00,0x00,0x6B,0xDA,0x19,0x00,0x00,0xAE,0xDA,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 +}, +//88 +{ + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0xDA,0xAE,0x00,0x00,0x00,0x26,0xDA,0x7A,0x00,0x00, + 0x00,0x00,0x6B,0xFF,0x40,0x00,0x00,0xAE,0xC3,0x00,0x00,0x00, + 0x00,0x00,0x00,0xC3,0xC3,0x00,0x4E,0xFF,0x4E,0x00,0x00,0x00, + 0x00,0x00,0x00,0x5C,0xFF,0x5C,0xC3,0xAE,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0xC3,0xDA,0xDA,0x26,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x40,0xFF,0xAE,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x7A,0xFF,0xDA,0x19,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x19,0xDA,0x9C,0xDA,0x9C,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x9C,0xDA,0x00,0x9C,0xDA,0x26,0x00,0x00,0x00, + 0x00,0x00,0x40,0xFF,0x5C,0x00,0x19,0xDA,0xAE,0x00,0x00,0x00, + 0x00,0x00,0xAE,0xC3,0x00,0x00,0x00,0x7A,0xFF,0x40,0x00,0x00, + 0x00,0x5C,0xDA,0x40,0x00,0x00,0x00,0x00,0xC3,0xC3,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 +}, +//89 +{ + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x5C,0xDA,0x7A,0x00,0x00,0x00,0x00,0xAE,0xC3,0x00,0x00, + 0x00,0x00,0xAE,0xDA,0x00,0x00,0x00,0x5C,0xFF,0x40,0x00,0x00, + 0x00,0x00,0x40,0xFF,0x8B,0x00,0x00,0xC3,0xAE,0x00,0x00,0x00, + 0x00,0x00,0x00,0x9C,0xDA,0x19,0x7A,0xDA,0x26,0x00,0x00,0x00, + 0x00,0x00,0x00,0x19,0xDA,0xAE,0xDA,0x9C,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x7A,0xFF,0xDA,0x19,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0xDA,0x8B,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0xDA,0x7A,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0xDA,0x7A,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0xDA,0x7A,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0xDA,0x7A,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0xDA,0x7A,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 +}, +//90 +{ + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0xDA,0xDA,0xDA,0xDA,0xDA,0xDA,0xDA,0x7A,0x00,0x00, + 0x00,0x00,0x33,0x33,0x33,0x33,0x33,0x9C,0xFF,0x4E,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x19,0xDA,0x9C,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0xAE,0xDA,0x19,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x4E,0xFF,0x7A,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0xC3,0xC3,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x7A,0xFF,0x40,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x19,0xDA,0x9C,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0xAE,0xDA,0x19,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x4E,0xFF,0x7A,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0xC3,0xDA,0x33,0x33,0x33,0x33,0x33,0x0C,0x00,0x00, + 0x00,0x00,0xDA,0xDA,0xDA,0xDA,0xDA,0xDA,0xDA,0x7A,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 +}, +//91 +{ + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x26,0xC3,0xC3,0xC3,0xC3,0xC3,0xAE,0x00,0x00, + 0x00,0x00,0x00,0x33,0xFF,0x8B,0x7A,0x7A,0x7A,0x7A,0x00,0x00, + 0x00,0x00,0x00,0x33,0xFF,0x33,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x33,0xFF,0x33,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x33,0xFF,0x33,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x33,0xFF,0x33,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x33,0xFF,0x33,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x33,0xFF,0x33,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x33,0xFF,0x33,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x33,0xFF,0x33,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x33,0xFF,0x33,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x33,0xFF,0x33,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x33,0xFF,0x33,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x33,0xFF,0x33,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x33,0xFF,0x5C,0x33,0x33,0x33,0x33,0x00,0x00, + 0x00,0x00,0x00,0x33,0xDA,0xDA,0xDA,0xDA,0xDA,0xDA,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 +}, +//92 +{ + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x26,0x26,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x40,0xDA,0x19,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x9C,0xAE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x19,0xDA,0x4E,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x7A,0xC3,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0xC3,0x7A,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x40,0xDA,0x19,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x9C,0xAE,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x19,0xDA,0x4E,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x7A,0xDA,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC3,0x8B,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0xDA,0x26,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x9C,0xAE,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x19,0x7A,0x0C,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 +}, +//93 +{ + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x6B,0xC3,0xC3,0xC3,0xC3,0xC3,0x9C,0x00,0x00,0x00,0x00, + 0x00,0x40,0x7A,0x7A,0x7A,0x7A,0xDA,0xC3,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0xC3,0xC3,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0xC3,0xC3,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0xC3,0xC3,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0xC3,0xC3,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0xC3,0xC3,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0xC3,0xC3,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0xC3,0xC3,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0xC3,0xC3,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0xC3,0xC3,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0xC3,0xC3,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0xC3,0xC3,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0xC3,0xC3,0x00,0x00,0x00,0x00, + 0x00,0x0C,0x33,0x33,0x33,0x33,0xC3,0xC3,0x00,0x00,0x00,0x00, + 0x00,0x7A,0xDA,0xDA,0xDA,0xDA,0xDA,0xAE,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 +}, +//94 +{ + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x7A,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0xDA,0x7A,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x7A,0xDA,0xDA,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0xDA,0x5C,0xC3,0x7A,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x7A,0xC3,0x00,0x5C,0xDA,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0xDA,0x5C,0x00,0x00,0xC3,0x7A,0x00,0x00,0x00, + 0x00,0x00,0x7A,0xC3,0x00,0x00,0x00,0x5C,0xDA,0x00,0x00,0x00, + 0x00,0x00,0xDA,0x5C,0x00,0x00,0x00,0x00,0xC3,0x7A,0x00,0x00, + 0x00,0x26,0x7A,0x00,0x00,0x00,0x00,0x00,0x40,0x7A,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 +}, +//95 +{ + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x7A,0xDA,0xDA,0xDA,0xDA,0xDA,0xDA,0xDA,0xDA,0x00,0x00, + 0x00,0x0C,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 +}, +//96 +{ + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x26,0x7A,0x26,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x8B,0xDA,0x26,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x5C,0xC3,0x0C,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 +}, +//97 +{ + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x5C,0xC3,0xC3,0xAE,0x7A,0x0C,0x00,0x00, + 0x00,0x00,0x00,0xC3,0xDA,0x8B,0x7A,0x8B,0xFF,0x33,0x00,0x00, + 0x00,0x00,0x7A,0xDA,0x33,0x00,0x00,0x00,0xDA,0x33,0x00,0x00, + 0x00,0x00,0xDA,0x9C,0x00,0x00,0x00,0x00,0xDA,0x33,0x00,0x00, + 0x00,0x19,0xDA,0x7A,0x00,0x00,0x00,0x00,0xDA,0x33,0x00,0x00, + 0x00,0x33,0xFF,0x7A,0x00,0x00,0x00,0x26,0xDA,0x33,0x00,0x00, + 0x00,0x00,0xDA,0x8B,0x00,0x00,0x00,0xC3,0xFF,0x33,0x00,0x00, + 0x00,0x00,0xAE,0xDA,0x40,0x26,0xC3,0x9C,0xDA,0x33,0x00,0x00, + 0x00,0x00,0x26,0xDA,0xFF,0xDA,0x8B,0x00,0xDA,0x7A,0x00,0x00, + 0x00,0x00,0x00,0x00,0x33,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 +}, +//98 +{ + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x7A,0x40,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0xDA,0x7A,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0xDA,0x7A,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0xDA,0x7A,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0xDA,0x7A,0x00,0x9C,0xDA,0xC3,0x33,0x00,0x00,0x00, + 0x00,0x00,0xDA,0x8B,0xC3,0xAE,0x7A,0xDA,0xDA,0x19,0x00,0x00, + 0x00,0x00,0xDA,0xDA,0x9C,0x00,0x00,0x33,0xFF,0x6B,0x00,0x00, + 0x00,0x00,0xDA,0xC3,0x00,0x00,0x00,0x00,0xDA,0x7A,0x00,0x00, + 0x00,0x00,0xDA,0x7A,0x00,0x00,0x00,0x00,0xDA,0x7A,0x00,0x00, + 0x00,0x00,0xDA,0x7A,0x00,0x00,0x00,0x19,0xDA,0x6B,0x00,0x00, + 0x00,0x00,0xDA,0x7A,0x00,0x00,0x00,0x8B,0xDA,0x19,0x00,0x00, + 0x00,0x00,0xDA,0x8B,0x33,0x26,0x8B,0xFF,0x6B,0x00,0x00,0x00, + 0x00,0x00,0xDA,0xDA,0xDA,0xDA,0xDA,0x5C,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x19,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 +}, +//99 +{ + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x4E,0xC3,0xDA,0xDA,0xAE,0x40,0x00,0x00, + 0x00,0x00,0x00,0x8B,0xFF,0x9C,0x5C,0x6B,0x9C,0x7A,0x00,0x00, + 0x00,0x00,0x40,0xFF,0x7A,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x9C,0xDA,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0xC3,0xC3,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0xAE,0xDA,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x5C,0xFF,0x40,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0xC3,0xDA,0x5C,0x19,0x26,0x40,0x4E,0x00,0x00, + 0x00,0x00,0x00,0x00,0x9C,0xDA,0xDA,0xFF,0xDA,0x6B,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x33,0x33,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 +}, +//100 +{ + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7A,0x40,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xDA,0x7A,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xDA,0x7A,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xDA,0x7A,0x00,0x00, + 0x00,0x00,0x00,0x00,0x5C,0xAE,0xC3,0xAE,0xDA,0x7A,0x00,0x00, + 0x00,0x00,0x00,0x9C,0xDA,0x9C,0x7A,0x7A,0xDA,0x7A,0x00,0x00, + 0x00,0x00,0x5C,0xFF,0x40,0x00,0x00,0x00,0xDA,0x7A,0x00,0x00, + 0x00,0x00,0xC3,0xAE,0x00,0x00,0x00,0x00,0xDA,0x7A,0x00,0x00, + 0x00,0x00,0xDA,0x7A,0x00,0x00,0x00,0x00,0xDA,0x7A,0x00,0x00, + 0x00,0x00,0xDA,0x7A,0x00,0x00,0x00,0x19,0xDA,0x7A,0x00,0x00, + 0x00,0x00,0xDA,0x9C,0x00,0x00,0x00,0xAE,0xFF,0x7A,0x00,0x00, + 0x00,0x00,0xAE,0xDA,0x40,0x26,0x9C,0xAE,0xDA,0x7A,0x00,0x00, + 0x00,0x00,0x00,0xC3,0xFF,0xDA,0x9C,0x0C,0xDA,0x7A,0x00,0x00, + 0x00,0x00,0x00,0x00,0x33,0x19,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 +}, +//101 +{ + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x7A,0xDA,0xDA,0x9C,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0xC3,0xDA,0x6B,0x6B,0xDA,0xC3,0x00,0x00,0x00, + 0x00,0x00,0x7A,0xDA,0x19,0x00,0x00,0x40,0xFF,0x33,0x00,0x00, + 0x00,0x00,0xC3,0xC3,0x33,0x33,0x33,0x33,0xDA,0x7A,0x00,0x00, + 0x00,0x00,0xDA,0xDA,0xDA,0xDA,0xDA,0xDA,0xDA,0x7A,0x00,0x00, + 0x00,0x00,0xDA,0x8B,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0xAE,0xDA,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x26,0xDA,0x9C,0x19,0x00,0x19,0x6B,0x5C,0x00,0x00, + 0x00,0x00,0x00,0x33,0xC3,0xDA,0xDA,0xDA,0xAE,0x40,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x26,0x33,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 +}, +//102 +{ + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x6B,0xC3,0xAE,0x7A,0x00,0x00, + 0x00,0x00,0x00,0x00,0x19,0xDA,0xC3,0x7A,0x7A,0xAE,0x00,0x00, + 0x00,0x00,0x00,0x00,0x8B,0xDA,0x19,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0xC3,0xC3,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0xC3,0xC3,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0xAE,0xDA,0xFF,0xFF,0xDA,0xDA,0xDA,0x00,0x00,0x00, + 0x00,0x00,0x26,0x33,0xC3,0xC3,0x33,0x33,0x33,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0xC3,0xC3,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0xC3,0xC3,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0xC3,0xC3,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0xC3,0xC3,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0xC3,0xC3,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0xAE,0xAE,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 +}, +//103 +{ + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x5C,0xAE,0xC3,0xAE,0x7A,0x40,0x00,0x00, + 0x00,0x00,0x00,0x9C,0xDA,0x9C,0x7A,0x7A,0xDA,0x7A,0x00,0x00, + 0x00,0x00,0x5C,0xFF,0x40,0x00,0x00,0x00,0xDA,0x7A,0x00,0x00, + 0x00,0x00,0xC3,0xAE,0x00,0x00,0x00,0x00,0xDA,0x7A,0x00,0x00, + 0x00,0x00,0xDA,0x7A,0x00,0x00,0x00,0x00,0xDA,0x7A,0x00,0x00, + 0x00,0x00,0xDA,0x7A,0x00,0x00,0x00,0x19,0xDA,0x7A,0x00,0x00, + 0x00,0x00,0xDA,0x9C,0x00,0x00,0x00,0xAE,0xFF,0x7A,0x00,0x00, + 0x00,0x00,0xAE,0xDA,0x40,0x26,0x9C,0xAE,0xDA,0x5C,0x00,0x00, + 0x00,0x00,0x00,0xC3,0xFF,0xDA,0x9C,0x0C,0xDA,0x33,0x00,0x00, + 0x00,0x00,0x00,0x00,0x33,0x19,0x00,0x19,0xDA,0x33,0x00,0x00, + 0x00,0x00,0x5C,0x00,0x00,0x00,0x00,0x9C,0xDA,0x00,0x00,0x00, + 0x00,0x00,0xDA,0xDA,0xC3,0xC3,0xDA,0xDA,0x5C,0x00,0x00,0x00, + 0x00,0x00,0x19,0x5C,0x7A,0x7A,0x6B,0x19,0x00,0x00,0x00,0x00 +}, +//104 +{ + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x6B,0x6B,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0xC3,0xC3,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0xC3,0xC3,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0xC3,0xC3,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0xC3,0xC3,0x00,0x9C,0xDA,0xC3,0x4E,0x00,0x00,0x00, + 0x00,0x00,0xC3,0xC3,0xC3,0xAE,0x7A,0xAE,0xDA,0x00,0x00,0x00, + 0x00,0x00,0xC3,0xFF,0x9C,0x00,0x00,0x26,0xFF,0x33,0x00,0x00, + 0x00,0x00,0xC3,0xDA,0x00,0x00,0x00,0x00,0xDA,0x5C,0x00,0x00, + 0x00,0x00,0xC3,0xC3,0x00,0x00,0x00,0x00,0xDA,0x7A,0x00,0x00, + 0x00,0x00,0xC3,0xC3,0x00,0x00,0x00,0x00,0xDA,0x7A,0x00,0x00, + 0x00,0x00,0xC3,0xC3,0x00,0x00,0x00,0x00,0xDA,0x7A,0x00,0x00, + 0x00,0x00,0xC3,0xC3,0x00,0x00,0x00,0x00,0xDA,0x7A,0x00,0x00, + 0x00,0x00,0xAE,0xAE,0x00,0x00,0x00,0x00,0xDA,0x7A,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 +}, +//105 +{ + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x26,0xAE,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x6B,0xFF,0x26,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x26,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x6B,0x7A,0x7A,0x7A,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x6B,0x7A,0x8B,0xDA,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x33,0xDA,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x33,0xDA,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x33,0xDA,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x33,0xDA,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x33,0xDA,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x33,0xDA,0x33,0x33,0x0C,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x33,0xDA,0xDA,0xDA,0x7A,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 +}, +//106 +{ + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x26,0xAE,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x6B,0xFF,0x26,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x26,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x7A,0x7A,0x7A,0x7A,0x7A,0x0C,0x00,0x00,0x00, + 0x00,0x00,0x00,0x7A,0x7A,0x7A,0x8B,0xFF,0x33,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x33,0xFF,0x33,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x33,0xFF,0x33,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x33,0xFF,0x33,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x33,0xFF,0x33,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x33,0xFF,0x33,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x33,0xFF,0x33,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x33,0xDA,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x7A,0xDA,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0xAE,0xC3,0x00,0x00,0x00,0x00, + 0x00,0x00,0xAE,0xC3,0xC3,0xDA,0xDA,0x40,0x00,0x00,0x00,0x00, + 0x00,0x00,0x6B,0x8B,0xAE,0x7A,0x19,0x00,0x00,0x00,0x00,0x00 +}, +//107 +{ + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x40,0x7A,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x7A,0xDA,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x7A,0xDA,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x7A,0xDA,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x7A,0xDA,0x00,0x00,0x00,0x00,0x7A,0x5C,0x00,0x00, + 0x00,0x00,0x7A,0xDA,0x00,0x00,0x00,0xC3,0xC3,0x00,0x00,0x00, + 0x00,0x00,0x7A,0xDA,0x00,0x19,0xC3,0xC3,0x00,0x00,0x00,0x00, + 0x00,0x00,0x7A,0xDA,0x33,0xDA,0xC3,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x7A,0xDA,0xC3,0xDA,0x40,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x7A,0xDA,0x0C,0xC3,0xC3,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x7A,0xDA,0x00,0x26,0xDA,0xC3,0x00,0x00,0x00,0x00, + 0x00,0x00,0x7A,0xDA,0x00,0x00,0x33,0xDA,0xC3,0x00,0x00,0x00, + 0x00,0x00,0x7A,0xDA,0x00,0x00,0x00,0x40,0xDA,0xAE,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 +}, +//108 +{ + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x7A,0x7A,0x7A,0x7A,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0xAE,0xC3,0xDA,0xDA,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x7A,0xDA,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x7A,0xDA,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x7A,0xDA,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x7A,0xDA,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x7A,0xDA,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x7A,0xDA,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x7A,0xDA,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x7A,0xDA,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x7A,0xDA,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x7A,0xDA,0x33,0x33,0x26,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x7A,0xDA,0xDA,0xDA,0xAE,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 +}, +//109 +{ + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x40,0x6B,0x19,0xAE,0xAE,0x00,0x5C,0xDA,0x5C,0x00,0x00, + 0x00,0x7A,0xC3,0xAE,0x9C,0xFF,0x6B,0xC3,0xAE,0xDA,0x00,0x00, + 0x00,0x7A,0xFF,0x7A,0x00,0xDA,0xDA,0x19,0x33,0xDA,0x00,0x00, + 0x00,0x7A,0xDA,0x00,0x00,0xC3,0x9C,0x00,0x33,0xDA,0x00,0x00, + 0x00,0x7A,0xC3,0x00,0x00,0xC3,0x40,0x00,0x33,0xDA,0x00,0x00, + 0x00,0x7A,0xC3,0x00,0x00,0xC3,0x33,0x00,0x33,0xDA,0x00,0x00, + 0x00,0x7A,0xC3,0x00,0x00,0xC3,0x33,0x00,0x33,0xDA,0x00,0x00, + 0x00,0x7A,0xC3,0x00,0x00,0xC3,0x33,0x00,0x33,0xDA,0x00,0x00, + 0x00,0x7A,0xAE,0x00,0x00,0xAE,0x33,0x00,0x33,0xDA,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 +}, +//110 +{ + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x6B,0x6B,0x00,0x9C,0xDA,0xC3,0x4E,0x00,0x00,0x00, + 0x00,0x00,0xC3,0xC3,0xC3,0xAE,0x7A,0xAE,0xDA,0x00,0x00,0x00, + 0x00,0x00,0xC3,0xFF,0x9C,0x00,0x00,0x26,0xFF,0x33,0x00,0x00, + 0x00,0x00,0xC3,0xDA,0x00,0x00,0x00,0x00,0xDA,0x5C,0x00,0x00, + 0x00,0x00,0xC3,0xC3,0x00,0x00,0x00,0x00,0xDA,0x7A,0x00,0x00, + 0x00,0x00,0xC3,0xC3,0x00,0x00,0x00,0x00,0xDA,0x7A,0x00,0x00, + 0x00,0x00,0xC3,0xC3,0x00,0x00,0x00,0x00,0xDA,0x7A,0x00,0x00, + 0x00,0x00,0xC3,0xC3,0x00,0x00,0x00,0x00,0xDA,0x7A,0x00,0x00, + 0x00,0x00,0xAE,0xAE,0x00,0x00,0x00,0x00,0xDA,0x7A,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 +}, +//111 +{ + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x40,0xAE,0xDA,0xC3,0x7A,0x00,0x00,0x00,0x00, + 0x00,0x00,0x4E,0xFF,0x9C,0x5C,0x8B,0xDA,0xC3,0x00,0x00,0x00, + 0x00,0x00,0xC3,0xAE,0x00,0x00,0x00,0x33,0xDA,0x6B,0x00,0x00, + 0x00,0x33,0xFF,0x40,0x00,0x00,0x00,0x00,0xC3,0xC3,0x00,0x00, + 0x00,0x33,0xFF,0x33,0x00,0x00,0x00,0x00,0xC3,0xC3,0x00,0x00, + 0x00,0x33,0xFF,0x33,0x00,0x00,0x00,0x00,0xC3,0xC3,0x00,0x00, + 0x00,0x00,0xDA,0x8B,0x00,0x00,0x00,0x0C,0xDA,0x8B,0x00,0x00, + 0x00,0x00,0x7A,0xFF,0x6B,0x00,0x19,0xAE,0xDA,0x19,0x00,0x00, + 0x00,0x00,0x00,0x7A,0xDA,0xDA,0xDA,0xC3,0x33,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x33,0x26,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 +}, +//112 +{ + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x7A,0x40,0x00,0x9C,0xDA,0xC3,0x33,0x00,0x00,0x00, + 0x00,0x00,0xDA,0x8B,0xC3,0xAE,0x7A,0xDA,0xDA,0x19,0x00,0x00, + 0x00,0x00,0xDA,0xDA,0x9C,0x00,0x00,0x33,0xFF,0x6B,0x00,0x00, + 0x00,0x00,0xDA,0xC3,0x00,0x00,0x00,0x00,0xDA,0x7A,0x00,0x00, + 0x00,0x00,0xDA,0x7A,0x00,0x00,0x00,0x00,0xDA,0x7A,0x00,0x00, + 0x00,0x00,0xDA,0x7A,0x00,0x00,0x00,0x19,0xDA,0x6B,0x00,0x00, + 0x00,0x00,0xDA,0x7A,0x00,0x00,0x00,0x8B,0xDA,0x19,0x00,0x00, + 0x00,0x00,0xDA,0x8B,0x33,0x26,0x8B,0xFF,0x6B,0x00,0x00,0x00, + 0x00,0x00,0xDA,0xDA,0xDA,0xDA,0xDA,0x5C,0x00,0x00,0x00,0x00, + 0x00,0x00,0xDA,0x7A,0x00,0x19,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0xDA,0x7A,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0xDA,0x7A,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x33,0x0C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 +}, +//113 +{ + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x5C,0xAE,0xC3,0xAE,0x7A,0x40,0x00,0x00, + 0x00,0x00,0x00,0x9C,0xDA,0x9C,0x7A,0x7A,0xDA,0x7A,0x00,0x00, + 0x00,0x00,0x5C,0xFF,0x40,0x00,0x00,0x00,0xDA,0x7A,0x00,0x00, + 0x00,0x00,0xC3,0xAE,0x00,0x00,0x00,0x00,0xDA,0x7A,0x00,0x00, + 0x00,0x00,0xDA,0x7A,0x00,0x00,0x00,0x00,0xDA,0x7A,0x00,0x00, + 0x00,0x00,0xDA,0x7A,0x00,0x00,0x00,0x19,0xDA,0x7A,0x00,0x00, + 0x00,0x00,0xDA,0x9C,0x00,0x00,0x00,0xAE,0xFF,0x7A,0x00,0x00, + 0x00,0x00,0xAE,0xDA,0x40,0x26,0x9C,0xAE,0xDA,0x7A,0x00,0x00, + 0x00,0x00,0x00,0xC3,0xFF,0xDA,0x9C,0x0C,0xDA,0x7A,0x00,0x00, + 0x00,0x00,0x00,0x00,0x33,0x19,0x00,0x00,0xDA,0x7A,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xDA,0x7A,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xDA,0x7A,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x33,0x0C,0x00,0x00 +}, +//114 +{ + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x7A,0x0C,0x19,0x9C,0xDA,0xDA,0x4E,0x00,0x00, + 0x00,0x00,0x00,0xDA,0x5C,0xDA,0x9C,0x7A,0xDA,0x7A,0x00,0x00, + 0x00,0x00,0x00,0xDA,0xDA,0x5C,0x00,0x00,0xDA,0x7A,0x00,0x00, + 0x00,0x00,0x00,0xDA,0x9C,0x00,0x00,0x00,0x7A,0x40,0x00,0x00, + 0x00,0x00,0x00,0xDA,0x33,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0xDA,0x33,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0xDA,0x33,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0xDA,0x33,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0xDA,0x33,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 +}, +//115 +{ + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x4E,0xC3,0xDA,0xDA,0xC3,0x7A,0x00,0x00,0x00, + 0x00,0x00,0x19,0xDA,0xAE,0x5C,0x5C,0x7A,0x9C,0x00,0x00,0x00, + 0x00,0x00,0x7A,0xDA,0x0C,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x26,0xFF,0xC3,0x5C,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x40,0xAE,0xDA,0xDA,0x9C,0x19,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x19,0x8B,0xDA,0xDA,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x4E,0xFF,0x33,0x00,0x00, + 0x00,0x00,0x9C,0x5C,0x19,0x00,0x00,0x6B,0xFF,0x26,0x00,0x00, + 0x00,0x00,0x8B,0xDA,0xDA,0xDA,0xDA,0xDA,0x5C,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x19,0x33,0x33,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 +}, +//116 +{ + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x7A,0x0C,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0xDA,0x33,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0xDA,0x33,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0xDA,0x33,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x33,0xDA,0xDA,0xFF,0xDA,0xDA,0xDA,0xDA,0x33,0x00,0x00, + 0x00,0x00,0x33,0x33,0xDA,0x5C,0x33,0x33,0x33,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0xDA,0x33,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0xDA,0x33,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0xDA,0x33,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0xDA,0x5C,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0xC3,0xC3,0x0C,0x00,0x26,0x4E,0x00,0x00, + 0x00,0x00,0x00,0x00,0x33,0xC3,0xDA,0xDA,0xDA,0x6B,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x33,0x26,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 +}, +//117 +{ + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x7A,0x40,0x00,0x00,0x00,0x0C,0x7A,0x0C,0x00,0x00, + 0x00,0x00,0xDA,0x7A,0x00,0x00,0x00,0x33,0xFF,0x33,0x00,0x00, + 0x00,0x00,0xDA,0x7A,0x00,0x00,0x00,0x33,0xFF,0x33,0x00,0x00, + 0x00,0x00,0xDA,0x7A,0x00,0x00,0x00,0x33,0xFF,0x33,0x00,0x00, + 0x00,0x00,0xDA,0x7A,0x00,0x00,0x00,0x33,0xFF,0x33,0x00,0x00, + 0x00,0x00,0xDA,0x7A,0x00,0x00,0x00,0x40,0xFF,0x33,0x00,0x00, + 0x00,0x00,0xC3,0x8B,0x00,0x00,0x00,0xC3,0xFF,0x33,0x00,0x00, + 0x00,0x00,0x9C,0xDA,0x19,0x33,0xC3,0xC3,0xFF,0x33,0x00,0x00, + 0x00,0x00,0x26,0xDA,0xDA,0xDA,0x8B,0x33,0xDA,0x33,0x00,0x00, + 0x00,0x00,0x00,0x00,0x33,0x19,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 +}, +//118 +{ + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x4E,0x7A,0x00,0x00,0x00,0x00,0x00,0x26,0x7A,0x0C,0x00, + 0x00,0x40,0xFF,0x5C,0x00,0x00,0x00,0x00,0xAE,0xC3,0x00,0x00, + 0x00,0x00,0xC3,0xAE,0x00,0x00,0x00,0x19,0xDA,0x5C,0x00,0x00, + 0x00,0x00,0x5C,0xFF,0x26,0x00,0x00,0x8B,0xDA,0x00,0x00,0x00, + 0x00,0x00,0x00,0xDA,0x9C,0x00,0x00,0xDA,0x7A,0x00,0x00,0x00, + 0x00,0x00,0x00,0x7A,0xDA,0x19,0x5C,0xDA,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x19,0xDA,0x7A,0xC3,0x9C,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x9C,0xFF,0xDA,0x19,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x26,0xDA,0xAE,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 +}, +//119 +{ + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x6B,0x40,0x00,0x00,0x7A,0x40,0x00,0x00,0x6B,0x0C,0x00, + 0x00,0xAE,0xAE,0x00,0x26,0xFF,0xC3,0x00,0x00,0xDA,0x26,0x00, + 0x00,0x7A,0xC3,0x00,0x6B,0xAE,0xDA,0x00,0x00,0xDA,0x00,0x00, + 0x00,0x40,0xDA,0x00,0xAE,0x5C,0xDA,0x5C,0x33,0xC3,0x00,0x00, + 0x00,0x26,0xDA,0x19,0xDA,0x19,0xAE,0x9C,0x6B,0xAE,0x00,0x00, + 0x00,0x00,0xDA,0x6B,0xDA,0x00,0x6B,0xDA,0x8B,0x7A,0x00,0x00, + 0x00,0x00,0xC3,0xDA,0x9C,0x00,0x19,0xDA,0xDA,0x40,0x00,0x00, + 0x00,0x00,0xAE,0xFF,0x5C,0x00,0x00,0xC3,0xFF,0x26,0x00,0x00, + 0x00,0x00,0x7A,0xDA,0x19,0x00,0x00,0x8B,0xDA,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 +}, +//120 +{ + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x0C,0x7A,0x6B,0x00,0x00,0x00,0x26,0x7A,0x26,0x00,0x00, + 0x00,0x00,0x6B,0xFF,0x5C,0x00,0x00,0xC3,0x9C,0x00,0x00,0x00, + 0x00,0x00,0x00,0x9C,0xDA,0x33,0x9C,0xC3,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0xC3,0xDA,0xDA,0x33,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x5C,0xFF,0xAE,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0xC3,0xDA,0xFF,0x6B,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x9C,0xDA,0x0C,0x9C,0xDA,0x33,0x00,0x00,0x00, + 0x00,0x00,0x6B,0xDA,0x33,0x00,0x00,0xC3,0xDA,0x0C,0x00,0x00, + 0x00,0x26,0xDA,0x6B,0x00,0x00,0x00,0x26,0xDA,0xAE,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 +}, +//121 +{ + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x4E,0x7A,0x00,0x00,0x00,0x00,0x00,0x26,0x7A,0x0C,0x00, + 0x00,0x19,0xDA,0x7A,0x00,0x00,0x00,0x00,0x9C,0xC3,0x00,0x00, + 0x00,0x00,0x9C,0xDA,0x00,0x00,0x00,0x19,0xDA,0x5C,0x00,0x00, + 0x00,0x00,0x19,0xDA,0x7A,0x00,0x00,0x7A,0xDA,0x00,0x00,0x00, + 0x00,0x00,0x00,0x9C,0xDA,0x00,0x00,0xDA,0x8B,0x00,0x00,0x00, + 0x00,0x00,0x00,0x19,0xDA,0x7A,0x40,0xDA,0x19,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x9C,0xDA,0xC3,0xAE,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x19,0xDA,0xFF,0x40,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0xC3,0xC3,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0xDA,0x5C,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x9C,0xC3,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x9C,0xC3,0xDA,0xDA,0x33,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x6B,0x9C,0x7A,0x19,0x00,0x00,0x00,0x00,0x00,0x00,0x00 +}, +//122 +{ + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x6B,0x7A,0x7A,0x7A,0x7A,0x7A,0x7A,0x0C,0x00,0x00, + 0x00,0x00,0x6B,0x7A,0x7A,0x7A,0x7A,0xDA,0xFF,0x26,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x7A,0xFF,0x5C,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x5C,0xFF,0x8B,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x33,0xDA,0x9C,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x33,0xDA,0xC3,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0xC3,0xC3,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0xC3,0xDA,0x4E,0x33,0x33,0x33,0x33,0x0C,0x00,0x00, + 0x00,0x00,0xDA,0xDA,0xDA,0xDA,0xDA,0xDA,0xDA,0x7A,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 +}, +//123 +{ + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x6B,0xAE,0xC3,0x6B,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0xAE,0xDA,0x8B,0x7A,0x40,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0xDA,0x7A,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0xDA,0x9C,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0xAE,0xC3,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x7A,0xDA,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x9C,0xC3,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x0C,0x7A,0xAE,0xC3,0x33,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x26,0xC3,0xDA,0xAE,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x9C,0xAE,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x7A,0xDA,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x9C,0xC3,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0xC3,0x9C,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0xDA,0x7A,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0xC3,0xDA,0x5C,0x33,0x0C,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x26,0x9C,0xC3,0xDA,0x7A,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 +}, +//124 +{ + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x26,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0xC3,0x33,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0xC3,0x33,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0xC3,0x33,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0xC3,0x33,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0xC3,0x33,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0xC3,0x33,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0xC3,0x33,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0xC3,0x33,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0xC3,0x33,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0xC3,0x33,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0xC3,0x33,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0xC3,0x33,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x6B,0x0C,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 +}, +//125 +{ + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0xAE,0xC3,0x8B,0x5C,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x7A,0x7A,0x9C,0xFF,0x5C,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0xDA,0x7A,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x19,0xDA,0x7A,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x40,0xFF,0x33,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x7A,0xDA,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x40,0xDA,0x33,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x8B,0xDA,0x8B,0x7A,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x5C,0xDA,0xC3,0xAE,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x26,0xFF,0x40,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x6B,0xDA,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x33,0xDA,0x19,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x19,0xDA,0x5C,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0xDA,0x7A,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x33,0x33,0x8B,0xFF,0x6B,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0xDA,0xDA,0xC3,0x7A,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 +}, +//126 +{ + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x7A,0xC3,0x9C,0x19,0x00,0x00,0x00,0x7A,0x00,0x00, + 0x00,0x40,0xDA,0x7A,0xAE,0xDA,0x8B,0x19,0x4E,0xDA,0x00,0x00, + 0x00,0x7A,0x5C,0x00,0x00,0x40,0xAE,0xDA,0xDA,0x5C,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 +} +}; + +typedef struct +{ + CFsGraph *scr; + char *msg; + size_t msgCount; + size_t msgCountMax; + A_long x; + A_long y; + PF_Pixel8 col; + PF_Pixel16 col16; + + +} AngelWing; +//-------------------------------------------------------------------- +//#define FS_CONVERT8TO16(A) ( (((A_long)(A) * PF_MAX_CHAN16) + PF_HALF_CHAN8) / PF_MAX_CHAN8 ) + +PF_Err DispAngelStr16(AngelWing *wing,char c,A_long x,A_long y) +{ + return PF_Err_NONE; +} +//-------------------------------------------------------------------- +PF_Err DispAngelStr8(AngelWing *wing,char c,A_long x,A_long y) +{ + //STR_STARTはスペースだった + if ( ( c<=STR_START)||(c>STR_LAST) ) return PF_Err_NONE; + + A_long targetFont = c - STR_START; + A_long i,j,xx,yy; + A_long fAdr = 0; + for ( j=0; j0){ + PF_Pixel8 p = wing->col; + p.alpha = v; + wing->scr->setPixelBlend8(xx,yy,p); + wing->scr->setPixelBlend8(xx+1,yy,p); + wing->scr->setPixelBlend8(xx,yy+1,p); + wing->scr->setPixelBlend8(xx+1,yy+1,p); + } + fAdr++; + } + } + + return PF_Err_NONE; +} +//-------------------------------------------------------------------- +PF_Err DispAngel8(AngelWing *wing) +{ + if (wing == NULL) return 0xFF; + + A_long i; + for ( i=0;imsgCount;i++){ + DispAngelStr8(wing,wing->msg[i],wing->x+ i * STR_WIDTH * DRAWSCALE, wing->y); + } + + return PF_Err_NONE; +} +//-------------------------------------------------------------------- +PF_Err DispAngel(CFsGraph *scr,char *msg,A_long x, A_long y,PF_Pixel8 col) +{ + AngelWing wing; + wing.scr = scr; + wing.msg = msg; + wing.msgCount = strlen(msg); + + if(wing.msgCount<=0) return 0xFF; + + wing.x = x; + wing.y = y; + + wing.col = col; + wing.col16 = CONV8TO16(col); + + wing.msgCountMax= scr->width()/STR_WIDTH; + if (wing.msgCount>wing.msgCountMax) wing.msgCount = wing.msgCountMax; + if (scr->is8Bit()){ + return DispAngel8(&wing); + } + + return PF_Err_NONE; +} +//-------------------------------------------------------------------- diff --git a/PaperPlaneGetWeightInfo/AEDebugAngel.h b/PaperPlaneGetWeightInfo/AEDebugAngel.h new file mode 100644 index 0000000..5031032 --- /dev/null +++ b/PaperPlaneGetWeightInfo/AEDebugAngel.h @@ -0,0 +1,38 @@ +#pragma once +#ifndef AEDebugDisp_H +#define AEDebugDisp_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/FsUtils.h" +#include "../FsLibrary/FsGraphics.h" + +#define DRAWSCALE 2 + +PF_Err DispAngel(CFsGraph *scr,char *msg,A_long x, A_long y,PF_Pixel8 col); + +#endif diff --git a/PaperPlaneGetWeightInfo/Fs_Entry.h b/PaperPlaneGetWeightInfo/Fs_Entry.h new file mode 100644 index 0000000..e1fa105 --- /dev/null +++ b/PaperPlaneGetWeightInfo/Fs_Entry.h @@ -0,0 +1,227 @@ +//----------------------------------------------------------------------------------- +/* + PaperPlanePaperPlaneGetWeightInfo 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/PaperPlaneGetWeightInfo/Fs_Target.h b/PaperPlaneGetWeightInfo/Fs_Target.h new file mode 100644 index 0000000..fdcefb1 --- /dev/null +++ b/PaperPlaneGetWeightInfo/Fs_Target.h @@ -0,0 +1,83 @@ +//----------------------------------------------------------------------------------- +/* + F's Plugins for VS2010/VS2012 +*/ +//----------------------------------------------------------------------------------- + + +#pragma once +#ifndef Fs_TARGET_H +#define Fs_TARGET_H + + +//----------------------------------------------------------------------------------- +//プラグインの識別に使われる名前 +#define FS_NAME "F's PaperPlaneGetWeightInfo" + +//----------------------------------------------------------------------------------- +//プラグインの説明に使われる文字 +#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 FS_CATEGORY "F's Plugins-PaperPlane" + +//----------------------------------------------------------- +//#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 33555968 +//#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 1097 +//#define FS_OUT_FLAGS2 5193 +#else +#define FS_OUT_FLAGS2 73 +#endif + + +//----------------------------------------------------------------------------------- +#endif diff --git a/PaperPlaneGetWeightInfo/PaperPlaneGetWeightInfo.cpp b/PaperPlaneGetWeightInfo/PaperPlaneGetWeightInfo.cpp new file mode 100644 index 0000000..5266e43 --- /dev/null +++ b/PaperPlaneGetWeightInfo/PaperPlaneGetWeightInfo.cpp @@ -0,0 +1,319 @@ +//----------------------------------------------------------------------------------- +/* + F's Plugins for VS2010/VS2012 +*/ +//----------------------------------------------------------------------------------- + + +#include "PaperPlaneGetWeightInfo.h" + +#include +#include "AEDebugAngel.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); + def.flags = PF_ParamFlag_CANNOT_TIME_VARY;//これをつけるとキーフレームが撃てなくなる + PF_ADD_CHECKBOX(STR_DRAW_GRAPH, + "on", + TRUE, + 0, + ID_DRAW_GRAPH + ); + //---------------------------------------------------------------- + AEFX_CLR_STRUCT(def); + def.flags = PF_ParamFlag_CANNOT_TIME_VARY;//これをつけるとキーフレームが撃てなくなる + PF_ADD_SLIDER(STR_GLUE, //パラメータの名前 + 0, //数値入力する場合の最小値 + 25, //数値入力する場合の最大値 + 0, //スライダーの最小値 + 15, //スライダーの最大値 + 7, //デフォルトの値 + ID_GLUE + ); //---------------------------------------------------------------- + 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 +chkWeightTable (CFsAE *ae , ParamInfo *infoP) +{ + PF_Err err = PF_Err_NONE; + PF_Pixel *data = (PF_Pixel *)ae->in->data(); + + + + + A_long w = ae->in->width(); + A_long h = ae->in->height(); + A_long wt = ae->in->widthTrue(); + + A_long target = 0; + + for (A_long x = 0; x < w; x++){ + target = x; + double ww = 0; + for (A_long y = 0; y < h; y++) { + if (data[target].alpha == PF_MAX_CHAN8) { + + A_long c = (A_long)(data[target].blue & 0xF); + A_long c2 = (A_long)((data[target].blue>>4) & 0xF); + + double v = (double)data[target].green + (double)data[target].red; + + if (c == c2) { + if ((infoP->glue > 0) && (c > 1)) { + v += infoP->glue *(c - 1); + } + } + else { + if ((infoP->glue > 0) && (c > 1)) { + v += infoP->glue *(c - 1)*2; + } + } + + v /= 36; + v = v * 180/ ((788 * 300 / 25.4)*(1091 * 300 / 25.4)); + ww += v; + } + target += wt; + } + infoP->weightTable[x] = ww; + + } + + double mm = 0; + double all = 0; + infoP->weight = 0; + for (A_long x = 0; x < w; x++){ + mm += (double)x * infoP->weightTable[x]; + all += infoP->weightTable[x]; + } + infoP->center = (A_long)(mm / all + 0.5); + infoP->weight = all; + + return err; +} +//------------------------------------------------------------------------------------------------- + + +//------------------------------------------------------------------------------------------------- +static PF_Err +drawBalance (CFsAE *ae , ParamInfo *infoP) +{ + PF_Err err = PF_Err_NONE; + PF_InData *in_data; + in_data = ae->in_data; + + PF_Pixel *data = (PF_Pixel *)ae->out->data(); + A_long w = ae->out->width(); + A_long h = ae->out->height(); + A_long wt = ae->out->widthTrue(); + + + A_long ww = (A_long)(infoP->weight * 100 + 0.5); + double ww2 = (double)ww / 100; + char str[256] = { '\0' }; + PF_SPRINTF(str, "weight:%4.2fg", ww2); + + PF_Pixel p = { 255, 255, 255, 255 }; + DispAngel(ae->out, str, 30, 300, p); + + + if (infoP->drawGraph) { + PF_Pixel red = { 128, 255, 0, 0 }; + for (A_long x = 0; x < w; x++) { + A_long g = (A_long)(infoP->weightTable[x]*100000 + 0.5); + for (A_long y = 0; y < g; y++){ + PF_Pixel8 c = ae->out->getPixel8(x, y); + ae->out->setPixel8(x, y, PixelBlend8(c, red)); + } + } + } + PF_Pixel blue = { 255, 255, 0, 255 }; + ae->out->YLine8(infoP->center - 2, 0, h, blue); + ae->out->YLine8(infoP->center-1, 0, h, blue); + ae->out->YLine8(infoP->center, 0, h, blue); + ae->out->YLine8(infoP->center+1, 0, h, blue); + ae->out->YLine8(infoP->center + 2, 0, h, blue); + + + + return err; +} +//------------------------------------------------------------------------------------------------- +static PF_Err GetParams(CFsAE *ae, ParamInfo *infoP) +{ + PF_Err err = PF_Err_NONE; + + infoP->center = 50; + infoP->weight = 0; + + ERR(ae->GetCHECKBOX(ID_DRAW_GRAPH, &infoP->drawGraph)); + ERR(ae->GetADD(ID_GLUE, &infoP->glue)); + + + + + return err; +} +//------------------------------------------------------------------------------------------------- +static PF_Err + Exec (CFsAE *ae , ParamInfo *infoP) +{ + PF_Err err = PF_Err_NONE; + + infoP->width = ae->out->width(); + infoP->height = ae->out->height(); + infoP->widthTrue = ae->out->widthTrue(); + + ae->CopyInToOut(); + + infoP->tableH = ae->NewHandle(infoP->width *sizeof(double) * 2); + if (!infoP->tableH){ + err = PF_Err_INTERNAL_STRUCT_DAMAGED; + return err; + } + infoP->weightTable = *(double **)infoP->tableH; + + + switch(ae->pixelFormat()) + { + case PF_PixelFormat_ARGB128: + break; + case PF_PixelFormat_ARGB64: + break; + case PF_PixelFormat_ARGB32: + + chkWeightTable(ae, infoP); + drawBalance(ae, infoP); + break; + } + + + if (infoP->tableH != NULL){ + ae->DisposeHandle(infoP->tableH); + infoP->tableH = NULL; + } + + 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/PaperPlaneGetWeightInfo/PaperPlaneGetWeightInfo.h b/PaperPlaneGetWeightInfo/PaperPlaneGetWeightInfo.h new file mode 100644 index 0000000..2060dfc --- /dev/null +++ b/PaperPlaneGetWeightInfo/PaperPlaneGetWeightInfo.h @@ -0,0 +1,98 @@ +//----------------------------------------------------------------------------------- +/* + PaperPlaneGetWeightInfo for VS2010 +*/ +//----------------------------------------------------------------------------------- + +#pragma once +#ifndef PaperPlaneGetWeightInfo_H +#define PaperPlaneGetWeightInfo_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" + + +//ユーザーインターフェースのID +//ParamsSetup関数とRender関数のparamsパラメータのIDになる +enum { + ID_INPUT = 0, // default input layer + + ID_DRAW_GRAPH, + ID_GLUE, + ID_NUM_PARAMS +}; + +#define PILE_MAX 27 +#define BASEVALUE 240 + +//UIの表示文字列 +#define STR_DRAW_GRAPH "DrawGraph" +#define STR_GLUE "Glue" + + +//UIのパラメータ +typedef struct ParamInfo { + PF_Boolean drawGraph; + + //A_u_longlong pxCount; + double *weightTable; + PF_Handle tableH; + + A_long center; + A_long pileTable[PILE_MAX]; + + A_long glue; + double weight; + + A_long width; + A_long widthTrue; + A_long height; + +} 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 // PaperPlaneGetWeightInfo_H diff --git a/PaperPlaneGetWeightInfo/PaperPlaneGetWeightInfoPiPL.r b/PaperPlaneGetWeightInfo/PaperPlaneGetWeightInfoPiPL.r new file mode 100644 index 0000000..98b2313 --- /dev/null +++ b/PaperPlaneGetWeightInfo/PaperPlaneGetWeightInfoPiPL.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/PaperPlaneGetWeightInfo/Win/PaperPlaneGetWeightInfo.sln b/PaperPlaneGetWeightInfo/Win/PaperPlaneGetWeightInfo.sln new file mode 100644 index 0000000..b9b5eaa --- /dev/null +++ b/PaperPlaneGetWeightInfo/Win/PaperPlaneGetWeightInfo.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}") = "PaperPlaneGetWeightInfo", "PaperPlaneGetWeightInfo.vcxproj", "{831C1823-BBE0-43C7-8D28-FC3117BA16E0}" +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 + {831C1823-BBE0-43C7-8D28-FC3117BA16E0}.Debug|Win32.ActiveCfg = Debug|Win32 + {831C1823-BBE0-43C7-8D28-FC3117BA16E0}.Debug|Win32.Build.0 = Debug|Win32 + {831C1823-BBE0-43C7-8D28-FC3117BA16E0}.Debug|x64.ActiveCfg = Debug|x64 + {831C1823-BBE0-43C7-8D28-FC3117BA16E0}.Debug|x64.Build.0 = Debug|x64 + {831C1823-BBE0-43C7-8D28-FC3117BA16E0}.Release|Win32.ActiveCfg = Release|Win32 + {831C1823-BBE0-43C7-8D28-FC3117BA16E0}.Release|Win32.Build.0 = Release|Win32 + {831C1823-BBE0-43C7-8D28-FC3117BA16E0}.Release|x64.ActiveCfg = Release|x64 + {831C1823-BBE0-43C7-8D28-FC3117BA16E0}.Release|x64.Build.0 = Release|x64 + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/PaperPlaneGetWeightInfo/Win/PaperPlaneGetWeightInfo.vcxproj b/PaperPlaneGetWeightInfo/Win/PaperPlaneGetWeightInfo.vcxproj new file mode 100644 index 0000000..3fdc21f --- /dev/null +++ b/PaperPlaneGetWeightInfo/Win/PaperPlaneGetWeightInfo.vcxproj @@ -0,0 +1,594 @@ +サソ + + + + Debug + Win32 + + + Debug + x64 + + + Release-MD + Win32 + + + Release-MD + x64 + + + Release + Win32 + + + Release + x64 + + + + {B50A9D90-4F2C-42CD-A516-2CF8740F959D} + PaperPlaneGetWeightInfo + PaperPlaneGetWeightInfo + 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)_CS6_dbg + .aex + + + F's $(ProjectName)_CC2018 + + + F's $(ProjectName)_CC2018_MD + + + + _DEBUG;%(PreprocessorDefinitions) + true + true + Win32 + .\Debug/PaperPlaneGetWeightInfo.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/PaperPlaneGetWeightInfo.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/PaperPlaneGetWeightInfo.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/PaperPlaneGetWeightInfo.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/PaperPlaneGetWeightInfo.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/PaperPlaneGetWeightInfo.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/PaperPlaneGetWeightInfo/Win/PaperPlaneGetWeightInfo.vcxproj.filters b/PaperPlaneGetWeightInfo/Win/PaperPlaneGetWeightInfo.vcxproj.filters new file mode 100644 index 0000000..372e225 --- /dev/null +++ b/PaperPlaneGetWeightInfo/Win/PaperPlaneGetWeightInfo.vcxproj.filters @@ -0,0 +1,191 @@ +サソ + + + + {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 + + + 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/PaperPlaneGetWeightInfo/Win/PaperPlaneGetWeightInfoPiPL.rc b/PaperPlaneGetWeightInfo/Win/PaperPlaneGetWeightInfoPiPL.rc new file mode 100644 index 0000000..f038cdc --- /dev/null +++ b/PaperPlaneGetWeightInfo/Win/PaperPlaneGetWeightInfoPiPL.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, + 28, 0x0, + "\x1BF's PaperPlaneGetWeightInfo", + + "MIB8", + "gtac", + 0, 0x0, + 24, 0x0, + "\x16F's Plugins-PaperPlane\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, + 73L, + + "MIB8", + "ANMe", + 0, 0x0, + 28, 0x0, + "\x1BF's PaperPlaneGetWeightInfo", + + "MIB8", + 0x6165464CL, + 0L, + 4L + 0L, + + +END + diff --git a/PaperPlaneGetWeightInfo/Win/PluginSkeletonPiPL.rc b/PaperPlaneGetWeightInfo/Win/PluginSkeletonPiPL.rc new file mode 100644 index 0000000..96a4b1d --- /dev/null +++ b/PaperPlaneGetWeightInfo/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/PaperPlaneGetWeightInfo/kami.psd b/PaperPlaneGetWeightInfo/kami.psd new file mode 100644 index 0000000..d0b2ef9 Binary files /dev/null and b/PaperPlaneGetWeightInfo/kami.psd differ diff --git a/PixelReplace/Fs_Target.h b/PixelReplace/Fs_Target.h new file mode 100644 index 0000000..d370de2 --- /dev/null +++ b/PixelReplace/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 PixelReplace" +//----------------------------------------------------------------------------------- +//プラグインの説明に使われる文字 +#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/PixelReplace/PixelReplace.cpp b/PixelReplace/PixelReplace.cpp new file mode 100644 index 0000000..15d6d5e --- /dev/null +++ b/PixelReplace/PixelReplace.cpp @@ -0,0 +1,539 @@ +//----------------------------------------------------------------------------------- +/* + F's Plugins for VS2010/VS2012 +*/ +//----------------------------------------------------------------------------------- + +#include "PixelReplace.h" +#include +#include "PixelReplace_def.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; +} + + +//------------------------------------------------------------------------------------------------- +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)&&(in_data->appl_id != 'PrMr')){ + //-------------------- + + ERR(ae.GetNewEffectStreamAll()); + if (!err){ + A_Boolean hide_themB[PixelReplace_NUM_PARAMS]; + for ( A_long i=0; iflags |= PF_ParamFlag_START_COLLAPSED; + } + + } + //-------------------- + 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 ParamsSetup ( PF_InData *in_data, + PF_OutData *out_data, + PF_ParamDef *params[], + PF_LayerDef *output ) +{ + PF_Err err = PF_Err_NONE; + PF_ParamDef def; + + char num[255] = {"\0"}; + A_long i; + for (i=0; i< PR_PRM_COUNT; i++){ +#ifdef AE_OS_WIN + sprintf_s(num,"target%d",i+1); +#else + sprintf(num,"target%d",i+1); +#endif + //************************************************* + AEFX_CLR_STRUCT(def); + def.flags = PF_ParamFlag_START_COLLAPSED; // + PF_ADD_TOPIC(num, + PARAMS_IDX(i, paramsOffset_topic) + ); + //----------------- + AEFX_CLR_STRUCT(def); + PF_ADD_CHECKBOX(UI_ENABLED1,UI_ENABLED2,FALSE,0, + PARAMS_IDX(i, paramsOffset_enabled) + ); + //----------------- + AEFX_CLR_STRUCT(def); + PF_ADD_COLOR( UI_SRC_COLOR, + pr_colorDef[i%COLOR_DEF_SIZE][0], // Red + pr_colorDef[i%COLOR_DEF_SIZE][1], //Green + pr_colorDef[i%COLOR_DEF_SIZE][2], //Blue + PARAMS_IDX(i, paramsOffset_s_color) + ); + //----------------- + AEFX_CLR_STRUCT(def); + PF_ADD_COLOR( UI_REP_COLOR, + pr_colorDef[i%COLOR_DEF_SIZE][3], // Red + pr_colorDef[i%COLOR_DEF_SIZE][4], //Green + pr_colorDef[i%COLOR_DEF_SIZE][5], //Blue + PARAMS_IDX(i, paramsOffset_d_color) + ); + //----------------- + AEFX_CLR_STRUCT(def); + PF_ADD_PERCENT( UI_REP_OPACITY, 100, + PARAMS_IDX(i, paramsOffset_d_opacity) + ); + //----------------- + AEFX_CLR_STRUCT(def); + PF_END_TOPIC( + PARAMS_IDX(i, paramsOffset_topic_end) + ); + //************************************************* + } + + //---------------------------------------------------------------- + AEFX_CLR_STRUCT(def); + PF_ADD_FLOAT_SLIDER(UI_LV, //Name + 0, //VALID_MIN + 100, //VALID_MAX + 0, //SLIDER_MIN + 100, //SLIDER_MAX + 0, //CURVE_TOLERANCE + 1, //DFLT + 1, //PREC + 0, //DISP + 0, //WANT_PHASE + PixelReplace_LV + ); + + + //----------------- + AEFX_CLR_STRUCT(def); + def.flags = PF_ParamFlag_SUPERVISE | + PF_ParamFlag_CANNOT_TIME_VARY | + PF_ParamFlag_CANNOT_INTERP; + + //def.ui_flags = PF_PUI_STD_CONTROL_ONLY; + PF_ADD_POPUP(UI_POP1, + PR_PRM_COUNT, //メニューの数 + PR_PRM_COUNT, //デフォルト + UI_POP2, + PixelReplace_POP + ); + out_data->num_params = PixelReplace_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 * niP = reinterpret_cast(refcon); + + if (niP){ + for (A_long i=0; icount;i++){ + if ( compPix8Lv(*outP, niP->src[i],niP->Lv)) { + outP->alpha = niP->dst[i].alpha; + outP->red = niP->dst[i].red; + outP->green = niP->dst[i].green; + outP->blue = niP->dst[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; + + ParamInfo8 * niP = reinterpret_cast(refcon); + + if (niP){ + for (A_long i=0; icount;i++){ + if ( compPix16_8Lv(*outP, niP->src[i],niP->Lv)) { + outP->alpha = niP->dst16[i].alpha; + outP->red = niP->dst16[i].red; + outP->green = niP->dst16[i].green; + outP->blue = niP->dst16[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; + + ParamInfo8 * niP = reinterpret_cast(refcon); + + if (niP){ + for (A_long i=0; icount;i++){ + if ( compPix32_8Lv(*outP, niP->src[i],niP->Lv)) { + outP->alpha = niP->dst32[i].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, ParamInfo8 *infoP) +{ + PF_Err err = PF_Err_NONE; + + ERR(ae->GetPOPUP(PixelReplace_POP,&infoP->dispCount)); + PF_FpLong d; + ERR(ae->GetFLOAT(PixelReplace_LV,&d)); + if (!err) infoP->Lv = RoundByteFpLong(PF_MAX_CHAN8 * d/100); + + PF_Boolean flg; + A_long count =0; + for ( A_long i=0; i < infoP->dispCount;i++){ + ERR(ae->GetCHECKBOX(PARAMS_IDX(i, paramsOffset_enabled),&flg)); + if ( (!err)&&(flg == TRUE)){ + ERR(ae->GetCOLOR(PARAMS_IDX(i, paramsOffset_s_color),&infoP->src[count])); + ERR(ae->GetCOLOR(PARAMS_IDX(i, paramsOffset_d_color),&infoP->dst[count])); + PF_Fixed f; + ERR(ae->GetFIXED(PARAMS_IDX(i, paramsOffset_d_opacity),&f)); + if (!err) { + f /=100; + infoP->dst[count].alpha = RoundByteLong(PF_MAX_CHAN8 * f /(1L<<16) ); + infoP->dst16[count] =CONV8TO16(infoP->dst[count]); + infoP->dst32[count] =CONV8TO32(infoP->dst[count]); + } + if (!err) count++; + } + if (err) break; + } + infoP->count = count; + return err; +} +//------------------------------------------------------------------------------------------------- +static PF_Err + Exec (CFsAE *ae , ParamInfo8 *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; +} +//----------------------------------------------------------------------------- +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; +} +//----------------------------------------------------------------------------------- +#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(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 *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){ + 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* extra) +{ + PF_Err err = PF_Err_NONE; + + AEGP_SuiteHandler suites(in_data->pica_basicP); + + suites.ANSICallbacksSuite1()->sprintf( out_data->return_msg, + "%s", + reinterpret_cast(extra)); + + 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/PixelReplace/PixelReplace.h b/PixelReplace/PixelReplace.h new file mode 100644 index 0000000..439a3f2 --- /dev/null +++ b/PixelReplace/PixelReplace.h @@ -0,0 +1,106 @@ +//----------------------------------------------------------------------------------- +/* + F's Plugins for VS2010/VS2012 +*/ +//----------------------------------------------------------------------------------- +#pragma once +#ifndef PixelReplace_H +#define PixelReplace_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" + +//----------------------------------------------------------------------------- +//ParamsSetup用の定数 +#define PR_PRM_COUNT 24 +enum { + paramsOffset_topic =0, + paramsOffset_enabled, + paramsOffset_s_color, + paramsOffset_d_color, + paramsOffset_d_opacity, + paramsOffset_topic_end, + paramsOffset_num +}; +#define PixelReplace_INPUT 0 + +#define PixelReplace_LV (PR_PRM_COUNT * paramsOffset_num +1) +#define PixelReplace_POP (PR_PRM_COUNT * paramsOffset_num +2) +#define PixelReplace_NUM_PARAMS (PR_PRM_COUNT * paramsOffset_num +3) +#define ID_NUM_PARAMS PixelReplace_NUM_PARAMS //コーディング対策 + +#define PARAMS_IDX(I,J) ((I) *paramsOffset_num + (J) +1) +//----------------------------------------------------------------------------- +//パラメータUI用の文字列 +#define UI_TOPIC "Target" + +#define UI_ENABLED1 "Enabled" +#define UI_ENABLED2 "ON" +#define UI_SRC_COLOR "targetColor" +#define UI_REP_COLOR "replaceColor" +#define UI_REP_OPACITY "replaceOpacity" + +#define UI_LV "lebel" + +#define UI_POP1 "Disp" +#define UI_POP2 "1|2|3|4|5|6|7|8|9|10|11|12|13|14|15|16|17|18|19|20|21|22|23|24" + + +//----------------------------------------------------------------------------- +typedef struct ParamInfo8 { + PF_Pixel8 src[PR_PRM_COUNT]; + PF_Pixel8 dst[PR_PRM_COUNT]; + PF_Pixel16 dst16[PR_PRM_COUNT]; + PF_PixelFloat dst32[PR_PRM_COUNT]; + A_long count; + A_long dispCount; + A_u_char Lv; + +} ParamInfo8; + + +//----------------------------------------------------------------------------- +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 // PixelReplace_H \ No newline at end of file diff --git a/PixelReplace/PixelReplacePiPL.r b/PixelReplace/PixelReplacePiPL.r new file mode 100644 index 0000000..8e596e1 --- /dev/null +++ b/PixelReplace/PixelReplacePiPL.r @@ -0,0 +1,71 @@ +#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/PixelReplace/PixelReplace_def.h b/PixelReplace/PixelReplace_def.h new file mode 100644 index 0000000..eb729aa --- /dev/null +++ b/PixelReplace/PixelReplace_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 \ No newline at end of file diff --git a/PixelReplace/Win/PixelReplace.vcxproj b/PixelReplace/Win/PixelReplace.vcxproj new file mode 100644 index 0000000..36bb7c4 --- /dev/null +++ b/PixelReplace/Win/PixelReplace.vcxproj @@ -0,0 +1,585 @@ +サソ + + + + Debug + Win32 + + + Debug + x64 + + + Release-MD + Win32 + + + Release-MD + x64 + + + Release + Win32 + + + Release + x64 + + + + {D5748DD1-B86E-4C9A-B7D9-EB2260B7DD3B} + PixelReplace + 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 + 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/PixelReplace.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/PixelReplace.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/PixelReplace.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)_CS4.aex + true + false + $(IntDir)$(ProjectName).pdb + Windows + false + + + $(IntDir)$(ProjectName).lib + MachineX86 + + + + + _DEBUG;%(PreprocessorDefinitions) + true + true + Win32 + .\Debug/PixelReplace.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)_CS4.aex + true + false + $(IntDir)$(ProjectName).pdb + Windows + false + + + $(IntDir)$(ProjectName).lib + MachineX86 + + + + + _DEBUG;%(PreprocessorDefinitions) + true + true + X64 + .\Debug/PixelReplace.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/PixelReplace.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 + + + 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/PixelReplace/Win/PixelReplace.vcxproj.filters b/PixelReplace/Win/PixelReplace.vcxproj.filters new file mode 100644 index 0000000..70ffec1 --- /dev/null +++ b/PixelReplace/Win/PixelReplace.vcxproj.filters @@ -0,0 +1,157 @@ + + + + + {da76cd22-a38c-4434-b7d9-7c6bdbd434c6} + h;hpp;hxx;hm;inl;fi;fd + + + {50c2c59e-dbe2-4595-8c01-82942e757ba5} + + + {df57aeb4-f50a-442d-9c60-8a3e1eb3c28a} + ico;cur;bmp;dlg;rc2;rct;bin;cnt;rtf;gif;jpg;jpeg;jpe + + + {025af61e-e91f-40ba-a411-e9b69a16dcd1} + + + {337669c2-2416-4347-bc8b-d17740eed056} + + + {4ec60c15-6778-4770-b348-c5c42068b852} + + + {1d1a6c40-4c84-4a01-888d-81ce0e656dae} + + + {87bb0f8c-2d07-456c-8c94-4733c6793995} + + + + + 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\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/PixelReplace/Win/PixelReplacePiPL.rc b/PixelReplace/Win/PixelReplacePiPL.rc new file mode 100644 index 0000000..f958917 --- /dev/null +++ b/PixelReplace/Win/PixelReplacePiPL.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 PixelReplace\0\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, + 20, 0x0, + "\x10F's PixelReplace\0\0\0", + + "MIB8", + 0x6165464CL, + 0L, + 4L + 0L, + + +END + diff --git a/PixelSelector/Fs_Target.h b/PixelSelector/Fs_Target.h new file mode 100644 index 0000000..6b9266a --- /dev/null +++ b/PixelSelector/Fs_Target.h @@ -0,0 +1,80 @@ +//----------------------------------------------------------------------------------- +/* + F's Plugins for VS2010/VS2012 +*/ +//----------------------------------------------------------------------------------- + +#pragma once +#ifndef FS_TAGET_H +#define FS_TAGET_H + + +//----------------------------------------------------------------------------------- +//プラグインの識別に使われる名前 +#define FS_NAME "F's PixelSelector" +//----------------------------------------------------------------------------------- +//プラグインの説明に使われる文字 +#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/PixelSelector/PixelSelector.cpp b/PixelSelector/PixelSelector.cpp new file mode 100644 index 0000000..5bffb88 --- /dev/null +++ b/PixelSelector/PixelSelector.cpp @@ -0,0 +1,633 @@ + +//----------------------------------------------------------------------------------- +/* + F's Plugins for VS2010/VS2012 +*/ +//----------------------------------------------------------------------------------- + + +#include "PixelSelector.h" + +#include +#include "PixelSelector_def.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 +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)&&(in_data->appl_id != 'PrMr')){ + //-------------------- + + ERR(ae.GetNewEffectStreamAll()); + if (!err){ + A_Boolean hide_themB[ID_NUM_PARAMS]; + + for ( A_long i=0; iout_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 +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(UI_TOPIC, + PixelSelector_TOPIC + ); + //----------------- + AEFX_CLR_STRUCT(def); + PF_ADD_CHECKBOX(UI_REV,UI_ON,FALSE,0, + PixelSelector_REV + ); + //----------------- + AEFX_CLR_STRUCT(def); + def.flags = PF_ParamFlag_SUPERVISE | + PF_ParamFlag_CANNOT_TIME_VARY | + PF_ParamFlag_CANNOT_INTERP; + PF_ADD_CHECKBOX(UI_FILL,UI_ON,FALSE,0, + PixelSelector_FILL + ); + //----------------- + AEFX_CLR_STRUCT(def); + def.ui_flags = PF_PUI_DISABLED; + PF_ADD_COLOR( UI_FILL_COLOR, + PF_MAX_CHAN8, // Red + PF_MAX_CHAN8, //Green + PF_MAX_CHAN8, //Blue + PixelSelector_FILL_COLOR + ); + //----------------- + AEFX_CLR_STRUCT(def); + def.ui_flags = PF_PUI_DISABLED; + PF_ADD_PERCENT( UI_FILL_OPA, 100, + PixelSelector_FILL_OPACITY + ); + //----------------- + AEFX_CLR_STRUCT(def); + PF_END_TOPIC(PixelSelector_TOPIC_END); + + char num[255] = {"\0"}; + A_long i; + for (i=0; i< PS_PRM_COUNT; i++){ +#ifdef AE_OS_WIN + sprintf_s(num,"target%d",i+1); +#else + sprintf(num,"target%d",i+1); +#endif + //************************************************* + AEFX_CLR_STRUCT(def); + def.flags = PF_ParamFlag_START_COLLAPSED; // + PF_ADD_TOPIC(num, + PARAMS_IDX(i, paramsOffset_topic) + ); + //----------------- + AEFX_CLR_STRUCT(def); + PF_ADD_CHECKBOX(UI_ENABLED,UI_ON,FALSE,0, + PARAMS_IDX(i, paramsOffset_enabled) + ); + //----------------- + AEFX_CLR_STRUCT(def); + PF_ADD_COLOR( UI_SRC_COLOR, + pr_colorDef[i%COLOR_DEF_SIZE][0], // Red + pr_colorDef[i%COLOR_DEF_SIZE][1], //Green + pr_colorDef[i%COLOR_DEF_SIZE][2], //Blue + PARAMS_IDX(i, paramsOffset_s_color) + ); + //----------------- + AEFX_CLR_STRUCT(def); + PF_END_TOPIC( + PARAMS_IDX(i, paramsOffset_topic_end) + ); + //************************************************* + } + //---------------------------------------------------------------- + AEFX_CLR_STRUCT(def); + PF_ADD_FLOAT_SLIDER(UI_LV, //Name + 0, //VALID_MIN + 100, //VALID_MAX + 0, //SLIDER_MIN + 100, //SLIDER_MAX + 0, //CURVE_TOLERANCE + 1, //DFLT + 1, //PREC + 0, //DISP + 0, //WANT_PHASE + PixelSelector_LV + ); + + //----------------- + AEFX_CLR_STRUCT(def); + def.flags = PF_ParamFlag_SUPERVISE | + PF_ParamFlag_CANNOT_TIME_VARY | + PF_ParamFlag_CANNOT_INTERP; + + PF_ADD_POPUP(UI_POP1, + 24, //メニューの数 + 24, //デフォルト + UI_POP2, + PixelSelector_POP + ); + + out_data->num_params = PixelSelector_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){ + PF_Boolean b = FALSE; + PF_Pixel s; + s = *outP; + for (int i=0; i< niP->count;i++){ + PF_Pixel8 c = niP->src[i]; + if ( compPix8Lv(s,c,niP->lv)){ + b=TRUE; + break; + } + } + if ( b == niP->rev){ + outP->alpha = 0; + outP->red = PF_MAX_CHAN8; + outP->green = PF_MAX_CHAN8; + outP->blue = PF_MAX_CHAN8; + }else{ + if ( niP->fill){ + outP->alpha = niP->col.alpha; + outP->red = niP->col.red; + outP->green = niP->col.green; + outP->blue = niP->col.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_Boolean b = FALSE; + PF_Pixel s; + s = CONV16TO8(*inP); + for (int i=0; i< niP->count;i++){ + PF_Pixel8 c = niP->src[i]; + if ( compPix8Lv(s,c,niP->lv)){ + b=TRUE; + break; + } + } + if ( b == niP->rev){ + outP->alpha = 0; + outP->red = PF_MAX_CHAN16; + outP->green = PF_MAX_CHAN16; + outP->blue = PF_MAX_CHAN16; + }else{ + if ( niP->fill){ + outP->alpha = niP->col16.alpha; + outP->red = niP->col16.red; + outP->green = niP->col16.green; + outP->blue = niP->col16.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_Boolean b = FALSE; + PF_Pixel8 p = CONV32TO8(*outP); + for (int i=0; i< niP->count;i++){ + PF_Pixel8 c = niP->src[i]; + if ( compPix8Lv(p,c,niP->lv)){ + b=TRUE; + break; + } + } + if ( b == niP->rev){ + outP->alpha = 0; + outP->red = 1; + outP->green = 1; + outP->blue = 1; + }else{ + if ( niP->fill){ + outP->alpha = niP->col32.alpha; + outP->red = niP->col32.red; + outP->green = niP->col32.green; + outP->blue = niP->col32.blue; + } + } + } + + return err; +} +//------------------------------------------------------------------------------------------------- +static PF_Err GetParams(CFsAE *ae, ParamInfo *infoP) +{ + PF_Err err = PF_Err_NONE; + A_long count =0; + for (A_long i=0; i < PS_PRM_COUNT;i++){ + PF_Boolean flg; + ERR(ae->GetCHECKBOX( PARAMS_IDX(i, paramsOffset_enabled),&flg)); + if ( (!err)&&( flg == TRUE) ){ + ERR(ae->GetCOLOR(PARAMS_IDX(i, paramsOffset_s_color),&infoP->src[count])); + if ( !err) count++; + else break; + } + } + infoP->count = count; + ERR(ae->GetCHECKBOX(PixelSelector_REV,&infoP->rev)); + ERR(ae->GetCHECKBOX(PixelSelector_FILL,&infoP->fill)); + ERR(ae->GetCOLOR(PixelSelector_FILL_COLOR,&infoP->col)); + if ( !err){ + infoP->col16 = CONV8TO16(infoP->col); + infoP->col32 = CONV8TO32(infoP->col); + } + PF_Fixed f; + ERR(ae->GetFIXED(PixelSelector_FILL_OPACITY,&f)); + if (!err){ + infoP->col.alpha = (A_u_char)( ((PF_MAX_CHAN8) * f/100) >>16 ); + } + PF_FpLong d; + ERR(ae->GetFLOAT(PixelSelector_LV,&d)); + if (!err) infoP->lv = RoundByteFpLong(PF_MAX_CHAN8 * (d/100)); + + ERR(ae->GetPOPUP(PixelSelector_POP,&infoP->dispCount)); + return err; +} +//------------------------------------------------------------------------------------------------- +static PF_Err + Exec (CFsAE *ae , ParamInfo *infoP) +{ + PF_Err err = PF_Err_NONE; + + //画面をコピー + ERR(ae->CopyInToOut()); + if (infoP->count>0){ + 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){ + 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/PixelSelector/PixelSelector.h b/PixelSelector/PixelSelector.h new file mode 100644 index 0000000..6b5cfdc --- /dev/null +++ b/PixelSelector/PixelSelector.h @@ -0,0 +1,116 @@ +//----------------------------------------------------------------------------------- +/* + F's Plugins for VS2010/VS2012 +*/ +//----------------------------------------------------------------------------------- + + +#pragma once +#ifndef PixelSelector_H +#define PixelSelector_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" + +//----------------------------------------------------------------------------- +//ParamsSetup用の定数 +#define PS_PRM_COUNT 24 +enum { + paramsOffset_topic = 0, + paramsOffset_enabled, + paramsOffset_s_color, + paramsOffset_topic_end, + paramsOffset_num +}; +enum{ + PixelSelector_INPUT = 0, + PixelSelector_TOPIC, + PixelSelector_REV, + PixelSelector_FILL, + PixelSelector_FILL_COLOR, + PixelSelector_FILL_OPACITY, + PixelSelector_TOPIC_END, + PixelSelector_NUM, + +}; +#define PARAMS_IDX(I,J) (PixelSelector_NUM + (I) *paramsOffset_num + (J) ) +#define PixelSelector_LV (PixelSelector_NUM + PS_PRM_COUNT * paramsOffset_num) +#define PixelSelector_POP (PixelSelector_NUM + PS_PRM_COUNT * paramsOffset_num+1) +#define PixelSelector_NUM_PARAMS (PixelSelector_NUM + PS_PRM_COUNT * paramsOffset_num+2) +#define ID_NUM_PARAMS PixelSelector_NUM_PARAMS +//----------------------------------------------------------------------------- +//パラメータUI用の文字列 +#define UI_TOPIC "Option" +#define UI_ON "ON" +#define UI_REV "反転する" +#define UI_FILL "塗りつぶす" +#define UI_FILL_COLOR "fillColor" +#define UI_FILL_OPA "fillColor_opacity" + +#define UI_ENABLED "Enabled" +#define UI_SRC_COLOR "targetColor" + +#define UI_LV "level" + +#define UI_POP1 "Disp" +#define UI_POP2 "1|2|3|4|5|6|7|8|9|10|11|12|13|14|15|16|17|18|19|20|21|22|23|24" + +#define ERR_GET_AEPRM "すみませんエラーです。\nAfterEffects_Params error!" +#define ERR_GET_PRM "すみませんエラーです。\nPixelSelector_Params error!" +//----------------------------------------------------------------------------- + +typedef struct +{ + PF_Pixel src[PS_PRM_COUNT]; + A_long count; + PF_Boolean rev; + PF_Boolean fill; + PF_Pixel col; + PF_Pixel16 col16; + PF_PixelFloat col32; + A_long dispCount; + A_u_char lv; +} 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 // PixelSelector_H \ No newline at end of file diff --git a/PixelSelector/PixelSelectorPiPL.r b/PixelSelector/PixelSelectorPiPL.r new file mode 100644 index 0000000..8e596e1 --- /dev/null +++ b/PixelSelector/PixelSelectorPiPL.r @@ -0,0 +1,71 @@ +#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/PixelSelector/PixelSelector_def.h b/PixelSelector/PixelSelector_def.h new file mode 100644 index 0000000..eb729aa --- /dev/null +++ b/PixelSelector/PixelSelector_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 \ No newline at end of file diff --git a/PixelSelector/Win/PixelSelector.vcxproj b/PixelSelector/Win/PixelSelector.vcxproj new file mode 100644 index 0000000..5916c97 --- /dev/null +++ b/PixelSelector/Win/PixelSelector.vcxproj @@ -0,0 +1,585 @@ +サソ + + + + Debug + Win32 + + + Debug + x64 + + + Release-MD + Win32 + + + Release-MD + x64 + + + Release + Win32 + + + Release + x64 + + + + {D3252997-B98A-4685-A06A-E30C4B472F48} + PixelSelector + 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 + 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/PixelSelector.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/PixelSelector.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/PixelSelector.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)_CS4.aex + true + false + $(IntDir)$(ProjectName).pdb + Windows + false + + + $(IntDir)$(ProjectName).lib + MachineX86 + + + + + _DEBUG;%(PreprocessorDefinitions) + true + true + Win32 + .\Debug/PixelSelector.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)_CS4.aex + true + false + $(IntDir)$(ProjectName).pdb + Windows + false + + + $(IntDir)$(ProjectName).lib + MachineX86 + + + + + _DEBUG;%(PreprocessorDefinitions) + true + true + X64 + .\Debug/PixelSelector.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/PixelSelector.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 + + + 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/PixelSelector/Win/PixelSelector.vcxproj.filters b/PixelSelector/Win/PixelSelector.vcxproj.filters new file mode 100644 index 0000000..f5b0666 --- /dev/null +++ b/PixelSelector/Win/PixelSelector.vcxproj.filters @@ -0,0 +1,157 @@ + + + + + {3a66b2ba-fd36-4108-ac4f-baabcc4650df} + h;hpp;hxx;hm;inl;fi;fd + + + {3de2e083-fe63-4db5-b597-064eb89aabd7} + + + {6684945a-2251-493d-9afc-706be886bdd7} + ico;cur;bmp;dlg;rc2;rct;bin;cnt;rtf;gif;jpg;jpeg;jpe + + + {2b2edd1b-1019-4020-89bf-e1daf9a9069b} + + + {fe892e1e-40bd-4946-a88a-ceebffa897ec} + + + {4e5a6d31-275d-493e-8c02-0d9d57c46875} + + + {62f2d634-4e8d-49ae-9d49-4aec75e56a7d} + + + {0afddc26-31d8-442b-9e5f-efed5a4e36ca} + + + + + 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\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/PixelSelector/Win/PixelSelectorPiPL.rc b/PixelSelector/Win/PixelSelectorPiPL.rc new file mode 100644 index 0000000..f460347 --- /dev/null +++ b/PixelSelector/Win/PixelSelectorPiPL.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 PixelSelector\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, + 20, 0x0, + "\x11F's PixelSelector\0\0", + + "MIB8", + 0x6165464CL, + 0L, + 4L + 0L, + + +END + diff --git a/PluginSkeleton/Fs_Entry.h b/PluginSkeleton/Fs_Entry.h new file mode 100644 index 0000000..926bb6a --- /dev/null +++ b/PluginSkeleton/Fs_Entry.h @@ -0,0 +1,227 @@ +//----------------------------------------------------------------------------------- +/* + 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/PluginSkeleton/Fs_Target.h b/PluginSkeleton/Fs_Target.h new file mode 100644 index 0000000..f995677 --- /dev/null +++ b/PluginSkeleton/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 PluginSkeleton" + +//----------------------------------------------------------------------------------- +//プラグインの説明に使われる文字 +#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/PluginSkeleton/PluginSkeleton.cpp b/PluginSkeleton/PluginSkeleton.cpp new file mode 100644 index 0000000..fd315b5 --- /dev/null +++ b/PluginSkeleton/PluginSkeleton.cpp @@ -0,0 +1,520 @@ +//----------------------------------------------------------------------------------- +/* + F's Plugins for VS2010/VS2012 +*/ +//----------------------------------------------------------------------------------- + + +#include "PluginSkeleton.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_R, //Name + -2, //VALID_MIN + 2, //VALID_MAX + -1, //SLIDER_MIN + 1, //SLIDER_MAX + 1, //CURVE_TOLERANCE + 0, //DFLT + 1, //PREC + 0, //DISP + 0, //WANT_PHASE + ID_R + ); + //---------------------------------------------------------------- + AEFX_CLR_STRUCT(def); + PF_ADD_FLOAT_SLIDER(STR_G, //Name + -2, //VALID_MIN + 2, //VALID_MAX + -1, //SLIDER_MIN + 1, //SLIDER_MAX + 1, //CURVE_TOLERANCE + 0, //DFLT + 1, //PREC + 0, //DISP + 0, //WANT_PHASE + ID_G + ); + //---------------------------------------------------------------- + AEFX_CLR_STRUCT(def); + PF_ADD_FLOAT_SLIDER(STR_B, //Name + -2, //VALID_MIN + 2, //VALID_MAX + -1, //SLIDER_MIN + 1, //SLIDER_MAX + 1, //CURVE_TOLERANCE + 0, //DFLT + 1, //PREC + 0, //DISP + 0, //WANT_PHASE + ID_B + ); + //---------------------------------------------------------------- + AEFX_CLR_STRUCT(def); + PF_ADD_FLOAT_SLIDER(STR_NOISE, //Name + 0, //VALID_MIN + 1, //VALID_MAX + 0, //SLIDER_MIN + 1, //SLIDER_MAX + 0, //CURVE_TOLERANCE + 0, //DFLT + 1, //PREC + 0, //DISP + 0, //WANT_PHASE + ID_FLOAT_SLIDER + ); + //---------------------------------------------------------------- + AEFX_CLR_STRUCT(def); + def.flags = PF_ParamFlag_SUPERVISE | + PF_ParamFlag_CANNOT_TIME_VARY | + PF_ParamFlag_CANNOT_INTERP; + PF_ADD_CHECKBOX(STR_NOISE_FRAME1, + STR_NOISE_FRAME2, + TRUE, + 0, + ID_NOISE_FRAME + ); + //---------------------------------------------------------------- + AEFX_CLR_STRUCT(def); + def.ui_flags = PF_PUI_DISABLED; + PF_ADD_SLIDER( STR_NOISE_OFFSET, //パラメータの名前 + -30000, //数値入力する場合の最小値 + 30000, //数値入力する場合の最大値 + 0, //スライダーの最小値 + 300, //スライダーの最大値 + 10, //デフォルトの値 + ID_NOISE_OFFSET + ); + //---------------------------------------------------------------- + AEFX_CLR_STRUCT(def); + def.flags = PF_ParamFlag_SUPERVISE | + PF_ParamFlag_CANNOT_TIME_VARY | + PF_ParamFlag_CANNOT_INTERP; + PF_ADD_CHECKBOX(STR_HIDDEN_ON1, + STR_HIDDEN_ON2, + FALSE, + 0, + ID_HIDDEN_ON + ); + + //---------------------------------------------------------------- + AEFX_CLR_STRUCT(def); + def.flags = PF_ParamFlag_START_COLLAPSED; //これをつけると表示時に開いた状態になる + PF_ADD_TOPIC(STR_TOPIC, ID_TOPIC); + //---------------------------------------------------------------- + //色の指定 + AEFX_CLR_STRUCT(def); + def.flags = PF_ParamFlag_CANNOT_TIME_VARY;//これをつけるとキーフレームが撃てなくなる + PF_ADD_COLOR( STR_COLOR, + 0xFF, + 0xFF, + 0xFF, + ID_COLOR + ); + //---------------------------------------------------------------- + AEFX_CLR_STRUCT(def); + def.flags = PF_ParamFlag_CANNOT_INTERP; //キーフレームの自動保管を停止する + PF_ADD_SLIDER( STR_ADD_SLIDER, //パラメータの名前 + 0, //数値入力する場合の最小値 + 100, //数値入力する場合の最大値 + 0, //スライダーの最小値 + 100, //スライダーの最大値 + 10, //デフォルトの値 + ID_ADD_SLIDER + ); + //---------------------------------------------------------------- + AEFX_CLR_STRUCT(def); + //def.flags = PF_ParamFlag_CANNOT_TIME_VARY;//これをつけるとキーフレームが撃てなくなる + PF_ADD_FIXED( STR_FIXED_SLIDER, //パラメータの名前 + 0, //数値入力する場合の最小値 + 100, //数値入力する場合の最大値 + 0, //スライダーの最小値 + 100, //スライダーの最大値 + 100, //デフォルトの値 + 1, //数値表示に関するフラグ + 0, + 0, + ID_FIXED_SLIDER + ); + //---------------------------------------------------------------- + AEFX_CLR_STRUCT(def); + PF_ADD_FLOAT_SLIDER(STR_FLOAT_SLIDER, //Name + -10000, //VALID_MIN + 10000, //VALID_MAX + 0, //SLIDER_MIN + 1000, //SLIDER_MAX + 1, //CURVE_TOLERANCE + 500, //DFLT + 1, //PREC + 0, //DISP + 0, //WANT_PHASE + ID_FLOAT_SLIDER + ); + //---------------------------------------------------------------- + AEFX_CLR_STRUCT(def); + PF_ADD_CHECKBOX(STR_CHECKBOX1, + STR_CHECKBOX2, + FALSE, + 0, + ID_CHECKBOX + ); + //---------------------------------------------------------------- + //角度 + AEFX_CLR_STRUCT(def); + PF_ADD_ANGLE(STR_ANGLE,0,ID_ANGLE); + + //---------------------------------------------------------------- + //ポップアップメニュー + AEFX_CLR_STRUCT(def); + PF_ADD_POPUP( STR_POPUP, + STR_POPUP_COUNT, //メニューの数 + STR_POPUP_DFLT, //デフォルト + STR_POPUP_ITEMS, + ID_POPUP + ); + //---------------------------------------------------------------- + //位置の指定 + AEFX_CLR_STRUCT(def); + PF_ADD_POINT(STR_POINT, /*"New Center"*/ + 50, // X + 50, // Y + 0, // Flag + ID_POINT + ); + //---------------------------------------------------------------- + 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; + + try{ + CFsAE ae; + err =ae.HandleChangedParam(in_data,out_data,params,outputP,extraP,ID_NUM_PARAMS); + if((!err)&&(in_data->appl_id != 'PrMr')){ + //-------------------- + + ERR(ae.GetNewEffectStreamAll()); + if (!err){ + A_Boolean hide_themB[ID_NUM_PARAMS]; + for ( A_long i=1; iout_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); + + PF_Pixel32 c; + c = CONV8TO32(*outP); + + c.red += (PF_FpShort)niP->r; + c.green += (PF_FpShort)niP->g; + c.blue += (PF_FpShort)niP->b; + + if ( niP->noise>0){ + A_long v = (A_long)(PF_MAX_CHAN16 * niP->noise); + v = F_RAND2(-v,v); + PF_FpShort vv = (PF_FpShort)v / PF_MAX_CHAN16; + c.red += vv; + c.green += vv; + c.blue += vv; + } + + + PF_Pixel c8 = CONV32TO8(c); + outP->alpha = inP->alpha; + outP->red = c8.red; + outP->green = c8.green; + outP->blue = c8.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); + + PF_Pixel32 c; + c = CONV16TO32(*outP); + c.red += (PF_FpShort)niP->r; + c.green += (PF_FpShort)niP->g; + c.blue += (PF_FpShort)niP->b; + + if ( niP->noise>0){ + A_long v = (A_long)(PF_MAX_CHAN16 * niP->noise); + v = F_RAND2(-v,v); + PF_FpShort vv = (PF_FpShort)v / PF_MAX_CHAN16; + c.red += vv; + c.green += vv; + c.blue += vv; + } + + + PF_Pixel16 c16 = CONV32TO16(c); + outP->red = c16.red; + outP->green = c16.green; + outP->blue = c16.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); + + PF_PixelFloat c; + c.red = (PF_FpShort)(outP->red + niP->r); + c.green = (PF_FpShort)(outP->green + niP->g); + c.blue = (PF_FpShort)(outP->blue + niP->b); + + if ( niP->noise>0){ + A_long v = (A_long)(PF_MAX_CHAN16 * niP->noise); + v = F_RAND2(-v,v); + PF_FpShort vv = (PF_FpShort)v / PF_MAX_CHAN16; + c.red += vv; + c.green += vv; + c.blue += vv; + } + + outP->red = c.red; + outP->green = c.green; + outP->blue = c.blue; + + return err; +} +//------------------------------------------------------------------------------------------------- +static PF_Err GetParams(CFsAE *ae, ParamInfo *infoP) +{ + PF_Err err = PF_Err_NONE; + + ERR(ae->GetFLOAT(ID_R,&infoP->r)); + ERR(ae->GetFLOAT(ID_G,&infoP->g)); + ERR(ae->GetFLOAT(ID_B,&infoP->b)); + + ERR(ae->GetFLOAT(ID_NOISE,&infoP->noise)); + ERR(ae->GetCHECKBOX(ID_NOISE_FRAME,&infoP->noise_frame)); + ERR(ae->GetADD(ID_NOISE_OFFSET,&infoP->noise_offset)); + + + ERR(ae->GetADD(ID_ADD_SLIDER,&infoP->add)); + ERR(ae->GetANGLE(ID_ANGLE,&infoP->agl)); + ERR(ae->GetCHECKBOX(ID_CHECKBOX,&infoP->cbx)); + ERR(ae->GetFLOAT(ID_FLOAT_SLIDER,&infoP->flt)); + ERR(ae->GetFIXED(ID_FIXED_SLIDER,&infoP->fxd)); + ERR(ae->GetFIXEDPOINT(ID_POINT,&infoP->pnt)); + ERR(ae->GetPOPUP(ID_POPUP,&infoP->pop)); + return err; +} +//------------------------------------------------------------------------------------------------- +static PF_Err + Exec (CFsAE *ae , ParamInfo *infoP) +{ + PF_Err err = PF_Err_NONE; + + //画面をコピー + ERR(ae->CopyInToOut()); + + if ( (infoP->r==0)&&(infoP->g==0)&&(infoP->b==0)&&(infoP->noise<=0)) + { + return err; + } + if ( infoP->noise_frame == TRUE){ + infoP->noise_offset = 0; + F_SRAND(ae->frame()); + }else{ + F_SRAND(infoP->noise_offset); + } + 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/PluginSkeleton/PluginSkeleton.h b/PluginSkeleton/PluginSkeleton.h new file mode 100644 index 0000000..00629b4 --- /dev/null +++ b/PluginSkeleton/PluginSkeleton.h @@ -0,0 +1,134 @@ +//----------------------------------------------------------------------------------- +/* + PluginSkeleton for VS2010 +*/ +//----------------------------------------------------------------------------------- + +#pragma once +#ifndef PluginSkeleton_H +#define PluginSkeleton_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_R, + ID_G, + ID_B, + + ID_NOISE, + ID_NOISE_FRAME, + ID_NOISE_OFFSET, + + + ID_HIDDEN_ON, + + ID_TOPIC, + ID_ADD_SLIDER, + ID_FIXED_SLIDER, + ID_FLOAT_SLIDER, + ID_COLOR, + ID_CHECKBOX, + ID_ANGLE, + ID_POPUP, + ID_POINT, + ID_TOPIC_END, + + ID_NUM_PARAMS +}; + +//UIの表示文字列 +#define STR_R "R" +#define STR_G "G" +#define STR_B "B" +#define STR_NOISE "noise" +#define STR_NOISE_FRAME1 "frame rander" +#define STR_NOISE_FRAME2 "on" +#define STR_NOISE_OFFSET "noise offset" + + +#define STR_HIDDEN_ON1 "Hidden UI" +#define STR_HIDDEN_ON2 "oba-Q!" + +#define STR_TOPIC "Sample Topics" +#define STR_ADD_SLIDER "Add_Slider" +#define STR_FIXED_SLIDER "Fixed_Slider" +#define STR_FLOAT_SLIDER "Float_Slider" +#define STR_COLOR "Color" +#define STR_CHECKBOX1 "Checkbox" +#define STR_CHECKBOX2 "on" +#define STR_ANGLE "Angle" +#define STR_POPUP "Popup" +#define STR_POPUP_ITEMS "One|Two|Tree" +#define STR_POPUP_COUNT 3 +#define STR_POPUP_DFLT 1 +#define STR_POINT "Point" + + +//UIのパラメータ +typedef struct ParamInfo { + PF_FpLong r; + PF_FpLong g; + PF_FpLong b; + + PF_FpLong noise; + PF_Boolean noise_frame; + A_long noise_offset; + + A_long add; + PF_Fixed fxd; + PF_FpLong flt; + PF_Pixel col; + PF_Boolean cbx; + PF_Fixed agl; + A_long pop; + PF_FixedPoint pnt; +} 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 // PluginSkeleton_H diff --git a/PluginSkeleton/PluginSkeletonPiPL.r b/PluginSkeleton/PluginSkeletonPiPL.r new file mode 100644 index 0000000..98b2313 --- /dev/null +++ b/PluginSkeleton/PluginSkeletonPiPL.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/PluginSkeleton/Win/PluginSkeleton.sln b/PluginSkeleton/Win/PluginSkeleton.sln new file mode 100644 index 0000000..863835c --- /dev/null +++ b/PluginSkeleton/Win/PluginSkeleton.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}") = "PluginSkeleton", "PluginSkeleton.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/PluginSkeleton/Win/PluginSkeleton.vcxproj b/PluginSkeleton/Win/PluginSkeleton.vcxproj new file mode 100644 index 0000000..c30e228 --- /dev/null +++ b/PluginSkeleton/Win/PluginSkeleton.vcxproj @@ -0,0 +1,591 @@ +サソ + + + + Debug + Win32 + + + Debug + x64 + + + Release-MD + Win32 + + + Release-MD + x64 + + + Release + Win32 + + + Release + x64 + + + + {44650EE4-5B04-43C2-9D1C-B96240D4AE80} + PluginSkeleton + PluginSkeleton + 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/PluginSkeleton.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/PluginSkeleton.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/PluginSkeleton.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/PluginSkeleton.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/PluginSkeleton.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/PluginSkeleton.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/PluginSkeleton/Win/PluginSkeleton.vcxproj.filters b/PluginSkeleton/Win/PluginSkeleton.vcxproj.filters new file mode 100644 index 0000000..c9865e3 --- /dev/null +++ b/PluginSkeleton/Win/PluginSkeleton.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/PluginSkeleton/Win/PluginSkeletonPiPL.rc b/PluginSkeleton/Win/PluginSkeletonPiPL.rc new file mode 100644 index 0000000..387ca93 --- /dev/null +++ b/PluginSkeleton/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, 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, + "\x12F's PluginSkeleton\0", + + "MIB8", + 0x6165464CL, + 0L, + 4L + 0L, + + +END + diff --git a/PluginSkeleton/Win/PropertySheet.props b/PluginSkeleton/Win/PropertySheet.props new file mode 100644 index 0000000..7429103 --- /dev/null +++ b/PluginSkeleton/Win/PropertySheet.props @@ -0,0 +1,15 @@ + + + + + CC2018 + + + + + + $(AESDK) + true + + + \ No newline at end of file diff --git a/PluginSkeleton/Win/PropertySheet1.props b/PluginSkeleton/Win/PropertySheet1.props new file mode 100644 index 0000000..550f87d --- /dev/null +++ b/PluginSkeleton/Win/PropertySheet1.props @@ -0,0 +1,15 @@ + + + + + CC2018 + + + + + + $(AESED) + true + + + \ No newline at end of file diff --git a/PluginSkeleton/a b/PluginSkeleton/a new file mode 100644 index 0000000..0a8fa74 --- /dev/null +++ b/PluginSkeleton/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/Premultiply/Fs_Target.h b/Premultiply/Fs_Target.h new file mode 100644 index 0000000..25c63da --- /dev/null +++ b/Premultiply/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 Premultiply" +//----------------------------------------------------------------------------------- +//プラグインの説明に使われる文字 +#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 //こっちを有効にすると毎フレームごとに描画する +//#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/Premultiply/Premultiply.cpp b/Premultiply/Premultiply.cpp new file mode 100644 index 0000000..d2a2f29 --- /dev/null +++ b/Premultiply/Premultiply.cpp @@ -0,0 +1,351 @@ +//----------------------------------------------------------------------------------- +/* + F's Plugins for VS2010/VS2012 +*/ +//----------------------------------------------------------------------------------- + +#include "Premultiply.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_POPUP( STR_POP1, + STR_POP, //メニューの数 + STR_POP_DEF, //デフォルト + STR_POP2, + ID_MODE + ); + + //---------------------------------------------------------------- + //色の指定 + AEFX_CLR_STRUCT(def); + PF_ADD_COLOR( STR_COLOR, + 0x00, + 0x00, + 0x00, + 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, + 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_MODE,&infoP->mode)); + if ( !err){ + infoP->mode -=1; + if (infoP->mode<0) infoP->mode =0; + else if (infoP->mode>1) infoP->mode =1; + } + ERR(ae->GetCOLOR(ID_COLOR,&infoP->col)); + return err; +} +//------------------------------------------------------------------------------------------------- +static PF_Err Exec(CFsAE *ae, ParamInfo *infoP) +{ + PF_Err err = PF_Err_NONE; + ERR( ae->premultiply_color(infoP->mode,&infoP->col)); + 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()); + ParamInfo 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(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; + } + } + catch(PF_Err &thrown_err){ + err = thrown_err; + } + return err; +} + + +//------------------------------------------------------------------------------------------------- diff --git a/Premultiply/Premultiply.h b/Premultiply/Premultiply.h new file mode 100644 index 0000000..4af9a2e --- /dev/null +++ b/Premultiply/Premultiply.h @@ -0,0 +1,78 @@ +//----------------------------------------------------------------------------------- +/* + F's Plugins for VS2010/VS2012 +*/ +//----------------------------------------------------------------------------------- + +#pragma once + +#ifndef Premultiply_H +#define Premultiply_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_COLOR, + ID_NUM_PARAMS + }; + +#define STR_POP1 "mode" +#define STR_POP2 "マットからストレート|ストレートからマット" +#define STR_POP 2 +#define STR_POP_DEF 1 + +#define STR_COLOR "マットカラー" + +typedef struct ParamInfo{ + A_long mode; + PF_Pixel8 col; +} 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 // Premultiply_H diff --git a/Premultiply/PremultiplyPiPL.r b/Premultiply/PremultiplyPiPL.r new file mode 100644 index 0000000..9cbb5bb --- /dev/null +++ b/Premultiply/PremultiplyPiPL.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 + }, + +#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/Premultiply/Win/Premultiply.vcxproj b/Premultiply/Win/Premultiply.vcxproj new file mode 100644 index 0000000..8ae0073 --- /dev/null +++ b/Premultiply/Win/Premultiply.vcxproj @@ -0,0 +1,585 @@ +サソ + + + + Debug + Win32 + + + Debug + x64 + + + Release-MD + Win32 + + + Release-MD + x64 + + + Release + Win32 + + + Release + x64 + + + + {82BCECD2-399F-4286-87BA-0E6A222A98F9} + Premultiply + 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 + 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/Premultiply.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/Premultiply.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/Premultiply.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)_CS4.aex + true + false + $(IntDir)$(ProjectName).pdb + Windows + false + + + $(IntDir)$(ProjectName).lib + MachineX86 + + + + + _DEBUG;%(PreprocessorDefinitions) + true + true + Win32 + .\Debug/Premultiply.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)_CS4.aex + true + false + $(IntDir)$(ProjectName).pdb + Windows + false + + + $(IntDir)$(ProjectName).lib + MachineX86 + + + + + _DEBUG;%(PreprocessorDefinitions) + true + true + X64 + .\Debug/Premultiply.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/Premultiply.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 + 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/Premultiply/Win/Premultiply.vcxproj.filters b/Premultiply/Win/Premultiply.vcxproj.filters new file mode 100644 index 0000000..ff2246c --- /dev/null +++ b/Premultiply/Win/Premultiply.vcxproj.filters @@ -0,0 +1,154 @@ + + + + + {bc9a1790-a208-4235-a5a3-a9c721ef9c5c} + h;hpp;hxx;hm;inl;fi;fd + + + {e0d7d91b-0458-4978-868d-7b5158740f9a} + + + {abf5228f-21ee-480c-905b-34d3e5665e1f} + ico;cur;bmp;dlg;rc2;rct;bin;cnt;rtf;gif;jpg;jpeg;jpe + + + {17729534-fd3e-4cc7-b7fa-03c0f79e3c39} + + + {c4923551-1dce-4d81-a1f4-7b081145e154} + + + {5f2ea5c6-0b51-4e78-97cc-b8408ae737d8} + + + {09d2ac39-011c-4a2c-a8d2-d2fcfa326294} + + + {9669fa65-ebe0-43d2-88b3-c7d9bcc9e9c2} + + + + + 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/Premultiply/Win/PremultiplyPiPL.rc b/Premultiply/Win/PremultiplyPiPL.rc new file mode 100644 index 0000000..e789f10 --- /dev/null +++ b/Premultiply/Win/PremultiplyPiPL.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 Premultiply", + + "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, + "\x0FF's Premultiply", + + "MIB8", + 0x6165464CL, + 0L, + 4L + 0L, + + +END + diff --git a/README.md b/README.md new file mode 100644 index 0000000..a7b3cc9 --- /dev/null +++ b/README.md @@ -0,0 +1,71 @@ +# F's Plugins + +Adone After EffectsのEffectsPlugin集のソース一式です。 + +昔から趣味でコツコツと作っていたものです。 +趣味といっても僕自身日本のアニメ制作者なので業務に使ってます。 + + +# Dependency + +Visual studio 2017 Community 2017 C++ +Adobe After Effects CC 15.0 Win SDK + +SDKはCC2018を使用していますが、CS4/CS6のSDKでもbuild可能です。 + +# Setup +プロジェクト等はSDKフォルダ内のExampleフォルダ内へ配置してください。 + +こんな感じです。 + + /ADOBE AFTER EFFECTS CC 15.0 WIN SDK + └─Examples + ├─AEGP + ├─Effect + ├─F's PluginsProjects + │ ├─AlphaFix + │ ├─AlphaThreshold + │ ├─AnimatedNoise + <省略> + │ ├─PluginSkeleton + <省略> + │ ├─whiteInOut + ├─GP + ├─Headers + ├─Resources + ├─Template + ├─UI + └─Util + +# Usage + +SDKはCC2018を想定していますが、CS4/CS6及びCC2018までのSDKでビルド可能です。 + +F's PluginsProjectsフォルダを各バージョンのExamplesフォルダに移動すればできます。 + +プラットホームはCS4のみx86(Win32)で、それ以降はx64になります。 + +構成でPelease/Relese-MDとありますが、ランタイムライブラリのスイッチ(/MT/MD)が違うものです。それ以外は同じです。 + +PluginのBinaryはoutAEXもしくはoutAEX_MDに書き出されます。 + +PluginのBinaryはAfter EffectsのPlug-insへコピーしてください。 + +例) +"C:\Program Files\Adobe\Adobe After Effects CC 2018\Support Files\Plug-ins" + + +# License + +世間一般で言われているフリーソフトと思ってください。 + +# Authors + +bry-ful (Hiroshi Furuhashi) http://bryful.yuzu.bz/ + +bryful@twitter + +bryful@gmail.com + +# References + diff --git a/RGBAControl/Fs_Target.h b/RGBAControl/Fs_Target.h new file mode 100644 index 0000000..5b4af23 --- /dev/null +++ b/RGBAControl/Fs_Target.h @@ -0,0 +1,80 @@ +//----------------------------------------------------------------------------------- +/* + F's Plugins for VS2010/VS2012 +*/ +//----------------------------------------------------------------------------------- + +#pragma once +#ifndef FS_TAGET_H +#define FS_TAGET_H + + +//----------------------------------------------------------------------------------- +//プラグインの識別に使われる名前 +#define FS_NAME "F's RGBAControl" +//----------------------------------------------------------------------------------- +//プラグインの説明に使われる文字 +#define FS_DESCRIPTION "RGB個別の明るさ調整" + +//----------------------------------------------------------------------------------- +//プラグインが表示されるメニュー名 +#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/RGBAControl/RGBAControl.cpp b/RGBAControl/RGBAControl.cpp new file mode 100644 index 0000000..531b949 --- /dev/null +++ b/RGBAControl/RGBAControl.cpp @@ -0,0 +1,517 @@ +//----------------------------------------------------------------------------------- +/* + F's Plugins for VS2010/VS2012 +*/ +//----------------------------------------------------------------------------------- +#include "RGBAControl.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_FIXED( STR_RED, //パラメータの名前 + -100, //数値入力する場合の最小値 + 100, //数値入力する場合の最大値 + -100, //スライダーの最小値 + 100, //スライダーの最大値 + 0, //デフォルトの値 + 1, //数値表示に関するフラグ + 0, + 0, + ID_RED_FIXED + ); + //---------------------------------------------------------------- + AEFX_CLR_STRUCT(def); + PF_ADD_FIXED( STR_GREEN, //パラメータの名前 + -100, //数値入力する場合の最小値 + 100, //数値入力する場合の最大値 + -100, //スライダーの最小値 + 100, //スライダーの最大値 + 0, //デフォルトの値 + 1, //数値表示に関するフラグ + 0, + 0, + ID_GREEN_FIXED + ); + //---------------------------------------------------------------- + AEFX_CLR_STRUCT(def); + PF_ADD_FIXED( STR_BLUE, //パラメータの名前 + -100, //数値入力する場合の最小値 + 100, //数値入力する場合の最大値 + -100, //スライダーの最小値 + 100, //スライダーの最大値 + 0, //デフォルトの値 + 1, //数値表示に関するフラグ + 0, + 0, + ID_BLUE_FIXED + ); + //---------------------------------------------------------------- + AEFX_CLR_STRUCT(def); + PF_ADD_FIXED( STR_ALPHA, //パラメータの名前 + -100, //数値入力する場合の最小値 + 100, //数値入力する場合の最大値 + -100, //スライダーの最小値 + 100, //スライダーの最大値 + 0, //デフォルトの値 + 1, //数値表示に関するフラグ + 0, + 0, + ID_ALPHA_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; + 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 * niP = reinterpret_cast(refcon); + + if (niP){ + if ( niP->alpha ==0) { + outP->alpha = inP->alpha; + }else if ( niP->alpha <0){ + outP->alpha = RoundByteFpShort((PF_FpShort)inP->alpha + (PF_FpShort)inP->alpha * niP->alpha); + }else{ + outP->alpha = RoundByteFpShort( (PF_FpShort)inP->alpha + (PF_FpShort)(PF_MAX_CHAN8 - inP->alpha) * niP->alpha); + } + + if ( niP->green ==0) { + outP->green = inP->green; + }else if ( niP->green <0){ + outP->green = RoundByteFpShort((PF_FpShort)inP->green + (PF_FpShort)inP->green * niP->green); + }else{ + outP->green = RoundByteFpShort( (PF_FpShort)inP->green + (PF_FpShort)(PF_MAX_CHAN8 - inP->green) * niP->green); + } + if ( niP->blue ==0) { outP->blue = inP->blue;} + else if ( niP->blue <0){ + outP->blue = RoundByteFpShort((PF_FpShort)inP->blue + (PF_FpShort)inP->blue * niP->blue); + }else{ + outP->blue = RoundByteFpShort( (PF_FpShort)inP->blue + (PF_FpShort)(PF_MAX_CHAN8 - inP->blue) * niP->blue); + } + if ( niP->red ==0) { outP->red = inP->red;} + else if ( niP->red <0){ + outP->red = RoundByteFpShort((PF_FpShort)inP->red + (PF_FpShort)inP->red * niP->red); + }else{ + outP->red = RoundByteFpShort( (PF_FpShort)inP->red + (PF_FpShort)(PF_MAX_CHAN8 - inP->red) * niP->red); + } + } + + 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){ + if ( niP->alpha ==0) {outP->alpha = inP->alpha;} + else if ( niP->alpha <0){ + outP->alpha = RoundShortFpLong((PF_FpShort)inP->alpha + (PF_FpShort)inP->alpha * niP->alpha); + }else{ + outP->alpha = RoundShortFpLong( (PF_FpShort)inP->alpha + (PF_FpShort)(PF_MAX_CHAN16 - inP->alpha) * niP->alpha); + } + + if ( niP->green ==0) { outP->green = inP->green;} + else if ( niP->green <0){ + outP->green = RoundShortFpLong((PF_FpShort)inP->green + (PF_FpShort)inP->green * niP->green); + }else{ + outP->green = RoundShortFpLong( (PF_FpShort)inP->green + (PF_FpShort)(PF_MAX_CHAN16 - inP->green) * niP->green); + } + if ( niP->blue ==0) { outP->blue = inP->blue;} + else if ( niP->blue <0){ + outP->blue = RoundShortFpLong((PF_FpShort)inP->blue + (PF_FpShort)inP->blue * niP->blue); + }else{ + outP->blue = RoundShortFpLong( (PF_FpShort)inP->blue + (PF_FpShort)(PF_MAX_CHAN16 - inP->blue) * niP->blue); + } + if ( niP->red ==0) { outP->red = inP->red;} + else if ( niP->red <0){ + outP->red = RoundShortFpLong((PF_FpShort)inP->red + (PF_FpShort)inP->red * niP->red); + }else{ + outP->red = RoundShortFpLong( (PF_FpShort)inP->red + (PF_FpShort)(PF_MAX_CHAN16 - inP->red) * niP->red); + } + } + + 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){ + if ( niP->alpha ==0) {outP->alpha = inP->alpha;} + else if ( niP->alpha <0){ + outP->alpha = RoundFpShort((PF_FpShort)inP->alpha + (PF_FpShort)inP->alpha * niP->alpha); + }else{ + outP->alpha = RoundFpShort( (PF_FpShort)inP->alpha + (PF_FpShort)((PF_FpShort)1 - inP->alpha) * niP->alpha); + } + + if ( niP->green ==0) { outP->green = inP->green;} + else if ( niP->green <0){ + outP->green = RoundFpShort((PF_FpShort)inP->green + (PF_FpShort)inP->green * niP->green); + }else{ + outP->green = RoundFpShort( (PF_FpShort)inP->green + (PF_FpShort)((PF_FpShort)1 - inP->green) * niP->green); + } + if ( niP->blue ==0) { outP->blue = inP->blue;} + else if ( niP->blue <0){ + outP->blue = RoundFpShort((PF_FpShort)inP->blue + (PF_FpShort)inP->blue * niP->blue); + }else{ + outP->blue = RoundFpShort( (PF_FpShort)inP->blue + (PF_FpShort)((PF_FpShort)1 - inP->blue) * niP->blue); + } + if ( niP->red ==0) { outP->red = inP->red;} + else if ( niP->red <0){ + outP->red = RoundFpShort((PF_FpShort)inP->red + (PF_FpShort)inP->red * niP->red); + }else{ + outP->red = RoundFpShort( (PF_FpShort)inP->red + (PF_FpShort)((PF_FpShort)1 - inP->red) * niP->red); + } + } + + return err; +} +//------------------------------------------------------------------------------------------------- +static PF_Err GetParams(CFsAE *ae, ParamInfo *infoP) +{ + PF_Err err = PF_Err_NONE; + + PF_Fixed f; + ERR(ae->GetFIXED(ID_ALPHA_FIXED, &f)); + if (!err) infoP->alpha = (PF_FpShort)f / (PF_FpShort)(100L<<16); + ERR(ae->GetFIXED(ID_RED_FIXED, &f)); + if (!err) infoP->red = (PF_FpShort)f / (PF_FpShort)(100L<<16); + ERR(ae->GetFIXED(ID_GREEN_FIXED, &f)); + if (!err) infoP->green = (PF_FpShort)f / (PF_FpShort)(100L<<16); + ERR(ae->GetFIXED(ID_BLUE_FIXED, &f)); + if (!err) infoP->blue = (PF_FpShort)f / (PF_FpShort)(100L<<16); + + return err; +} +//------------------------------------------------------------------------------------------------- +static PF_Err + Exec (CFsAE *ae , ParamInfo *infoP) +{ + PF_Err err = PF_Err_NONE; + + if ((infoP->alpha ==0)&&(infoP->red==0)&&(infoP->green ==0)&&(infoP->blue ==0)) { + ERR(ae->CopyInToOut()); + }else{ + 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 *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/RGBAControl/RGBAControl.h b/RGBAControl/RGBAControl.h new file mode 100644 index 0000000..1907dac --- /dev/null +++ b/RGBAControl/RGBAControl.h @@ -0,0 +1,82 @@ +//----------------------------------------------------------------------------------- +/* + F's Plugins for VS2010/VS2012 +*/ +//----------------------------------------------------------------------------------- + +#pragma once +#ifndef RGBAControl_H +#define RGBAControl_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_RED_FIXED, //PF_Fixed(long) + ID_GREEN_FIXED, //PF_Fixed(long) + ID_BLUE_FIXED, //PF_Fixed(long) + ID_ALPHA_FIXED, //PF_Fixed(long) + ID_NUM_PARAMS +}; + +#define STR_RED "Red(%)" +#define STR_GREEN "Green(%)" +#define STR_BLUE "Blue(%)" +#define STR_ALPHA "Alpha(%)" + +//AE上のパラメータは -100 〜 100の値を取るが +//内部では -1 〜 1の値とする +typedef struct ParamInfo{ + PF_FpShort red; + PF_FpShort green; + PF_FpShort blue; + PF_FpShort alpha; +} 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 // RGBAControl_H diff --git a/RGBAControl/RGBAControlPiPL.r b/RGBAControl/RGBAControlPiPL.r new file mode 100644 index 0000000..fc1e3ad --- /dev/null +++ b/RGBAControl/RGBAControlPiPL.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 { + 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/RGBAControl/Win/RGBAControl.vcxproj b/RGBAControl/Win/RGBAControl.vcxproj new file mode 100644 index 0000000..2a841ab --- /dev/null +++ b/RGBAControl/Win/RGBAControl.vcxproj @@ -0,0 +1,585 @@ +サソ + + + + Debug + Win32 + + + Debug + x64 + + + Release-MD + Win32 + + + Release-MD + x64 + + + Release + Win32 + + + Release + x64 + + + + {1BCBE779-BDE1-40BA-ADCD-D7348ED2538B} + RGBAControl + 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 + 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/RGBAControl.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/RGBAControl.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/RGBAControl.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)_CS4.aex + true + false + $(IntDir)$(ProjectName).pdb + Windows + false + + + $(IntDir)$(ProjectName).lib + MachineX86 + + + + + _DEBUG;%(PreprocessorDefinitions) + true + true + Win32 + .\Debug/RGBAControl.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)_CS4.aex + true + false + $(IntDir)$(ProjectName).pdb + Windows + false + + + $(IntDir)$(ProjectName).lib + MachineX86 + + + + + _DEBUG;%(PreprocessorDefinitions) + true + true + X64 + .\Debug/RGBAControl.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/RGBAControl.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 + 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/RGBAControl/Win/RGBAControl.vcxproj.filters b/RGBAControl/Win/RGBAControl.vcxproj.filters new file mode 100644 index 0000000..dcdabe2 --- /dev/null +++ b/RGBAControl/Win/RGBAControl.vcxproj.filters @@ -0,0 +1,154 @@ + + + + + {1d90c58e-4c93-46b3-9689-2ed8ef9571c4} + h;hpp;hxx;hm;inl;fi;fd + + + {4a40ef30-13aa-46ac-8b3a-a20d339be1fe} + + + {b21d68d2-1ac8-4361-badc-102dd11cf6af} + ico;cur;bmp;dlg;rc2;rct;bin;cnt;rtf;gif;jpg;jpeg;jpe + + + {62079a67-b9ce-4dae-bf52-0eca31e18dae} + + + {947091a1-1a42-418a-bc8c-1e97366a2853} + + + {25d217cb-2ce3-49dd-8fea-bd49c1fa00cc} + + + {2bbd0d8d-23d4-44e5-a5f0-eceda217e873} + + + {914b17dd-e1b2-4ffb-aa5c-d974ebbdb3e9} + + + + + 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/RGBAControl/Win/RGBAControlPiPL.rc b/RGBAControl/Win/RGBAControlPiPL.rc new file mode 100644 index 0000000..455ca23 --- /dev/null +++ b/RGBAControl/Win/RGBAControlPiPL.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 RGBAControl", + + "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 RGBAControl", + + "MIB8", + 0x6165464CL, + 0L, + 4L + 0L, + + +END + diff --git a/RandomLineNoise/Fs_Target.h b/RandomLineNoise/Fs_Target.h new file mode 100644 index 0000000..f7a3a68 --- /dev/null +++ b/RandomLineNoise/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 RandomLineNoise" + +//----------------------------------------------------------------------------------- +//プラグインの説明に使われる文字 +#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/RandomLineNoise/RandomLineNoise.cpp b/RandomLineNoise/RandomLineNoise.cpp new file mode 100644 index 0000000..f87e8f4 --- /dev/null +++ b/RandomLineNoise/RandomLineNoise.cpp @@ -0,0 +1,556 @@ +//----------------------------------------------------------------------------------- +/* + F's Plugins for VS2010/VS2012 +*/ +//----------------------------------------------------------------------------------- + + +#include "RandomLineNoise.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; + + //---------------------------------------------------------------- + //1個目のパラメータ + //固定小数のスライダーバー + AEFX_CLR_STRUCT(def); + PF_ADD_SLIDER( STR_VALUE, //パラメータの名前 + 0, //数値入力する場合の最小値 + 10000, //数値入力する場合の最大値 + 0, //スライダーの最小値 + 1000, //スライダーの最大値 + 100, //デフォルトの値 + ID_VALUE + ); + //---------------------------------------------------------------- + AEFX_CLR_STRUCT(def); + PF_ADD_FIXED( STR_STRONG, //パラメータの名前 + 0, //数値入力する場合の最小値 + 100, //数値入力する場合の最大値 + 0, //スライダーの最小値 + 50, //スライダーの最大値 + 10, //デフォルトの値 + 1, //数値表示に関するフラグ + 0, + 0, + ID_STRONG + ); + + //---------------------------------------------------------------- + AEFX_CLR_STRUCT(def); + PF_ADD_SLIDER( STR_LENGTH_MIN, //パラメータの名前 + 0, //数値入力する場合の最小値 + 1024, //数値入力する場合の最大値 + 0, //スライダーの最小値 + 100, //スライダーの最大値 + 10, //デフォルトの値 + ID_LENGTH_MIN + ); + AEFX_CLR_STRUCT(def); + PF_ADD_SLIDER( STR_LENGTH_MAX, //パラメータの名前 + 0, //数値入力する場合の最小値 + 1024, //数値入力する場合の最大値 + 0, //スライダーの最小値 + 100, //スライダーの最大値 + 30, //デフォルトの値 + ID_LENGTH_MAX + ); + + //---------------------------------------------------------------- + //4個目のパラメータ + //チェックボックス + AEFX_CLR_STRUCT(def); + PF_ADD_CHECKBOX(STR_COLOR1, + STR_COLOR2, + FALSE, + 0, + ID_COLOR + ); + //---------------------------------------------------------------- + //4個目のパラメータ + //チェックボックス + AEFX_CLR_STRUCT(def); + PF_ADD_SLIDER( STR_WEIGHT, //パラメータの名前 + 1, //数値入力する場合の最小値 + 16, //数値入力する場合の最大値 + 1, //スライダーの最小値 + 4, //スライダーの最大値 + 2, //デフォルトの値 + ID_WEIGHT + ); + //---------------------------------------------------------------- + //4個目のパラメータ + //チェックボックス + AEFX_CLR_STRUCT(def); + PF_ADD_CHECKBOX(STR_VERTUAL1, + STR_VERTUAL2, + FALSE, + 0, + ID_VERTUAL + ); + + //---------------------------------------------------------------- + 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 drawLine8(LineDrawParam *lP) +{ + A_long p = lP->x0 + lP->y0 * lP->widthTrue; + A_long o = lP->widthTrue -(lP->x1 - lP->x0 + 1); + A_long i,j; + PF_Pixel *data; + data = (PF_Pixel *)lP->data; + for(j=lP->y0;j<=lP->y1;j++){ + for(i=lP->x0;i<=lP->x1;i++){ + if (data[p].alpha != 0) { + data[p].red = RoundByteLong(data[p].red + FS_CONVERT16TO8(lP->r)); + data[p].green= RoundByteLong(data[p].green + FS_CONVERT16TO8(lP->g)); + data[p].blue = RoundByteLong(data[p].blue + FS_CONVERT16TO8(lP->b)); + } + p++; + } + p += o; + } +} +//------------------------------------------------------------------------------------------------- +static void drawLine16(LineDrawParam *lP) +{ + A_long p = lP->x0 + lP->y0 * lP->widthTrue; + A_long o = lP->widthTrue -(lP->x1 - lP->x0 + 1); + A_long i,j; + PF_Pixel16 *data; + data = (PF_Pixel16 *)lP->data; + for(j=lP->y0;j<=lP->y1;j++){ + for(i=lP->x0;i<=lP->x1;i++){ + if (data[p].alpha != 0) { + data[p].red = RoundShortFpLong(data[p].red + lP->r); + data[p].green= RoundShortFpLong(data[p].green + lP->g); + data[p].blue = RoundShortFpLong(data[p].blue + lP->b); + } + p++; + } + p += o; + } +} +//------------------------------------------------------------------------------------------------- +static void drawLine32(LineDrawParam *lP) +{ + + A_long p = lP->x0 + lP->y0 * lP->widthTrue; + A_long o = lP->widthTrue -(lP->x1 - lP->x0 + 1); + A_long i,j; + PF_PixelFloat *data; + data = (PF_PixelFloat *)lP->data; + for(j=lP->y0;j<=lP->y1;j++){ + for(i=lP->x0;i<=lP->x1;i++){ + if (data[p].alpha != 0) { + data[p].red = RoundFpShortDouble(data[p].red + (PF_FpShort)lP->r/PF_MAX_CHAN16); + data[p].green= RoundFpShortDouble(data[p].green + (PF_FpShort)lP->g/PF_MAX_CHAN16); + data[p].blue = RoundFpShortDouble(data[p].blue + (PF_FpShort)lP->b/PF_MAX_CHAN16); + } + p++; + } + p += o; + } +} +//------------------------------------------------------------------------------------------------- +static PF_Err GetLineDrawParamsFromAE(CFsAE *ae, LineDrawParam *lP) +{ + PF_Err err = PF_Err_NONE; + lP->data = ae->out->data(); + lP->width = ae->out->width(); + lP->widthTrue = ae->out->widthTrue(); + lP->height = ae->out->height(); + return err; +} +//------------------------------------------------------------------------------------------------- +static PF_Boolean GetLineDrawParamsFromParamInfo(ParamInfo *infoP, LineDrawParam *lP) +{ + PF_Boolean ret = TRUE; + A_long length = F_RAND2(infoP->lengthMin,infoP->lengthMax); + if (length<=0) ret = FALSE; + + if ( ret ==TRUE){ + if (infoP->vertualFlag) { + lP->x0 = infoP->x; + lP->x1 = infoP->x + infoP->weight -1; + lP->y0 = infoP->y; + lP->y1 = infoP->y + length -1 ; + }else{ + lP->x0 = infoP->x; + lP->x1 = infoP->x + length -1 ; + lP->y0 = infoP->y; + lP->y1 = infoP->y + infoP->weight -1; + } + if ( (lP->x1<0) || (lP->x0>=lP->width) ||(lP->y1<0) || (lP->y0>=lP->height) ) ret=FALSE; + if (ret==TRUE){ + if (lP->x0<0) lP->x0=0; + if (lP->x1>=lP->width) lP->x1 = lP->width -1; + if (lP->y0<0) lP->y0=0; + if (lP->y1>=lP->height) lP->y1 = lP->height -1; + } + } + if ( ret==TRUE){ + if (infoP->color) { + lP->r = F_RAND2(-infoP->strong,infoP->strong); + lP->g = F_RAND2(-infoP->strong,infoP->strong); + lP->b = F_RAND2(-infoP->strong,infoP->strong); + }else{ + lP->r = lP->g = lP->b = F_RAND2(-infoP->strong,infoP->strong); + F_RAND(); + F_RAND(); + } + }else{ + F_RAND(); + F_RAND(); + F_RAND(); + } + return ret; +} +//------------------------------------------------------------------------------------------------- +static PF_Err GetParams(CFsAE *ae, ParamInfo *infoP) +{ + PF_Err err = PF_Err_NONE; + + ERR(ae->GetADD(ID_VALUE,&infoP->value)); + if (!err) infoP->value *= 20; + ERR(ae->GetFIXED(ID_STRONG,&infoP->strong)); + if (!err) infoP->strong /=100; + ERR(ae->GetADD(ID_LENGTH_MIN,&infoP->lengthMin)); + ERR(ae->GetADD(ID_LENGTH_MAX,&infoP->lengthMax)); + if (!err){ + infoP->lengthMin = ae->downScale(infoP->lengthMin); + infoP->lengthMax = ae->downScale(infoP->lengthMax); + if (infoP->lengthMin>infoP->lengthMax) swapLong(&infoP->lengthMin,&infoP->lengthMax); + } + ERR(ae->GetCHECKBOX(ID_COLOR,&infoP->color)); + ERR(ae->GetADD(ID_WEIGHT,&infoP->weight)); + if (!err){ + infoP->weight = ae->downScale(infoP->weight); + } + ERR(ae->GetCHECKBOX(ID_VERTUAL,&infoP->vertualFlag)); + + return err; +} +void (*drawLine)(LineDrawParam *lP); +//------------------------------------------------------------------------------------------------- +static PF_Err + Exec (CFsAE *ae , ParamInfo *infoP) +{ + PF_Err err = PF_Err_NONE; + + //画面をコピー + ERR(ae->CopyInToOut()); + if ( (infoP->value>0)&&(infoP->strong>0)){ + + F_SRAND(ae->frame()); + + A_long i; + LineDrawParam l; + GetLineDrawParamsFromAE(ae,&l); + switch(ae->pixelFormat()) + { + case PF_PixelFormat_ARGB128: + drawLine = drawLine32; + break; + case PF_PixelFormat_ARGB64: + drawLine = drawLine16; + break; + case PF_PixelFormat_ARGB32: + drawLine = drawLine8; + break; + } + A_long left = infoP->lengthMax/-2; + for (i=0;ivalue;i++){ + infoP->x = F_RAND2(left,l.width); + infoP->y = F_RAND3(l.height); + if ( GetLineDrawParamsFromParamInfo(infoP,&l)==TRUE) drawLine(&l); + } + } + 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()); + 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/RandomLineNoise/RandomLineNoise.h b/RandomLineNoise/RandomLineNoise.h new file mode 100644 index 0000000..d133de4 --- /dev/null +++ b/RandomLineNoise/RandomLineNoise.h @@ -0,0 +1,110 @@ +//----------------------------------------------------------------------------------- +/* + PluginSkeleton for VS2010 +*/ +//----------------------------------------------------------------------------------- + +#pragma once + +#ifndef RandomLineNoise_H +#define RandomLineNoise_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_VALUE, + ID_STRONG, + ID_LENGTH_MIN, + ID_LENGTH_MAX, + ID_COLOR, + ID_WEIGHT, + ID_VERTUAL, + ID_NUM_PARAMS + }; + +#define STR_VALUE "ノイズ量" +#define STR_STRONG "ノイズの強さ(%)" +#define STR_LENGTH_MIN "ノイズの長さ(最小)" +#define STR_LENGTH_MAX "ノイズの長さ(最大)" +#define STR_COLOR1 "ノイズの色" +#define STR_COLOR2 "カラー" + +#define STR_WEIGHT "ノイズの幅" +#define STR_VERTUAL1 "縦方向に" +#define STR_VERTUAL2 "縦" + + +typedef struct ParamInfo{ + A_long value; + PF_Fixed strong; + A_long lengthMin; + A_long lengthMax; + PF_Boolean color; + PF_Boolean vertualFlag; + A_long weight; + A_long x; + A_long y; +}ParamInfo; +typedef struct LineDrawParam{ + A_long x0; + A_long x1; + A_long y0; + A_long y1; + + A_long r; + A_long g; + A_long b; + + PF_PixelPtr data; + A_long width; + A_long widthTrue; + A_long height; +}LineDrawParam; +//----------------------------------------------------------------- +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 // RandomLineNoise_H diff --git a/RandomLineNoise/RandomLineNoisePiPL.r b/RandomLineNoise/RandomLineNoisePiPL.r new file mode 100644 index 0000000..7fef040 --- /dev/null +++ b/RandomLineNoise/RandomLineNoisePiPL.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/RandomLineNoise/Win/RandomLineNoise.vcxproj b/RandomLineNoise/Win/RandomLineNoise.vcxproj new file mode 100644 index 0000000..de635f2 --- /dev/null +++ b/RandomLineNoise/Win/RandomLineNoise.vcxproj @@ -0,0 +1,584 @@ +サソ + + + + Debug + Win32 + + + Debug + x64 + + + Release-MD + Win32 + + + Release-MD + x64 + + + Release + Win32 + + + Release + x64 + + + + {A0E5FD48-02D4-47D7-9DC3-A4B11EE8DC62} + RandomLineNoise + 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/RandomLineNoise.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/RandomLineNoise.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/RandomLineNoise.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/RandomLineNoise.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/RandomLineNoise.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/RandomLineNoise.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/RandomLineNoise/Win/RandomLineNoise.vcxproj.filters b/RandomLineNoise/Win/RandomLineNoise.vcxproj.filters new file mode 100644 index 0000000..f2e039d --- /dev/null +++ b/RandomLineNoise/Win/RandomLineNoise.vcxproj.filters @@ -0,0 +1,154 @@ + + + + + {5ac95e1d-f23b-4ca4-b595-364214cac3b5} + h;hpp;hxx;hm;inl;fi;fd + + + {50046937-baeb-4983-b026-f728ffa65d66} + + + {8aa2d9b4-84d5-4b4d-bec7-fbec6367cf2e} + ico;cur;bmp;dlg;rc2;rct;bin;cnt;rtf;gif;jpg;jpeg;jpe + + + {068d555b-8492-4bed-b9e9-91666b196d4a} + + + {91633c67-4cba-42fb-aa32-6db45026e322} + + + {305ca011-3551-4f0e-960f-f1f16a1ebd28} + + + {ab63e589-38ae-4606-91c0-a6af95bf90dc} + + + {8727bacf-86cf-42ad-929c-66716e4b867e} + + + + + 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/RandomLineNoise/Win/RandomLineNoisePiPL.rc b/RandomLineNoise/Win/RandomLineNoisePiPL.rc new file mode 100644 index 0000000..042284b --- /dev/null +++ b/RandomLineNoise/Win/RandomLineNoisePiPL.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 RandomLineNoise", + + "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, + "\x13F's RandomLineNoise", + + "MIB8", + 0x6165464CL, + 0L, + 4L + 8L, + + +END + diff --git a/RandomMosaic/Fs_Target.h b/RandomMosaic/Fs_Target.h new file mode 100644 index 0000000..a56f8ed --- /dev/null +++ b/RandomMosaic/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 RandomMosaic" + +//----------------------------------------------------------------------------------- +//プラグインの説明に使われる文字 +#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/RandomMosaic/RandomMosaic.cpp b/RandomMosaic/RandomMosaic.cpp new file mode 100644 index 0000000..2547525 --- /dev/null +++ b/RandomMosaic/RandomMosaic.cpp @@ -0,0 +1,512 @@ +//----------------------------------------------------------------------------------- +/* + F's Plugins for VS2010/VS2012 +*/ +//----------------------------------------------------------------------------------- + + +#include "RandomMosaic.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; + + //1個目のパラメータ + AEFX_CLR_STRUCT(def); + PF_ADD_SLIDER( STR_VALUE,//パラメータの名前 + 0, //数値入力する場合の最小値 + 2048, //数値入力する場合の最大値 + 0, //スライダーの最小値 + 512, //スライダーの最大値 + 0, //デフォルトの値 + ID_VALUE + ); + AEFX_CLR_STRUCT(def); + PF_ADD_SLIDER( STR_SIZEMAX,//パラメータの名前 + 3, //数値入力する場合の最小値 + 1024, //数値入力する場合の最大値 + 12, //スライダーの最小値 + 64, //スライダーの最大値 + 24, //デフォルトの値 + ID_SIZEMAX + ); + AEFX_CLR_STRUCT(def); + PF_ADD_SLIDER( STR_SIZEMIN,//パラメータの名前 + 3, //数値入力する場合の最小値 + 1024, //数値入力する場合の最大値 + 6, //スライダーの最小値 + 64, //スライダーの最大値 + 6, //デフォルトの値 + ID_SIZEMIN + ); + AEFX_CLR_STRUCT(def); + PF_ADD_SLIDER( STR_ASPECT,//パラメータの名前 + 0, //数値入力する場合の最小値 + 100, //数値入力する場合の最大値 + 0, //スライダーの最小値 + 100, //スライダーの最大値 + 0, //デフォルトの値 + ID_ASPECT + ); + AEFX_CLR_STRUCT(def); + PF_ADD_SLIDER( STR_RANDOMCOLOR,//パラメータの名前 + 0, //数値入力する場合の最小値 + 255, //数値入力する場合の最大値 + 0, //スライダーの最小値 + 16, //スライダーの最大値 + 0, //デフォルトの値 + ID_RANDCOLOR + ); + + 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->GetADD(ID_VALUE,&infoP->value)); + + ERR(ae->GetADD(ID_SIZEMAX,&infoP->sizeMax)); + if (!err) infoP->sizeMax = ae->downScale(infoP->sizeMax); + + ERR(ae->GetADD(ID_SIZEMIN,&infoP->sizeMin)); + if (!err) { + infoP->sizeMin = ae->downScale(infoP->sizeMin); + if ( infoP->sizeMin>infoP->sizeMax){ + swapLong(&infoP->sizeMin, &infoP->sizeMax); + } + } + ERR(ae->GetADD(ID_ASPECT,&infoP->aspect)); + + ERR(ae->GetADD(ID_RANDCOLOR,&infoP->randomColor)); + + return err; +} +//------------------------------------------------------------------------------------------------- +static PF_Err Exec8(CFsAE *ae, ParamInfo *infoP) +{ + PF_Err err = PF_Err_NONE; + + if ( (infoP->value>0) ) { + FsFlatParam fp; + + A_long prValue = infoP->randomColor; + FsPixelRand pr; + pr.a = pr.b = pr.g = pr.r = prValue; + + //value回繰り返す + for(A_long i=0;ivalue;i++ ){ + //サイズ + fp.sizeX = F_RAND2(infoP->sizeMin,infoP->sizeMax); //サイズを適当に変える + fp.sizeY = fp.sizeX; + if (infoP->aspect>0){ + A_long temp = (infoP->sizeMax - infoP->sizeMin) * infoP->aspect / 100; + fp.sizeX += F_RAND2(-temp,temp); + fp.sizeY += F_RAND2(-temp,temp); + if (fp.sizeX<2) fp.sizeX = 2; + if (fp.sizeY<2) fp.sizeY = 2; + }else{ + F_RAND(); + F_RAND(); + } + //位置 + fp.x = F_RAND2(-fp.sizeX,ae->out->width()); + fp.y = F_RAND2(-fp.sizeY,ae->out->height()); + //明るさ + if ( prValue>0){ + pr.b = pr.g = pr.r = + pr.a =F_RAND2(-prValue,prValue); + }else{ + F_RAND(); + } + ae->out->flat8(&fp,&pr); + } + } + return err; +} +//------------------------------------------------------------------------------------------------- +static PF_Err Exec16(CFsAE *ae, ParamInfo *infoP) +{ + PF_Err err = PF_Err_NONE; + + if ( (infoP->value>0) ) { + FsFlatParam fp; + + A_long prValue = FS_CONVERT8TO16(infoP->randomColor); + FsPixelRand pr; + pr.a = pr.b = pr.g = pr.r = prValue; + + //value回繰り返す + for(A_long i=0;ivalue;i++ ){ + //サイズ + fp.sizeX = F_RAND2(infoP->sizeMin,infoP->sizeMax); //サイズを適当に変える + fp.sizeY = fp.sizeX; + if (infoP->aspect>0){ + A_long temp = (infoP->sizeMax - infoP->sizeMin) * infoP->aspect / 100; + fp.sizeX += F_RAND2(-temp,temp); + fp.sizeY += F_RAND2(-temp,temp); + if (fp.sizeX<2) fp.sizeX = 2; + if (fp.sizeY<2) fp.sizeY = 2; + }else{ + F_RAND(); + F_RAND(); + } + //位置 + fp.x = F_RAND2(-fp.sizeX,ae->out->width()); + fp.y = F_RAND2(-fp.sizeY,ae->out->height()); + //明るさ + if ( prValue>0){ + pr.b = pr.g = pr.r = + pr.a = F_RAND2(-prValue,prValue); + }else{ + F_RAND(); + } + ae->out->flat16(&fp,&pr); + } + } + return err; +} +//------------------------------------------------------------------------------------------------- +static PF_Err Exec32(CFsAE *ae, ParamInfo *infoP) +{ + PF_Err err = PF_Err_NONE; + + if ( (infoP->value>0) ) { + FsFlatParam fp; + + A_long prValue = FS_CONVERT8TO16(infoP->randomColor); + FsPixelRandFloat pr; + + //value回繰り返す + for(A_long i=0;ivalue;i++ ){ + //サイズ + fp.sizeX = F_RAND2(infoP->sizeMin,infoP->sizeMax); //サイズを適当に変える + fp.sizeY = fp.sizeX; + if (infoP->aspect>0){ + A_long temp = (infoP->sizeMax - infoP->sizeMin) * infoP->aspect / 100; + fp.sizeX += F_RAND2(-temp,temp); + fp.sizeY += F_RAND2(-temp,temp); + if (fp.sizeX<2) fp.sizeX = 2; + if (fp.sizeY<2) fp.sizeY = 2; + }else{ + F_RAND(); + F_RAND(); + } + //位置 + fp.x = F_RAND2(-fp.sizeX,ae->out->width()); + fp.y = F_RAND2(-fp.sizeY,ae->out->height()); + //明るさ + if ( prValue>0){ + PF_FpShort rr = (PF_FpShort)F_RAND2(-prValue,prValue)/PF_MAX_CHAN16; + pr.b = pr.g = pr.r = + pr.a = rr; + }else{ + F_RAND(); + } + ae->out->flat32(&fp,&pr); + } + } + return err; +} +//------------------------------------------------------------------------------------------------- +static PF_Err + Exec (CFsAE *ae , ParamInfo *infoP) +{ + PF_Err err = PF_Err_NONE; + + //画面をコピー + ERR(ae->CopyInToOut()); + if (infoP->value>0){ + F_SRAND(ae->frame()); + switch(ae->pixelFormat()) + { + case PF_PixelFormat_ARGB128: + err = Exec32(ae,infoP); + break; + case PF_PixelFormat_ARGB64: + err =Exec16(ae,infoP); + break; + case PF_PixelFormat_ARGB32: + err =Exec8(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){ + 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/RandomMosaic/RandomMosaic.h b/RandomMosaic/RandomMosaic.h new file mode 100644 index 0000000..d929a62 --- /dev/null +++ b/RandomMosaic/RandomMosaic.h @@ -0,0 +1,79 @@ +//----------------------------------------------------------------------------------- +/* + PluginSkeleton for VS2010 +*/ +//----------------------------------------------------------------------------------- +#pragma once + +#ifndef RandomMosaic_H +#define RandomMosaic_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" + +typedef struct ParamInfo{ + A_long value; + A_long sizeMax; + A_long sizeMin; + A_long aspect; + A_long randomColor; +} ParamInfo; + +enum { + ID_INPUT = 0, // default input layer + ID_VALUE, // ノイズ量 + ID_SIZEMAX, // モザイクの大きさ(最大値) + ID_SIZEMIN, // モザイクの大きさ(最小値) + ID_ASPECT, // モザイクの左右 + ID_RANDCOLOR, // 色のばらつき + ID_NUM_PARAMS +}; + +#define STR_VALUE "量" +#define STR_SIZEMAX "サイズ(最大)" +#define STR_SIZEMIN "サイズ(最小)" +#define STR_ASPECT "縦横のばらつき" +#define STR_RANDOMCOLOR "明るさのばらつき" + + + +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 // RandomMosaic \ No newline at end of file diff --git a/RandomMosaic/RandomMosaicPiPL.r b/RandomMosaic/RandomMosaicPiPL.r new file mode 100644 index 0000000..7fe77f7 --- /dev/null +++ b/RandomMosaic/RandomMosaicPiPL.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/RandomMosaic/Win/RandomMosaic.vcxproj b/RandomMosaic/Win/RandomMosaic.vcxproj new file mode 100644 index 0000000..e9c2cbf --- /dev/null +++ b/RandomMosaic/Win/RandomMosaic.vcxproj @@ -0,0 +1,586 @@ +サソ + + + + Debug + Win32 + + + Debug + x64 + + + Release-MD + Win32 + + + Release-MD + x64 + + + Release + Win32 + + + Release + x64 + + + + {DDCCEE64-7056-42C9-B77E-78E7043B74F4} + RandomMosaic + 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/RandomMosaic.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/RandomMosaic.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/RandomMosaic.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/RandomMosaic.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/RandomMosaic.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/RandomMosaic.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/RandomMosaic/Win/RandomMosaic.vcxproj.filters b/RandomMosaic/Win/RandomMosaic.vcxproj.filters new file mode 100644 index 0000000..2358ebf --- /dev/null +++ b/RandomMosaic/Win/RandomMosaic.vcxproj.filters @@ -0,0 +1,160 @@ + + + + + {3b6b073b-bb40-4552-8cc1-c175753f1c6d} + h;hpp;hxx;hm;inl;fi;fd + + + {1159c5f5-29a3-426b-a602-9becf9749a77} + + + {b16163c6-1db4-4bdf-bec4-259f7da91a81} + ico;cur;bmp;dlg;rc2;rct;bin;cnt;rtf;gif;jpg;jpeg;jpe + + + {5be1a38d-c147-4d43-b910-85538113a489} + + + {e21a0720-e8b7-4f0b-bf3b-431e9c34e2cb} + + + {7cabed13-7cc7-46ab-a447-0c66a90b4cb4} + + + {6ec0fe8c-24ae-4144-8754-86211d63e49f} + + + {b3e78799-3196-4b3f-a453-ff5a9cb395f2} + + + + + 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 + + + Supporting code\Fs + + + + + Resource Files + + + + + + Supporting code\AE + + + Supporting code\AE + + + Supporting code\AE + + + Supporting code\AE + + + Supporting code\Fs + + + Supporting code\Fs + + + + + Resource Files + + + \ No newline at end of file diff --git a/RandomMosaic/Win/RandomMosaicPiPL.rc b/RandomMosaic/Win/RandomMosaicPiPL.rc new file mode 100644 index 0000000..1e3653c --- /dev/null +++ b/RandomMosaic/Win/RandomMosaicPiPL.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 RandomMosaic\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, + 20, 0x0, + "\x10F's RandomMosaic\0\0\0", + + "MIB8", + 0x6165464CL, + 0L, + 4L + 8L, + + +END + diff --git a/RandomMosaic2nd/Fs_Target.h b/RandomMosaic2nd/Fs_Target.h new file mode 100644 index 0000000..a645a9f --- /dev/null +++ b/RandomMosaic2nd/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 RandomMosaic2nd" + +//----------------------------------------------------------------------------------- +//プラグインの説明に使われる文字 +#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/RandomMosaic2nd/RandomMosaic2nd.cpp b/RandomMosaic2nd/RandomMosaic2nd.cpp new file mode 100644 index 0000000..fb4570c --- /dev/null +++ b/RandomMosaic2nd/RandomMosaic2nd.cpp @@ -0,0 +1,654 @@ +//----------------------------------------------------------------------------------- +/* + F's Plugins for VS2010/VS2012 +*/ +//----------------------------------------------------------------------------------- + + +#include "RandomMosaic2nd.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; + + //1個目のパラメータ + AEFX_CLR_STRUCT(def); + PF_ADD_FIXED( STR_VALUE, //パラメータの名前 + 0, //数値入力する場合の最小値 + 100, //数値入力する場合の最大値 + 0, //スライダーの最小値 + 100, //スライダーの最大値 + 0, //デフォルトの値 + 1, //数値表示に関するフラグ + 0, + 0, + ID_VALUE + ); + + AEFX_CLR_STRUCT(def); + PF_ADD_SLIDER( STR_STRENGTH,//パラメータの名前 + 0, //数値入力する場合の最小値 + 255, //数値入力する場合の最大値 + 0, //スライダーの最小値 + 128, //スライダーの最大値 + 10, //デフォルトの値 + ID_STRENGTH + ); + AEFX_CLR_STRUCT(def); + PF_ADD_SLIDER( STR_SIZEX,//パラメータの名前 + 1, //数値入力する場合の最小値 + 256, //数値入力する場合の最大値 + 1, //スライダーの最小値 + 256, //スライダーの最大値 + 8, //デフォルトの値 + ID_SIZEX + ); + + AEFX_CLR_STRUCT(def); + PF_ADD_SLIDER( STR_SIZEY,//パラメータの名前 + 1, //数値入力する場合の最小値 + 256, //数値入力する場合の最大値 + 1, //スライダーの最小値 + 256, //スライダーの最大値 + 8, //デフォルトの値 + ID_SIZEY + ); + 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->GetFIXED(ID_VALUE,&infoP->value)); + if (!err) infoP->value /= 100; + + ERR(ae->GetADD(ID_STRENGTH,&infoP->strangth)); + + ERR(ae->GetADD(ID_SIZEX,&infoP->sizeX)); + if (!err) infoP->sizeX = ae->downScale(infoP->sizeX); + ERR(ae->GetADD(ID_SIZEY,&infoP->sizeY)); + if (!err) infoP->sizeY = ae->downScale(infoP->sizeY); + + return err; +} +//------------------------------------------------------------------------------------------------- +static PF_Err Exec8(CFsAE *ae, ParamInfo *infoP) +{ + PF_Err err = PF_Err_NONE; + + if ( (infoP->value>0) ) { + FsFlatParam fp; + + A_long prValue = infoP->strangth; + FsPixelRand pr; + fp.sizeX = infoP->sizeX; + fp.sizeY = infoP->sizeY; + A_long cntX,cntY; + cntX = ae->out->width() / infoP->sizeX; + if ( (ae->out->width() % infoP->sizeX)!=0) cntX++; + cntY = ae->out->height() / infoP->sizeY; + if ( (ae->out->height() % infoP->sizeY)!=0) cntY++; + A_long x,y; + for( y=0; ysizeY; + for( x=0; xsizeX; + if ( F_RAND3(1L<<16)<= infoP->value){ + pr.a = pr.b = pr.g = pr.r = F_RAND2(-prValue, prValue); + ERR(ae->out->flat8(&fp,&pr)); + }else{ + F_RAND(); + } + } + } + } + return err; +} +//------------------------------------------------------------------------------------------------- +static PF_Err Exec16(CFsAE *ae, ParamInfo *infoP) +{ + PF_Err err = PF_Err_NONE; + + if ( (infoP->value>0) ) { + FsFlatParam fp; + + A_long prValue = FS_CONVERT8TO16(infoP->strangth); + FsPixelRand pr; + fp.sizeX = infoP->sizeX; + fp.sizeY = infoP->sizeY; + A_long cntX,cntY; + cntX = ae->out->width() / infoP->sizeX; + if ( (ae->out->width() % infoP->sizeX)!=0) cntX++; + cntY = ae->out->height() / infoP->sizeY; + if ( (ae->out->height() % infoP->sizeY)!=0) cntY++; + A_long x,y; + for( y=0; ysizeY; + for( x=0; xsizeX; + if ( F_RAND3(1L<<16)<= infoP->value){ + pr.a = pr.b = pr.g = pr.r = F_RAND2(-prValue, prValue); + ERR(ae->out->flat16(&fp,&pr)); + }else{ + F_RAND(); + } + } + } + } + return err; +} +//------------------------------------------------------------------------------------------------- +static PF_Err Exec32(CFsAE *ae, ParamInfo *infoP) +{ + PF_Err err = PF_Err_NONE; + + if ( (infoP->value>0) ) { + FsFlatParam fp; + + A_long prValue = FS_CONVERT8TO16(infoP->strangth); + FsPixelRandFloat pr; + fp.sizeX = infoP->sizeX; + fp.sizeY = infoP->sizeY; + A_long cntX,cntY; + cntX = ae->out->width() / infoP->sizeX; + if ( (ae->out->width() % infoP->sizeX)!=0) cntX++; + cntY = ae->out->height() / infoP->sizeY; + if ( (ae->out->height() % infoP->sizeY)!=0) cntY++; + A_long x,y; + for( y=0; ysizeY; + for( x=0; xsizeX; + if ( F_RAND3(1L<<16)<= infoP->value){ + pr.a = pr.b = pr.g = pr.r = (PF_FpShort)F_RAND2(-prValue, prValue) / PF_MAX_CHAN16; + ERR(ae->out->flat32(&fp,&pr)); + }else{ + F_RAND(); + } + } + } + } + return err; +} +//------------------------------------------------------------------------------------------------- +static PF_Err + Exec (CFsAE *ae , ParamInfo *infoP) +{ + PF_Err err = PF_Err_NONE; + + //画面をコピー + ERR(ae->CopyInToOut()); + if (infoP->value>0){ + F_SRAND(ae->frame()); + switch(ae->pixelFormat()) + { + case PF_PixelFormat_ARGB128: + err = Exec32(ae,infoP); + break; + case PF_PixelFormat_ARGB64: + err =Exec16(ae,infoP); + break; + case PF_PixelFormat_ARGB32: + err =Exec8(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){ + 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; +} + +//------------------------------------------------------------------------------------------------- + +/* +//------------------------------------------------------------------------------------------------- +PF_Err GetParams ( + PF_InData *in_data, + PF_OutData *out_data, + PF_ParamDef *params[], + PF_LayerDef *output, + FsAEParams *aeprm, + MY_Params *prm, + mosaicPrm *mprm + ) +{ + PF_Err err = PF_Err_NONE; + PF_EffectWorld *input = ¶ms[MY_INPUT]->u.ld; //入力画像のアドレス + if ( (params==NULL)||(output==NULL)||(input==NULL) ) { + return 0xFF; + } + + //----------------------- + aeprm->is16Bit = PF_WORLD_IS_DEEP(output); + aeprm->inData = (PF_Pixel *)input->data; + aeprm->outData = (PF_Pixel *)output->data; + aeprm->inData16 = (PF_Pixel16 *)input->data; + aeprm->outData16= (PF_Pixel16 *)output->data; + aeprm->width = input->width; + aeprm->height = input->height; + if (aeprm->is16Bit) { + aeprm->inWidth = input->rowbytes/sizeof(PF_Pixel16); + aeprm->outWidth = output->rowbytes/sizeof(PF_Pixel16); + }else{ + aeprm->inWidth = input->rowbytes/sizeof(PF_Pixel); + aeprm->outWidth = output->rowbytes/sizeof(PF_Pixel); + } + aeprm->offsetInWidth = aeprm->inWidth -input->width; + aeprm->offsetOutWidth = aeprm->outWidth -input->width; + if ( (aeprm->offsetInWidth <0)||( aeprm->offsetOutWidth <0) ) { + err = 0xFF; + } + if ( input->height != output->height) { + err = 0xFF; + } + //カレントフレームを求める画頭は0 + if ( (in_data->current_time>=0)&&(in_data->time_step>0) ) { + aeprm->Frame =(in_data->current_time/in_data->time_step); + }else{ + aeprm->Frame = 0; + } + mprm->height = aeprm->height; + mprm->inData = aeprm->inData; + mprm->inData16 = aeprm->inData16; + mprm->outData = aeprm->outData; + mprm->outData16 = aeprm->outData16; + mprm->inOffset = aeprm->offsetInWidth; + mprm->inWidth = aeprm->inWidth; + mprm->is16Bit = aeprm->is16Bit; + mprm->mode = mosaicTopLeft; + mprm->outOffset = aeprm->offsetOutWidth; + mprm->outWidth = aeprm->outWidth; + mprm->width = aeprm->width; + + //----------------------- + //モザイクの量 + prm->value = params[MY_VALUE]->u.sd.value /100; + prm->strangth = params[MY_STRENGTH]->u.sd.value; + if (aeprm->is16Bit) { + prm->strangth = CONVERT8TO16(prm->strangth); + } + mprm->randValue = prm->strangth; + //モザイクの大きさ + prm->sizeX =params[MY_SIZEX]->u.sd.value * in_data->downsample_x.num / in_data->downsample_x.den; + if (prm->sizeX<1) {prm->sizeX=1;} + prm->sizeY =params[MY_SIZEY]->u.sd.value * in_data->downsample_x.num / in_data->downsample_x.den; + if (prm->sizeY<1) {prm->sizeY=1;} + mprm->mosaicX = prm->sizeX; + mprm->mosaicY = prm->sizeY; + + return err; +} +//------------------------------------------------------------------------------------------------- +static PF_Err Render ( PF_InData *in_data, + PF_OutData *out_data, + PF_ParamDef *params[], + PF_LayerDef *output ) +{ + long i,j,w,h; + FsAEParams aprm; + MY_Params prm; + mosaicPrm mprm; + + PF_Err err=PF_Err_NONE; + PF_EffectWorld *input=¶ms[MY_INPUT]->u.ld; + + if ( GetParams(in_data,out_data,params,output,&aprm,&prm,&mprm) != PF_Err_NONE ) { + PF_SPRINTF( out_data->return_msg, + "[%s] 画像サイズエラーです。御免なさい。", + FS_NAME + ); + return err; + } + + //取りあえず複写 + PF_COPY(input, output, NULL, NULL); + + if ( prm.value<=0 ){ + return err; + } + + srand(aprm.Frame); + + w = divCeil(aprm.width, prm.sizeX); + h = divCeil(aprm.height, prm.sizeY); + + + if (prm.value>=(100L << 16)) { + for (j=h-1 ; j>=0 ; j--){ + mprm.y=j*mprm.mosaicY; + for (i=w-1 ; i>=0 ; i--){ + mprm.x=i*mprm.mosaicX; + BlockMosaic(&mprm); + } + } + }else{ + for (j=h-1 ; j>=0 ; j--){ + mprm.y=j*mprm.mosaicY; + for (i=w-1 ; i>=0 ; i--){ + if ((1L<<16)*F_RAND()/F_RAND_MAX<= prm.value) { + mprm.x=i*mprm.mosaicX; + BlockMosaic(&mprm); + } + } + } + } + return err; +} +//------------------------------------------------------------------------------------------------- +inline long divCeil(long v0, long v1) +{ + long temp = v0 / v1; + if ( (v0%v1)!=0 ) temp+=1; + return temp; + +} +//------------------------------------------------------------------------------------------------- +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/RandomMosaic2nd/RandomMosaic2nd.h b/RandomMosaic2nd/RandomMosaic2nd.h new file mode 100644 index 0000000..80e5bee --- /dev/null +++ b/RandomMosaic2nd/RandomMosaic2nd.h @@ -0,0 +1,80 @@ +//----------------------------------------------------------------------------------- +/* + F's Plugins for VS2010/VS2012 +*/ +//----------------------------------------------------------------------------------- +#pragma once + +#ifndef RandomMosaic2nd_H +#define RandomMosaic2nd_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" + + +typedef struct ParamInfo{ + PF_Fixed value; + A_long strangth; + A_long sizeX; + A_long sizeY; +} ParamInfo; + +enum { + ID_INPUT = 0, // default input layer + ID_VALUE, //モザイクの量(%) + ID_STRENGTH, //モザイクの強さ + ID_SIZEX, // モザイクの大きさ + ID_SIZEY, // モザイクの大きさ + ID_NUM_PARAMS +}; + +#define STR_VALUE "量(%)" +#define STR_STRENGTH "強さ" +#define STR_SIZEX "横サイズ" +#define STR_SIZEY "縦サイズ" + +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 // RandomMosaic2nd diff --git a/RandomMosaic2nd/RandomMosaic2ndPiPL.r b/RandomMosaic2nd/RandomMosaic2ndPiPL.r new file mode 100644 index 0000000..ff5b2ec --- /dev/null +++ b/RandomMosaic2nd/RandomMosaic2ndPiPL.r @@ -0,0 +1,74 @@ +#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/RandomMosaic2nd/Win/RandomMosaic2nd.vcxproj b/RandomMosaic2nd/Win/RandomMosaic2nd.vcxproj new file mode 100644 index 0000000..b39cf77 --- /dev/null +++ b/RandomMosaic2nd/Win/RandomMosaic2nd.vcxproj @@ -0,0 +1,586 @@ +サソ + + + + Debug + Win32 + + + Debug + x64 + + + Release-MD + Win32 + + + Release-MD + x64 + + + Release + Win32 + + + Release + x64 + + + + {083C2BFE-AE4A-457E-8C6E-BA82D14C3EC7} + RandomMosaic2nd + 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/RandomMosaic2nd.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/RandomMosaic2nd.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/RandomMosaic2nd.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/RandomMosaic2nd.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/RandomMosaic2nd.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/RandomMosaic2nd.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/RandomMosaic2nd/Win/RandomMosaic2nd.vcxproj.filters b/RandomMosaic2nd/Win/RandomMosaic2nd.vcxproj.filters new file mode 100644 index 0000000..0072b74 --- /dev/null +++ b/RandomMosaic2nd/Win/RandomMosaic2nd.vcxproj.filters @@ -0,0 +1,160 @@ + + + + + {6e71f453-0246-4c19-a0df-d646e624aa9b} + h;hpp;hxx;hm;inl;fi;fd + + + {15595954-6579-471a-a000-1c1fea824626} + + + {0c453018-ccc4-4b0f-b64b-8ef244ab954f} + ico;cur;bmp;dlg;rc2;rct;bin;cnt;rtf;gif;jpg;jpeg;jpe + + + {54c3bc5e-4d04-417a-9439-d2882085906c} + + + {58a525fd-0f35-4445-bb75-2f03ead4efe5} + + + {5e475070-82e1-4837-a26f-9acb4b25fb90} + + + {4314c0b7-b688-41e4-a5ad-2845b3c20ebd} + + + {77943957-2af9-4692-9696-0d6127970a86} + + + + + 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 + + + Supporting code\Fs + + + + + Resource Files + + + + + + Supporting code\AE + + + Supporting code\AE + + + Supporting code\AE + + + Supporting code\AE + + + Supporting code\Fs + + + Supporting code\Fs + + + + + Resource Files + + + \ No newline at end of file diff --git a/RandomMosaic2nd/Win/RandomMosaic2ndPiPL.rc b/RandomMosaic2nd/Win/RandomMosaic2ndPiPL.rc new file mode 100644 index 0000000..5f56e82 --- /dev/null +++ b/RandomMosaic2nd/Win/RandomMosaic2ndPiPL.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 RandomMosaic2nd", + + "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, + "\x13F's RandomMosaic2nd", + + "MIB8", + 0x6165464CL, + 0L, + 4L + 8L, + + +END + diff --git a/RandomShift/Fs_Target.h b/RandomShift/Fs_Target.h new file mode 100644 index 0000000..0f34316 --- /dev/null +++ b/RandomShift/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 RandomShift" + +//----------------------------------------------------------------------------------- +//プラグインの説明に使われる文字 +#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/RandomShift/RandomShift.cpp b/RandomShift/RandomShift.cpp new file mode 100644 index 0000000..7608097 --- /dev/null +++ b/RandomShift/RandomShift.cpp @@ -0,0 +1,527 @@ +//----------------------------------------------------------------------------------- +/* + F's Plugins for VS2010/VS2012 +*/ +//----------------------------------------------------------------------------------- + +#include "RandomShift.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 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_SLIDER( STR_VALUE, //パラメータの名前 + 0, //数値入力する場合の最小値 + 32000, //数値入力する場合の最大値 + 0, //スライダーの最小値 + 3000, //スライダーの最大値 + 1000, //デフォルトの値 + ID_VALUE + ); + //---------------------------------------------------------------- + AEFX_CLR_STRUCT(def); + PF_ADD_SLIDER( STR_SHIFTMAX, //パラメータの名前 + 0, //数値入力する場合の最小値 + 2000, //数値入力する場合の最大値 + 0, //スライダーの最小値 + 100, //スライダーの最大値 + 5, //デフォルトの値 + ID_SHIFTMAX + ); + //---------------------------------------------------------------- + AEFX_CLR_STRUCT(def); + PF_ADD_SLIDER( STR_SHIFTMIN, //パラメータの名前 + 0, //数値入力する場合の最小値 + 2000, //数値入力する場合の最大値 + 0, //スライダーの最小値 + 100, //スライダーの最大値 + 1, //デフォルトの値 + ID_SHIFTMIN + ); + //---------------------------------------------------------------- + AEFX_CLR_STRUCT(def); + PF_ADD_SLIDER( STR_LENGTHMAX, //パラメータの名前 + 0, //数値入力する場合の最小値 + 2000, //数値入力する場合の最大値 + 0, //スライダーの最小値 + 100, //スライダーの最大値 + 30, //デフォルトの値 + ID_LENGTHMAX + ); + //---------------------------------------------------------------- + AEFX_CLR_STRUCT(def); + PF_ADD_SLIDER( STR_LENGTHMAX, //パラメータの名前 + 0, //数値入力する場合の最小値 + 2000, //数値入力する場合の最大値 + 0, //スライダーの最小値 + 100, //スライダーの最大値 + 5, //デフォルトの値 + ID_LENGTHMIN + ); + //---------------------------------------------------------------- + AEFX_CLR_STRUCT(def); + PF_ADD_SLIDER( STR_HEIGHTMAX, //パラメータの名前 + 0, //数値入力する場合の最小値 + 1000, //数値入力する場合の最大値 + 0, //スライダーの最小値 + 50, //スライダーの最大値 + 30, //デフォルトの値 + ID_HEIGHTMAX + ); + //---------------------------------------------------------------- + AEFX_CLR_STRUCT(def); + PF_ADD_SLIDER( STR_HEIGHTMIN, //パラメータの名前 + 0, //数値入力する場合の最小値 + 1000, //数値入力する場合の最大値 + 0, //スライダーの最小値 + 50, //スライダーの最大値 + 5, //デフォルトの値 + ID_HEIGHTMIN + ); + + //---------------------------------------------------------------- + AEFX_CLR_STRUCT(def); + PF_ADD_SLIDER( STR_VERSHIFT_VALUE, //パラメータの名前 + 0, //数値入力する場合の最小値 + 1000, //数値入力する場合の最大値 + 0, //スライダーの最小値 + 50, //スライダーの最大値 + 0, //デフォルトの値 + ID_VERSHIFT_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; +} +//------------------------------------------------------------------------------------------------- +static PF_Err GetParams(CFsAE *ae, ParamInfo *infoP) +{ + PF_Err err = PF_Err_NONE; + + ERR(ae->GetADD(ID_VALUE,&infoP->value)); + + ERR(ae->GetADD(ID_SHIFTMAX,&infoP->shiftMax)); + ERR(ae->GetADD(ID_SHIFTMIN,&infoP->shiftMin)); + if ( infoP->shiftMin>infoP->shiftMax) swapLong(&infoP->shiftMin,&infoP->shiftMax); + + ERR(ae->GetADD(ID_LENGTHMAX,&infoP->lengthMax)); + ERR(ae->GetADD(ID_LENGTHMIN,&infoP->lengthMin)); + if ( infoP->lengthMin>infoP->lengthMax) swapLong(&infoP->lengthMin,&infoP->lengthMax); + + ERR(ae->GetADD(ID_HEIGHTMAX,&infoP->heightMax)); + ERR(ae->GetADD(ID_HEIGHTMIN,&infoP->heightMin)); + if ( infoP->heightMin>infoP->heightMax) swapLong(&infoP->heightMin,&infoP->heightMax); + + infoP->vertualShift=0; + ERR(ae->GetADD(ID_VERSHIFT_VALUE,&infoP->vertualShift)); + + infoP->shift = 0; + infoP->length = 0; + infoP->height = 0; + + return err; +} +//------------------------------------------------------------------------------------------------- +static PF_Err + Exec8 (CFsAE *ae , ParamInfo *infoP) +{ + PF_Err err = PF_Err_NONE; + A_long i,v,s,sv; + FsPixelCopyParam pc; + v = infoP->value; + if ( v>0){ + for (i=0; ilengthMin,infoP->lengthMax); + pc.height = F_RAND2(infoP->heightMin,infoP->heightMax); + + pc.srcX = F_RAND2(-pc.width,ae->in->width()); + pc.srcY = F_RAND2(-pc.height,ae->in->height()); + s = F_RAND2(infoP->shiftMin,infoP->shiftMax); + if ( (F_RAND() % 2)==1) s *=-1; + sv=0; + if ( infoP->vertualShift!=0){ + sv= F_RAND2(-infoP->vertualShift,infoP->vertualShift); + }else{ + F_RAND(); + } + if ((s!=0)||(sv!=0)){ + pc.dstX = pc.srcX + s; + pc.dstY = pc.srcY + sv; + ae->CopyInToOut8(&pc); + } + } + } + return err; +} +//------------------------------------------------------------------------------------------------- +static PF_Err + Exec16 (CFsAE *ae , ParamInfo *infoP) +{ + PF_Err err = PF_Err_NONE; + A_long i,v,s,sv; + FsPixelCopyParam pc; + v = infoP->value; + if ( v>0){ + for (i=0; ilengthMin,infoP->lengthMax); + pc.height = F_RAND2(infoP->heightMin,infoP->heightMax); + + pc.srcX = F_RAND2(-pc.width,ae->in->width()); + pc.srcY = F_RAND2(-pc.height,ae->in->height()); + s = F_RAND2(infoP->shiftMin,infoP->shiftMax); + if ( (F_RAND() % 2)==1) s *=-1; + sv=0; + if ( infoP->vertualShift!=0){ + sv= F_RAND2(-infoP->vertualShift,infoP->vertualShift); + }else{ + F_RAND(); + } + if ((s!=0)||(sv!=0)){ + pc.dstX = pc.srcX + s; + pc.dstY = pc.srcY + sv; + ae->CopyInToOut16(&pc); + } + } + } + return err; +} +//------------------------------------------------------------------------------------------------- +static PF_Err + Exec32 (CFsAE *ae , ParamInfo *infoP) +{ + PF_Err err = PF_Err_NONE; + A_long i,v,s,sv; + FsPixelCopyParam pc; + v = infoP->value; + if ( v>0){ + for (i=0; ilengthMin,infoP->lengthMax); + pc.height = F_RAND2(infoP->heightMin,infoP->heightMax); + + pc.srcX = F_RAND2(-pc.width,ae->in->width()); + pc.srcY = F_RAND2(-pc.height,ae->in->height()); + s = F_RAND2(infoP->shiftMin,infoP->shiftMax); + if ( (F_RAND() % 2)==1) s *=-1; + sv=0; + if ( infoP->vertualShift!=0){ + sv= F_RAND2(-infoP->vertualShift,infoP->vertualShift); + }else{ + F_RAND(); + } + if ((s!=0)||(sv!=0)){ + pc.dstX = pc.srcX + s; + pc.dstY = pc.srcY + sv; + ae->CopyInToOut32(&pc); + } + } + } + return err; +} +//------------------------------------------------------------------------------------------------- +static PF_Err + Exec (CFsAE *ae , ParamInfo *infoP) +{ + PF_Err err = PF_Err_NONE; + + //画面をコピー + ERR(ae->CopyInToOut()); + + if (infoP->value>0){ + F_SRAND(ae->frame()); + switch(ae->pixelFormat()) + { + case PF_PixelFormat_ARGB128: + ERR(Exec32(ae,infoP)); + break; + case PF_PixelFormat_ARGB64: + ERR(Exec16(ae,infoP)); + break; + case PF_PixelFormat_ARGB32: + 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){ + 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/RandomShift/RandomShift.h b/RandomShift/RandomShift.h new file mode 100644 index 0000000..20a3133 --- /dev/null +++ b/RandomShift/RandomShift.h @@ -0,0 +1,274 @@ +//----------------------------------------------------------------------------------- +/* + PluginSkeleton for VS2010 +*/ +//----------------------------------------------------------------------------------- + +#pragma once +#ifndef RandomShift_H +#define RandomShift_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_VALUE, + ID_SHIFTMAX, //boolean + ID_SHIFTMIN, // 1:XLine 2:YLine 3: Line 4:Box 5:BoxFill + ID_LENGTHMAX, // + ID_LENGTHMIN, // + ID_HEIGHTMAX, // + ID_HEIGHTMIN, // + ID_VERSHIFT_VALUE, + ID_NUM_PARAMS + }; + +#define STR_VALUE "量" +#define STR_SHIFTMAX "ずらし幅の最大値(px)" +#define STR_SHIFTMIN "ずらし幅の最小値(px)" +#define STR_LENGTHMAX "横幅の最大値(px)" +#define STR_LEMGTHMIN "横幅の最小値(px)" +#define STR_HEIGHTMAX "縦幅の最大値(px)" +#define STR_HEIGHTMIN "縦幅の最小値(px)" +#define STR_VERSHIFT_VALUE "上下のずらし幅(px)" + + +//UIのパラメータ +typedef struct ParamInfo { + A_long value; + A_long shiftMax; + A_long shiftMin; + + A_long shiftYMax; + A_long shiftYMin; + + A_long lengthMax; + A_long lengthMin; + A_long heightMax; + A_long heightMin; + + A_long shift; + A_long length; + A_long height; + + A_long vertualShift; +} ParamInfo, *ParamInfoP, **ParamInfoH; + +/* +class CRandomShift : public CFsAE{ +public: + CRandomShift( + 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); + srand(m_Frame); + } + //パラメータを獲得する関数 + PF_Err getParams( + PF_InData *in_data, + PF_OutData *out_data, + PF_ParamDef *params[], + PF_LayerDef *output ); + inline long getDir(){ + if ( F_RAND() > (F_RAND_MAX/2) ){ + return 1; + }else{ + return -1; + } + } + inline long getShift(){ + shift = shiftMin + (shiftMax-shiftMin) * F_RAND() / F_RAND_MAX; + if (shift<0) { shift =0;}else if (shift>shiftMax) {shift = shiftMax;} + return shift; + } + inline long getLength(){ + length = lengthMin + (lengthMax-lengthMin) * F_RAND() / F_RAND_MAX; + if (length<0) { length =0;}else if (length>lengthMax) {length = lengthMax;} + return length; + } + inline long getHeight(){ + height = heightMin + (heightMax-heightMin) * F_RAND() / F_RAND_MAX; + if (height<0) { height =0;}else if (height>heightMax) {height = heightMax;} + return height; +} + inline void get8(long x,long y){ + long xx =x; + long yy =y; + long ww =length; + long hh =height; + + PF_Pixel* b = (PF_Pixel *)buf; + long i,j; + + long targetB =0; + for (j=0;jgetPixel8_F(xx,yy); + xx++; + targetB++; + } + yy++; + } + + } + inline void get16(long x,long y){ + long xx =x; + long yy =y; + long ww =length; + long hh =height; + + PF_Pixel16* b = (PF_Pixel16 *)buf; + long i,j; + + long targetB =0; + for (j=0;jgetPixel16_F(xx,yy); + xx++; + targetB++; + } + yy++; + } + + } + inline void put8(long x,long y){ + long xx =x; + long yy =y; + long ww =length; + long hh =height; + + PF_Pixel* b = (PF_Pixel *)buf; + long i,j; + + long targetB =0; + for (j=0;jsetPixel8(xx,yy,b[targetB]); + xx++; + targetB++; + } + yy++; + } + + } + inline void put16(long x,long y){ + long xx =x; + long yy =y; + long ww =length; + long hh =height; + + PF_Pixel16* b = (PF_Pixel16 *)buf; + long i,j; + + long targetB =0; + for (j=0;jsetPixel16(xx,yy,b[targetB]); + xx++; + targetB++; + } + yy++; + } + + } + void shift8(){ + long i,x,y,v,s; + v = value; + + for (i=0; iwidth() - 1) * F_RAND()/F_RAND_MAX; + y = (in->height() - 1) * F_RAND()/F_RAND_MAX; + length = getLength(); + height = getHeight(); + s = getShift() * getDir(); + if (s!=0){ + get8(x,y); + put8(x+s,y); + } + } + } + void shift16(){ + long i,x,y,v,s; + v = value; + + for (i=0; iwidth() - 1) * F_RAND()/F_RAND_MAX; + y = (in->height() - 1) * F_RAND()/F_RAND_MAX; + length = getLength(); + height = getHeight(); + s = getShift() * getDir(); + if (s!=0){ + get16(x,y); + put16(x+s,y); + } + } + } + //以下固有のパラメータ + long value; + long shiftMax; + long shiftMin; + long lengthMax; + long lengthMin; + long heightMax; + long heightMin; + + long shift; + long length; + long height; + PF_PixelPtr buf; + long bufSize; + +}; +*/ + +//------------------------------------------------------- +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 // RandomShift_H diff --git a/RandomShift/RandomShiftPiPL.r b/RandomShift/RandomShiftPiPL.r new file mode 100644 index 0000000..808d797 --- /dev/null +++ b/RandomShift/RandomShiftPiPL.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 + }, + +#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/RandomShift/Win/RandomShift.vcxproj b/RandomShift/Win/RandomShift.vcxproj new file mode 100644 index 0000000..c609fd4 --- /dev/null +++ b/RandomShift/Win/RandomShift.vcxproj @@ -0,0 +1,586 @@ +サソ + + + + Debug + Win32 + + + Debug + x64 + + + Release-MD + Win32 + + + Release-MD + x64 + + + Release + Win32 + + + Release + x64 + + + + {A43E360B-7EF0-45BC-BD56-9F6E6853472E} + RandomShift + 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/RandomShift.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/RandomShift.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/RandomShift.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/RandomShift.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/RandomShift.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/RandomShift.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/RandomShift/Win/RandomShift.vcxproj.filters b/RandomShift/Win/RandomShift.vcxproj.filters new file mode 100644 index 0000000..6bb3d76 --- /dev/null +++ b/RandomShift/Win/RandomShift.vcxproj.filters @@ -0,0 +1,160 @@ + + + + + {4ef77ee7-4020-4849-99e8-e17b01d8a0fa} + h;hpp;hxx;hm;inl;fi;fd + + + {9f82b96e-3db2-44b2-a44c-11c25867e371} + + + {03913a83-b958-4bb5-9004-d30ba3db2c46} + ico;cur;bmp;dlg;rc2;rct;bin;cnt;rtf;gif;jpg;jpeg;jpe + + + {032d6fbe-fc1a-41b7-ae9b-135120d8a3e4} + + + {16ac0c87-771c-4a06-9c13-474bcf3493c0} + + + {73895a22-8d83-4a59-adc5-345a9eb21cfd} + + + {e938e918-1859-481c-b591-b81efcf1d6a3} + + + {f2cbd50d-215b-4114-9d8a-defb06a3bd6c} + + + + + 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 + + + Supporting code\Fs + + + + + Resource Files + + + + + + Supporting code\AE + + + Supporting code\AE + + + Supporting code\AE + + + Supporting code\AE + + + Supporting code\Fs + + + Supporting code\Fs + + + + + Resource Files + + + \ No newline at end of file diff --git a/RandomShift/Win/RandomShiftPiPL.rc b/RandomShift/Win/RandomShiftPiPL.rc new file mode 100644 index 0000000..28ee1ef --- /dev/null +++ b/RandomShift/Win/RandomShiftPiPL.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 RandomShift", + + "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 RandomShift", + + "MIB8", + 0x6165464CL, + 0L, + 4L + 8L, + + +END + diff --git a/RgbToAlpha/Fs_Target.h b/RgbToAlpha/Fs_Target.h new file mode 100644 index 0000000..14d9e30 --- /dev/null +++ b/RgbToAlpha/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 RgbToAlpha" + +//----------------------------------------------------------------------------------- +//プラグインの説明に使われる文字 +#define FS_DESCRIPTION "RGBの値をAlphaへ書き込みます。" + +//----------------------------------------------------------------------------------- +//プラグインが表示されるメニュー名 +//#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/RgbToAlpha/RgbToAlpha.cpp b/RgbToAlpha/RgbToAlpha.cpp new file mode 100644 index 0000000..8895fed --- /dev/null +++ b/RgbToAlpha/RgbToAlpha.cpp @@ -0,0 +1,491 @@ +//----------------------------------------------------------------------------------- +/* + F's Plugins for VS2010/VS2012 +*/ +//----------------------------------------------------------------------------------- + +#include "RgbToAlpha.h" + + +static PF_Pixel COL_W = {0xFF,0xFF,0xFF,0xFF}; +static PF_Pixel COL_BL = {0xFF,0,0,0}; + +//------------------------------------------------------------------------------------------------- +//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_SUPERVISE | + PF_ParamFlag_CANNOT_INTERP; + + PF_ADD_POPUP( STR_POP1, + STR_POP, //メニューの数 + STR_POP_DEF, //デフォルト + STR_POP2, + ID_POP + ); + + AEFX_CLR_STRUCT(def); + def.ui_flags = PF_PUI_DISABLED; + PF_ADD_COLOR( STR_COLOR, + 0xFF, + 0x00, + 0x00, + ID_COLOR + ); + + AEFX_CLR_STRUCT(def); + PF_ADD_CHECKBOX(STR_REV1, + STR_REV2, + FALSE, + 0, + ID_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){ + A_long pop=0; + ERR(ae.GetPOPUP(ID_POP,&pop)); + ERR(ae.UI_DISABLE(ID_COLOR,(pop!=3) )); + 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){ + A_long v = ((inP->red * 77) + (inP->green * 151) + (inP->blue *28) )*inP->alpha / (256 *PF_MAX_CHAN8); + outP->blue = niP->col.blue; + outP->green = niP->col.green; + outP->red = niP->col.red; + if ( niP->rev){ + outP->alpha = RoundByteFpLong(v) ^ PF_MAX_CHAN8; + }else{ + outP->alpha = RoundByteFpLong(v); + } + } + + 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){ + A_long v = ((inP->red * 77) + (inP->green * 151) + (inP->blue *28) ) / 256; + v = v *inP->alpha / PF_MAX_CHAN16; + outP->blue = niP->col.blue; + outP->green = niP->col.green; + outP->red = niP->col.red; + if ( niP->rev){ + outP->alpha = PF_MAX_CHAN16 - RoundShort(v); + }else{ + outP->alpha = RoundShort(v); + } + } + + 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){ + PF_FpShort v = ((inP->red * 77/256) + (inP->green * 151/256) + (inP->blue *28/256) ) * inP->alpha; + outP->blue = niP->col.blue; + outP->green = niP->col.green; + outP->red = niP->col.red; + if ( niP->rev){ + outP->alpha = (PF_FpShort)1.0 -RoundFpShort(v); + }else{ + outP->alpha = RoundFpShort(v); + } + } + + return err; +} +//------------------------------------------------------------------------------------------------- +static ParamInfo16 to16(ParamInfo8 *prm8) +{ + ParamInfo16 prm16; + prm16.col = CONV8TO16( prm8->col); + prm16.rev = prm8->rev; + return prm16; +} +//------------------------------------------------------------------------------------------------- +static ParamInfo32 to32(ParamInfo8 *prm8) +{ + ParamInfo32 prm32; + prm32.col = CONV8TO32( prm8->col); + prm32.rev = prm8->rev; + return prm32; +} + +//------------------------------------------------------------------------------------------------- +static PF_Err GetParams(CFsAE *ae, ParamInfo8 *infoP) +{ + PF_Err err = PF_Err_NONE; + + A_long p =0; + ERR(ae->GetPOPUP(ID_POP,&p)); + switch(p) + { + case 1: + infoP->col = COL_W; + break; + case 2: + infoP->col = COL_BL; + break; + case 3: + default: + ERR(ae->GetCOLOR(ID_COLOR,&infoP->col)); + break; + } + ERR(ae->GetCHECKBOX(ID_CB,&infoP->rev)); + + return err; +} +//------------------------------------------------------------------------------------------------- +static PF_Err + Exec (CFsAE *ae , ParamInfo8 *infoP) +{ + PF_Err err = PF_Err_NONE; + + //画面をコピー + ERR(ae->CopyInToOut()); + 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){ + 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_data, + PF_OutData *out_data, + PF_PreRenderExtra *extra) +{ + PF_Err err = PF_Err_NONE; + CFsAE ae(in_data,out_data,extra,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 *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){ + 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* extra) +{ + PF_Err err = PF_Err_NONE; + + AEGP_SuiteHandler suites(in_data->pica_basicP); + + suites.ANSICallbacksSuite1()->sprintf( out_data->return_msg, + "%s", + reinterpret_cast(extra)); + + 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/RgbToAlpha/RgbToAlpha.h b/RgbToAlpha/RgbToAlpha.h new file mode 100644 index 0000000..8cc4122 --- /dev/null +++ b/RgbToAlpha/RgbToAlpha.h @@ -0,0 +1,89 @@ +//----------------------------------------------------------------------------------- +/* + F's Plugins for VS2010/VS2012 +*/ +//----------------------------------------------------------------------------------- + +#pragma once + +#ifndef RgbToAlpha_H +#define RgbToAlpha_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_POP, + ID_COLOR, + ID_CB, + ID_NUM_PARAMS + }; + +#define STR_POP1 "塗りつぶし色" +#define STR_POP2 "白|黒|指定色" +#define STR_POP 3 +#define STR_POP_DEF 1 + +#define STR_COLOR "指定色" +#define STR_REV1 "Alphaを反転" +#define STR_REV2 "Rev" + +typedef struct ParamInfo8{ + PF_Pixel8 col; + PF_Boolean rev; +} ParamInfo8,*ParamInfo8P,**ParamInfo8H; + +typedef struct ParamInfo16{ + PF_Pixel16 col; + PF_Boolean rev; +} ParamInfo16,*ParamInfo16P,**ParamInfo16H; + +typedef struct ParamInfo32{ + PF_PixelFloat col; + PF_Boolean rev; +} 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 // RgbToAlpha_H diff --git a/RgbToAlpha/RgbToAlphaPiPL.r b/RgbToAlpha/RgbToAlphaPiPL.r new file mode 100644 index 0000000..74fc5dc --- /dev/null +++ b/RgbToAlpha/RgbToAlphaPiPL.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 { + 0 + } + } +}; + diff --git a/RgbToAlpha/Win/RgbToAlpha.vcxproj b/RgbToAlpha/Win/RgbToAlpha.vcxproj new file mode 100644 index 0000000..f2949e1 --- /dev/null +++ b/RgbToAlpha/Win/RgbToAlpha.vcxproj @@ -0,0 +1,329 @@ +サソ + + + + Debug + x64 + + + Release-MD + x64 + + + Release + x64 + + + + {9F4EBA64-296D-47FB-A88E-3BC4A2EE4D4C} + RgbToAlpha + 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/RgbToAlpha.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/RgbToAlpha.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/RgbToAlpha.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/RgbToAlpha/Win/RgbToAlpha.vcxproj.filters b/RgbToAlpha/Win/RgbToAlpha.vcxproj.filters new file mode 100644 index 0000000..97487e7 --- /dev/null +++ b/RgbToAlpha/Win/RgbToAlpha.vcxproj.filters @@ -0,0 +1,154 @@ + + + + + {3ec9f08c-bd58-426e-850a-96e486ee41d7} + h;hpp;hxx;hm;inl;fi;fd + + + {2f66bef9-1f98-40ee-bbc3-dd2242351150} + + + {3ec31575-1edf-47ec-851f-35ba20f833b9} + ico;cur;bmp;dlg;rc2;rct;bin;cnt;rtf;gif;jpg;jpeg;jpe + + + {24b863ba-d910-47aa-a12e-3f7805605b8d} + + + {86b84050-543e-4399-bace-f6452afe3b37} + + + {b9fd75e8-a276-41ef-b258-52b258207dc6} + + + {b7ddedf3-eca0-4c23-a8d8-3c3743118a41} + + + {42723ee3-2b08-471e-9ece-8754e9995104} + + + + + 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/RgbToAlpha/Win/RgbToAlphaPiPL.rc b/RgbToAlpha/Win/RgbToAlphaPiPL.rc new file mode 100644 index 0000000..29070d4 --- /dev/null +++ b/RgbToAlpha/Win/RgbToAlphaPiPL.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 RgbToAlpha\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, + "\x0EF's RgbToAlpha\0", + + "MIB8", + 0x6165464CL, + 0L, + 4L + 0L, + + +END + diff --git a/ScreenShakeDir/Fs_Target.h b/ScreenShakeDir/Fs_Target.h new file mode 100644 index 0000000..a0dd92c --- /dev/null +++ b/ScreenShakeDir/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 ScreenShakeDir" + +//----------------------------------------------------------------------------------- +//プラグインの説明に使われる文字 +#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/ScreenShakeDir/ScreenShakeDir.cpp b/ScreenShakeDir/ScreenShakeDir.cpp new file mode 100644 index 0000000..18fedad --- /dev/null +++ b/ScreenShakeDir/ScreenShakeDir.cpp @@ -0,0 +1,545 @@ +//----------------------------------------------------------------------------------- +/* + F's Plugins for VS2010/VS2012 +*/ +//----------------------------------------------------------------------------------- + +#include "ScreenShakeDir.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 +*/ +//----------------------------------------------------------------------------------- +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); + PF_ADD_FIXED( STR_VALUE, //パラメータの名前 + 0, //数値入力する場合の最小値 + 2000, //数値入力する場合の最大値 + 0, //スライダーの最小値 + 100, //スライダーの最大値 + 10, //デフォルトの値 + 1,//数値表示に関するフラグ + 0, + 0, + ID_VALUE + ); + + AEFX_CLR_STRUCT(def); + + PF_ADD_SLIDER( STR_VALUE_RND, //パラメータの名前 + 0, //数値入力する場合の最小値 + 100, //数値入力する場合の最大値 + 0, //スライダーの最小値 + 100, //スライダーの最大値 + 10, //デフォルトの値 + ID_VALUE_RND + ); + + AEFX_CLR_STRUCT(def); + PF_ADD_ANGLE(STR_DIR,15.0,ID_DIR); + + AEFX_CLR_STRUCT(def); + PF_ADD_SLIDER( STR_DIR_RND, //パラメータの名前 + 0, //数値入力する場合の最小値 + 360, //数値入力する場合の最大値 + 0, //スライダーの最小値 + 45, //スライダーの最大値 + 10, //デフォルトの値 + ID_DIR_RND + ); + + AEFX_CLR_STRUCT(def); + PF_ADD_SLIDER( STR_RANDOMSEED, //パラメータの名前 + 0, //数値入力する場合の最小値 + 99, //数値入力する場合の最大値 + 0, //スライダーの最小値 + 30, //スライダーの最大値 + 0, //デフォルトの値 + ID_RANDOMSEED + ); + + //---------------------------------------------------------------- + AEFX_CLR_STRUCT(def); + PF_ADD_POPUP( STR_EDGE_STATUS1, + 4, //メニューの数 + 1, //デフォルト + STR_EDGE_STATUS2, + ID_EDGE_STATUS + ); + //---------------------------------------------------------------- +#ifdef TEST_MODE + //チェックボックス + AEFX_CLR_STRUCT(def); + PF_ADD_CHECKBOX(STR_TEST_TIME_CB1, + STR_TEST_TIME_CB2, + FALSE, + 0, + ID_TEST_TIME_CB + ); +#endif + + 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); + PF_Fixed new_x, new_y; + + if (infoP){ + new_x = ((A_long)xL << 16) + infoP->shiftX; + new_y = ((A_long)yL << 16) + infoP->shiftY; + *outP = getPixel8(&infoP->gp,new_x,new_y); + } + + 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); + PF_Fixed new_x, new_y; + + if (infoP){ + new_x = ((A_long)xL << 16) + infoP->shiftX; + new_y = ((A_long)yL << 16) + infoP->shiftY; + *outP = getPixel16(&infoP->gp,new_x,new_y); + } + + 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); + PF_Fixed new_x, new_y; + + if (infoP){ + new_x = ((A_long)xL << 16) + infoP->shiftX; + new_y = ((A_long)yL << 16) + infoP->shiftY; + *outP = getPixel32(&infoP->gp,new_x,new_y); + } + + return err; +} +#endif +//------------------------------------------------------------------------------------------------- +static void PramSet(CFsAE *ae, ParamInfo *infoP) +{ + + //--------------------------------------------------------------- + //移動距離 + PF_Fixed valueMin = infoP->value * (100 - infoP->value_rand) / 100; + + PF_Fixed valueFin = F_RAND2( valueMin,infoP->value); + //--------------------------------------------------------------- + //移動方向 + PF_Fixed dirFin = infoP->dir + F_RAND2((-1*infoP->dir_rand),infoP->dir_rand); + if ( (ae->frame() % 2)==0 ) { + dirFin += (180L<<16); + } + dirFin = RoundAngle360(dirFin); + //--------------------------------------------------------------- + //移動距離をXYに分ける + CRotCalc rt(ae->in_data); + rt.SetRotLength(dirFin, valueFin); + infoP->shiftX = rt.x(); + infoP->shiftY = rt.y(); + //--------------------------------------------------------------- + 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->GetFIXED(ID_VALUE,&infoP->value)); + if (!err) infoP->value = ae->downScaleNoClip(infoP->value); + + ERR(ae->GetADD(ID_VALUE_RND,&infoP->value_rand)); + + ERR(ae->GetFIXED(ID_DIR,&infoP->dir)); + if (!err) { + infoP->dir = RoundAngle360(infoP->dir); + } + ERR(ae->GetFIXED(ID_DIR_RND,&infoP->dir_rand)); + if (!err) infoP->dir_rand = infoP->dir_rand <<16;//PF_Fixedにあわせる + ERR(ae->GetADD(ID_RANDOMSEED,&infoP->randomseed)); + ERR(ae->GetADD(ID_EDGE_STATUS,&infoP->edge_status)); + + return err; +} +//------------------------------------------------------------------------------------------------- +static PF_Err Exec(CFsAE *ae, ParamInfo *infoP) +{ + PF_Err err = PF_Err_NONE; + if ( (infoP->shiftX==0)&&(infoP->shiftY==0)){ + ERR(ae->CopyInToOut()); + }else{ + F_SRAND(ae->frame()+ infoP->randomseed); + switch(ae->pixelFormat()) + { + #if defined(SUPPORT_SMARTFX) + case PF_PixelFormat_ARGB128: + ae->iterate32((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)); + PramSet(&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){ + PramSet(&ae,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* extra) +{ + PF_Err err = PF_Err_NONE; + + AEGP_SuiteHandler suites(in_data->pica_basicP); + + suites.ANSICallbacksSuite1()->sprintf( out_data->return_msg, + "%s", + reinterpret_cast(extra)); + + 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/ScreenShakeDir/ScreenShakeDir.h b/ScreenShakeDir/ScreenShakeDir.h new file mode 100644 index 0000000..9284759 --- /dev/null +++ b/ScreenShakeDir/ScreenShakeDir.h @@ -0,0 +1,108 @@ +//----------------------------------------------------------------------------------- +/* + PluginSkeleton for VS2010 +*/ +//----------------------------------------------------------------------------------- + +#pragma once +#ifndef ScreenShakeDir_H +#define ScreenShakeDir_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/FsScreenShake.h" + + +#define STR_VALUE "大きさ(px)" +#define STR_VALUE_RND "大きさのばらつき(%)" +#define STR_DIR "方向(Rot)" +#define STR_DIR_RND "方向のばらつき(Rot)" +#define STR_RANDOMSEED "Random Seed" +#define STR_EDGE_STATUS1 "縁の処理" +#define STR_EDGE_STATUS2 "透明|伸ばす|繰り返す1|繰り返す2" + +#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_VALUE, // 画面動の大きさ + ID_VALUE_RND, + ID_DIR, // 画面動の方向 + ID_DIR_RND, // 画面動の方向のばらつき + ID_RANDOMSEED, + ID_EDGE_STATUS, + ID_NUM_PARAMS + }; + +enum { + edge_none =1, + edge_fill, + edge_rep, + edge_mirror +}; + +//プラグイン独自のパラメータを集めた構造体 +typedef struct{ + //PF_Fixed dpi; + //PF_Fixed mm; + PF_Fixed value; + A_long value_rand; + PF_Fixed dir; + PF_Fixed dir_rand; + A_long randomseed; + A_long edge_status; + + PF_Fixed shiftX; + PF_Fixed shiftY; + 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 // ScreenShakeDir_H diff --git a/ScreenShakeDir/ScreenShakeDirPiPL.r b/ScreenShakeDir/ScreenShakeDirPiPL.r new file mode 100644 index 0000000..1b4bea0 --- /dev/null +++ b/ScreenShakeDir/ScreenShakeDirPiPL.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/ScreenShakeDir/Win/ScreenShakeDir.vcxproj b/ScreenShakeDir/Win/ScreenShakeDir.vcxproj new file mode 100644 index 0000000..066caee --- /dev/null +++ b/ScreenShakeDir/Win/ScreenShakeDir.vcxproj @@ -0,0 +1,586 @@ +サソ + + + + Debug + Win32 + + + Debug + x64 + + + Release-MD + Win32 + + + Release-MD + x64 + + + Release + Win32 + + + Release + x64 + + + + {12CE4732-9565-4A94-BA30-EB26CA530AAD} + ScreenShakeDir + 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 + 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/ScreenShakeDir.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/ScreenShakeDir.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/ScreenShakeDir.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)_CS4.aex + true + false + $(IntDir)$(ProjectName).pdb + Windows + false + + + $(IntDir)$(ProjectName).lib + MachineX86 + + + + + _DEBUG;%(PreprocessorDefinitions) + true + true + Win32 + .\Debug/ScreenShakeDir.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)_CS4.aex + true + false + $(IntDir)$(ProjectName).pdb + Windows + false + + + $(IntDir)$(ProjectName).lib + MachineX86 + + + + + _DEBUG;%(PreprocessorDefinitions) + true + true + X64 + .\Debug/ScreenShakeDir.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/ScreenShakeDir.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 + 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/ScreenShakeDir/Win/ScreenShakeDir.vcxproj.filters b/ScreenShakeDir/Win/ScreenShakeDir.vcxproj.filters new file mode 100644 index 0000000..b38c1c6 --- /dev/null +++ b/ScreenShakeDir/Win/ScreenShakeDir.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} + + + {76b7eadb-c108-4571-bf96-81552355bae7} + + + {6b6635bd-1d48-48d4-834e-2f469e96724a} + + + {e5e7c61b-e384-42cb-bb5a-9311ba0cab79} + + + {5e1642b2-fd3f-4e7f-b220-086d3b768f64} + + + + + 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 + + + Supporting code\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/ScreenShakeDir/Win/ScreenShakeDirPiPL.rc b/ScreenShakeDir/Win/ScreenShakeDirPiPL.rc new file mode 100644 index 0000000..67be1bd --- /dev/null +++ b/ScreenShakeDir/Win/ScreenShakeDirPiPL.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 ScreenShakeDir\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 + 722432L, + + "MIB8", + 0x65494E46L, + 0L, + 2L + 0L, + + "MIB8", + "OLGe", + 0L, + 4L, + 33556036L, + + "MIB8", + "2LGe", + 0L, + 4L, + 73L, + + "MIB8", + "ANMe", + 0, 0x0, + 20, 0x0, + "\x12F's ScreenShakeDir\0", + + "MIB8", + 0x6165464CL, + 0L, + 4L + 0L, + + +END + diff --git a/ScreenShakeMM/Fs_Target.h b/ScreenShakeMM/Fs_Target.h new file mode 100644 index 0000000..b70dfe4 --- /dev/null +++ b/ScreenShakeMM/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 ScreenShakeMM" + +//----------------------------------------------------------------------------------- +//プラグインの説明に使われる文字 +#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/ScreenShakeMM/ScreenShakeMM.cpp b/ScreenShakeMM/ScreenShakeMM.cpp new file mode 100644 index 0000000..5362ab3 --- /dev/null +++ b/ScreenShakeMM/ScreenShakeMM.cpp @@ -0,0 +1,561 @@ +//----------------------------------------------------------------------------------- +/* + F's Plugins for VS2010/VS2012 +*/ +//----------------------------------------------------------------------------------- + +#include "ScreenShakeMM.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 +*/ +//----------------------------------------------------------------------------------- +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); + PF_ADD_FIXED( STR_MM, //パラメータの名前 + 0, //数値入力する場合の最小値 + 400, //数値入力する場合の最大値 + 0, //スライダーの最小値 + 50, //スライダーの最大値 + 2, //デフォルトの値 + 1, //数値表示に関するフラグ + 0, + 0, + ID_MM + ); + + AEFX_CLR_STRUCT(def); + + PF_ADD_SLIDER( STR_VALUE_RND, //パラメータの名前 + 0, //数値入力する場合の最小値 + 100, //数値入力する場合の最大値 + 0, //スライダーの最小値 + 100, //スライダーの最大値 + 10, //デフォルトの値 + ID_VALUE_RND + ); + + AEFX_CLR_STRUCT(def); + PF_ADD_ANGLE(STR_DIR,15.0,ID_DIR); + + AEFX_CLR_STRUCT(def); + PF_ADD_SLIDER( STR_DIR_RND, //パラメータの名前 + 0, //数値入力する場合の最小値 + 360, //数値入力する場合の最大値 + 0, //スライダーの最小値 + 45, //スライダーの最大値 + 10, //デフォルトの値 + ID_DIR_RND + ); + + AEFX_CLR_STRUCT(def); + PF_ADD_SLIDER( STR_RANDOMSEED, //パラメータの名前 + 0, //数値入力する場合の最小値 + 99, //数値入力する場合の最大値 + 0, //スライダーの最小値 + 30, //スライダーの最大値 + 0, //デフォルトの値 + ID_RANDOMSEED + ); + + AEFX_CLR_STRUCT(def); + PF_ADD_POPUP( STR_EDGE_STATUS1, + 4, //メニューの数 + 1, //デフォルト + STR_EDGE_STATUS2, + ID_EDGE_STATUS + ); + //---------------------------------------------------------------- + AEFX_CLR_STRUCT(def); + PF_ADD_FIXED( STR_DPI, //パラメータの名前 + 10, //数値入力する場合の最小値 + 400, //数値入力する場合の最大値 + 10, //スライダーの最小値 + 192, //スライダーの最大値 + 144, //デフォルトの値 + 1, //数値表示に関するフラグ + 0, + 0, + ID_DPI + ); + //---------------------------------------------------------------- +#ifdef TEST_MODE + //チェックボックス + AEFX_CLR_STRUCT(def); + PF_ADD_CHECKBOX(STR_TEST_TIME_CB1, + STR_TEST_TIME_CB2, + FALSE, + 0, + ID_TEST_TIME_CB + ); +#endif + + 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); + PF_Fixed new_x, new_y; + + if (infoP){ + new_x = ((A_long)xL << 16) + infoP->shiftX; + new_y = ((A_long)yL << 16) + infoP->shiftY; + *outP = getPixel8(&infoP->gp,new_x,new_y); + } + + 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); + PF_Fixed new_x, new_y; + + if (infoP){ + new_x = ((A_long)xL << 16) + infoP->shiftX; + new_y = ((A_long)yL << 16) + infoP->shiftY; + *outP = getPixel16(&infoP->gp,new_x,new_y); + } + + 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); + PF_Fixed new_x, new_y; + + if (infoP){ + new_x = ((A_long)xL << 16) + infoP->shiftX; + new_y = ((A_long)yL << 16) + infoP->shiftY; + *outP = getPixel32(&infoP->gp,new_x,new_y); + } + + return err; +} +#endif +//------------------------------------------------------------------------------------------------- +static void PramSet(CFsAE *ae, ParamInfo *infoP) +{ + + //--------------------------------------------------------------- + //移動距離 + PF_Fixed valueMin = infoP->value * (100 - infoP->value_rand) / 100; + + PF_Fixed valueFin = F_RAND2( valueMin,infoP->value); + //--------------------------------------------------------------- + //移動方向 + PF_Fixed dirFin = infoP->dir + F_RAND2((-1*infoP->dir_rand),infoP->dir_rand); + if ( (ae->frame() % 2)==0 ) { + dirFin += (180L<<16); + } + dirFin = RoundAngle360(dirFin); + //--------------------------------------------------------------- + //移動距離をXYに分ける + CRotCalc rt(ae->in_data); + rt.SetRotLength(dirFin, valueFin); + infoP->shiftX = rt.x(); + infoP->shiftY = rt.y(); + //--------------------------------------------------------------- + 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; + + PF_Fixed v,dpi; + + ERR(ae->GetFIXED(ID_MM,&v)); + ERR(ae->GetFIXED(ID_DPI,&dpi)); + infoP->value = mm2px(v,dpi); + if (!err) infoP->value = ae->downScaleNoClip(infoP->value); + + ERR(ae->GetADD(ID_VALUE_RND,&infoP->value_rand)); + + ERR(ae->GetFIXED(ID_DIR,&infoP->dir)); + if (!err) { + infoP->dir = RoundAngle360(infoP->dir); + } + ERR(ae->GetFIXED(ID_DIR_RND,&infoP->dir_rand)); + if (!err) infoP->dir_rand = infoP->dir_rand <<16;//PF_Fixedにあわせる + ERR(ae->GetADD(ID_RANDOMSEED,&infoP->randomseed)); + ERR(ae->GetADD(ID_EDGE_STATUS,&infoP->edge_status)); + + return err; +} +//------------------------------------------------------------------------------------------------- +static PF_Err Exec(CFsAE *ae, ParamInfo *infoP) +{ + PF_Err err = PF_Err_NONE; + if ( (infoP->shiftX==0)&&(infoP->shiftY==0)){ + ERR(ae->CopyInToOut()); + }else{ + F_SRAND(ae->frame()+ infoP->randomseed); + switch(ae->pixelFormat()) + { + #if defined(SUPPORT_SMARTFX) + case PF_PixelFormat_ARGB128: + ae->iterate32((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)); + PramSet(&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){ + PramSet(&ae,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* extra) +{ + PF_Err err = PF_Err_NONE; + + AEGP_SuiteHandler suites(in_data->pica_basicP); + + suites.ANSICallbacksSuite1()->sprintf( out_data->return_msg, + "%s", + reinterpret_cast(extra)); + + 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/ScreenShakeMM/ScreenShakeMM.h b/ScreenShakeMM/ScreenShakeMM.h new file mode 100644 index 0000000..17c0492 --- /dev/null +++ b/ScreenShakeMM/ScreenShakeMM.h @@ -0,0 +1,115 @@ +//----------------------------------------------------------------------------------- +/* + PluginSkeleton for VS2010 +*/ +//----------------------------------------------------------------------------------- + +#pragma once +#ifndef ScreenShakeMM_H +#define ScreenShakeMM_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/FsScreenShake.h" + + + +#define STR_MM "大きさ(mm)" + +#define STR_VALUE_RND "大きさのばらつき(%)" +#define STR_DIR "方向(Rot)" +#define STR_DIR_RND "方向のばらつき(Rot)" +#define STR_RANDOMSEED "Random Seed" +#define STR_EDGE_STATUS1 "縁の処理" +#define STR_EDGE_STATUS2 "透明|伸ばす|繰り返す1|繰り返す2" +#define STR_DPI "解像度(dpi)" + + + +#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_MM, // 画面動の大きさ + ID_VALUE_RND, + ID_DIR, // 画面動の方向 + ID_DIR_RND, // 画面動の方向のばらつき + ID_RANDOMSEED, + ID_EDGE_STATUS, + ID_DPI, + ID_NUM_PARAMS + }; + + +enum { + edge_none =1, + edge_fill, + edge_rep, + edge_mirror +}; + +//プラグイン独自のパラメータを集めた構造体 +typedef struct{ + //PF_Fixed dpi; + //PF_Fixed mm; + PF_Fixed value; + A_long value_rand; + PF_Fixed dir; + PF_Fixed dir_rand; + A_long randomseed; + A_long edge_status; + + PF_Fixed shiftX; + PF_Fixed shiftY; + 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 // ScreenShakeMM_H diff --git a/ScreenShakeMM/ScreenShakeMMPiPL.r b/ScreenShakeMM/ScreenShakeMMPiPL.r new file mode 100644 index 0000000..1b4bea0 --- /dev/null +++ b/ScreenShakeMM/ScreenShakeMMPiPL.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/ScreenShakeMM/Win/ScreenShakeDirPiPL.rc b/ScreenShakeMM/Win/ScreenShakeDirPiPL.rc new file mode 100644 index 0000000..67e0ae2 --- /dev/null +++ b/ScreenShakeMM/Win/ScreenShakeDirPiPL.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 ScreenShakeDir\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 + 722432L, + + "MIB8", + 0x65494E46L, + 0L, + 2L + 0L, + + "MIB8", + "OLGe", + 0L, + 4L, + 33556036L, + + "MIB8", + "2LGe", + 0L, + 4L, + 73L, + + "MIB8", + "ANMe", + 0, 0x0, + 20, 0x0, + "\x12F's ScreenShakeDir\0", + + "MIB8", + 0x6165464CL, + 0L, + 4L + 0L, + + +END + diff --git a/ScreenShakeMM/Win/ScreenShakeMM.vcxproj b/ScreenShakeMM/Win/ScreenShakeMM.vcxproj new file mode 100644 index 0000000..1649100 --- /dev/null +++ b/ScreenShakeMM/Win/ScreenShakeMM.vcxproj @@ -0,0 +1,586 @@ +サソ + + + + Debug + Win32 + + + Debug + x64 + + + Release-MD + Win32 + + + Release-MD + x64 + + + Release + Win32 + + + Release + x64 + + + + {AB4B1925-42DA-49A6-B439-EBF997C564A3} + ScreenShakeMM + 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 + 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/ScreenShakeMM.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/ScreenShakeMM.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/ScreenShakeMM.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)_CS4.aex + true + false + $(IntDir)$(ProjectName).pdb + Windows + false + + + $(IntDir)$(ProjectName).lib + MachineX86 + + + + + _DEBUG;%(PreprocessorDefinitions) + true + true + Win32 + .\Debug/ScreenShakeMM.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)_CS4.aex + true + false + $(IntDir)$(ProjectName).pdb + Windows + false + + + $(IntDir)$(ProjectName).lib + MachineX86 + + + + + _DEBUG;%(PreprocessorDefinitions) + true + true + X64 + .\Debug/ScreenShakeMM.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/ScreenShakeMM.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 + 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/ScreenShakeMM/Win/ScreenShakeMM.vcxproj.filters b/ScreenShakeMM/Win/ScreenShakeMM.vcxproj.filters new file mode 100644 index 0000000..b84bb37 --- /dev/null +++ b/ScreenShakeMM/Win/ScreenShakeMM.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} + + + {76b7eadb-c108-4571-bf96-81552355bae7} + + + {6b6635bd-1d48-48d4-834e-2f469e96724a} + + + {e5e7c61b-e384-42cb-bb5a-9311ba0cab79} + + + {5e1642b2-fd3f-4e7f-b220-086d3b768f64} + + + + + 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 + + + Supporting code\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/ScreenShakeMM/Win/ScreenShakeMMPiPL.rc b/ScreenShakeMM/Win/ScreenShakeMMPiPL.rc new file mode 100644 index 0000000..42f37f4 --- /dev/null +++ b/ScreenShakeMM/Win/ScreenShakeMMPiPL.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 ScreenShakeMM\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 + 722432L, + + "MIB8", + 0x65494E46L, + 0L, + 2L + 0L, + + "MIB8", + "OLGe", + 0L, + 4L, + 33556036L, + + "MIB8", + "2LGe", + 0L, + 4L, + 73L, + + "MIB8", + "ANMe", + 0, 0x0, + 20, 0x0, + "\x11F's ScreenShakeMM\0\0", + + "MIB8", + 0x6165464CL, + 0L, + 4L + 0L, + + +END + diff --git a/SelectColor/Fs_Target.h b/SelectColor/Fs_Target.h new file mode 100644 index 0000000..890be77 --- /dev/null +++ b/SelectColor/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 SelectColor" +//----------------------------------------------------------------------------------- +//プラグインの説明に使われる文字 +#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/SelectColor/SelectColor.cpp b/SelectColor/SelectColor.cpp new file mode 100644 index 0000000..e04d447 --- /dev/null +++ b/SelectColor/SelectColor.cpp @@ -0,0 +1,712 @@ +//----------------------------------------------------------------------------------- +/* + F's Plugins for VS2010/VS2012 +*/ +//----------------------------------------------------------------------------------- + + +#include "SelectColor.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); +//------------------------------------------------------------------------------------------------- +//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); + PF_ADD_CHECKBOX("Target0","実行する", FALSE,0, ID_TARGET0); + AEFX_CLR_STRUCT(def); + PF_ADD_COLOR( "color0", + 255, + 0, + 0, + ID_SRCCOL0 + ); + + AEFX_CLR_STRUCT(def); + PF_ADD_CHECKBOX("Target1","実行する", FALSE,0, ID_TARGET1); + AEFX_CLR_STRUCT(def); + PF_ADD_COLOR( "color1", + 0, + 255, + 0, + ID_SRCCOL1 + ); + AEFX_CLR_STRUCT(def); + PF_ADD_CHECKBOX("Target2","実行する", FALSE,0, ID_TARGET2); + AEFX_CLR_STRUCT(def); + PF_ADD_COLOR( "color2", + 0, + 0, + 255, + ID_SRCCOL2 + ); + AEFX_CLR_STRUCT(def); + PF_ADD_CHECKBOX("Target3","実行する", FALSE,0, ID_TARGET3); + AEFX_CLR_STRUCT(def); + PF_ADD_COLOR( "color3", + 0, + 255, + 255, + ID_SRCCOL3 + ); + AEFX_CLR_STRUCT(def); + PF_ADD_CHECKBOX("Target4","実行する", FALSE,0, ID_TARGET4); + AEFX_CLR_STRUCT(def); + PF_ADD_COLOR( "color4", + 255, + 0, + 255, + ID_SRCCOL4 + ); + AEFX_CLR_STRUCT(def); + PF_ADD_CHECKBOX("Target5","実行する", FALSE,0, ID_TARGET5); + AEFX_CLR_STRUCT(def); + PF_ADD_COLOR( "color5", + 255, + 255, + 0, + ID_SRCCOL5 + ); + AEFX_CLR_STRUCT(def); + PF_ADD_CHECKBOX("Target6","実行する", FALSE,0, ID_TARGET6); + AEFX_CLR_STRUCT(def); + PF_ADD_COLOR( "color6", + 255, + 255, + 255, + ID_SRCCOL6 + ); + + + + AEFX_CLR_STRUCT(def); + PF_ADD_CHECKBOX("Target7","実行する", FALSE,0, ID_TARGET7); + AEFX_CLR_STRUCT(def); + PF_ADD_COLOR( "元の色7", + 0, + 0, + 0, + ID_SRCCOL7 + ); + + + AEFX_CLR_STRUCT(def); + PF_ADD_CHECKBOX("Rev","反転する", FALSE,0, ID_REV); + + AEFX_CLR_STRUCT(def); + PF_ADD_SLIDER( "許容値",//パラメータの名前 + 0, //数値入力する場合の最小値 + PF_MAX_CHAN8, //数値入力する場合の最大値 + 0, //スライダーの最小値 + 15, //スライダーの最大値 + 0, //デフォルトの値 + 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; + /* + try{ + CFsAE ae; + err =ae.HandleChangedParam(in_data,out_data,params,outputP,extraP,ID_NUM_PARAMS); + if((!err)&&(in_data->appl_id != 'PrMr')){ + //-------------------- + + ERR(ae.GetNewEffectStreamAll()); + if (!err){ + A_Boolean hide_themB[ID_NUM_PARAMS]; + for ( A_long i=1; iout_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 PF_Boolean ComparePix8(PF_Pixel8 *s, PF_Pixel8 *d,A_long lv) +{ + return ( (ABS(s->red - d->red)<=lv)&&(ABS(s->green - d->green)<=lv)&&(ABS(s->blue - d->blue)<=lv) ); +} +//----------------------------------------------------------------------------------- +inline PF_Boolean ComparePix8Zero(PF_Pixel8 *s, PF_Pixel8 *d) +{ + return ( (s->red == d->red)&&(s->green == d->green)&&(s->blue == d->blue) ); +} +//----------------------------------------------------------------------------------- +inline PF_Boolean ComparePix16(PF_Pixel16 *s, PF_Pixel16 *d,A_long lv) +{ + return ( (ABS(s->red - d->red)<=lv)&&(ABS(s->green - d->green)<=lv)&&(ABS(s->blue - d->blue)<=lv) ); +} +//----------------------------------------------------------------------------------- +inline PF_Boolean ComparePix16Zero(PF_Pixel16 *s, PF_Pixel16 *d) +{ + return ( (s->red == d->red)&&(s->green == d->green)&&(s->blue == d->blue) ); +} +//----------------------------------------------------------------------------------- +inline PF_Boolean ComparePix32(PF_PixelFloat *s, PF_PixelFloat *d,PF_FpShort lv) +{ + return ( (ABS(s->red - d->red)<=lv)&&(ABS(s->green - d->green)<=lv)&&(ABS(s->blue - d->blue)<=lv) ); +} +//----------------------------------------------------------------------------------- +inline PF_Boolean ComparePix32Zero(PF_PixelFloat *s, PF_PixelFloat *d) +{ + return ( (s->red == d->red)&&(s->green == d->green)&&(s->blue == d->blue) ); +} +//----------------------------------------------------------------------------------- +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_Boolean b = FALSE; + for (int i=0; i< niP->count;i++){ + PF_Pixel8 c = niP->src[i]; + if ( ComparePix8(outP,&c,niP->lv)){ + b=TRUE; + break; + } + } + if ( b == niP->rev){ + outP->alpha = 0; + outP->red = PF_MAX_CHAN8; + outP->green = PF_MAX_CHAN8; + outP->blue = PF_MAX_CHAN8; + } + } + + 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){ + PF_Boolean b = FALSE; + for (int i=0; i< niP->count;i++){ + PF_Pixel8 c = niP->src[i]; + if ( ComparePix8Zero(outP,&c)){ + b=TRUE; + break; + } + } + if ( b == niP->rev){ + outP->alpha = 0; + outP->red = PF_MAX_CHAN8; + outP->green = PF_MAX_CHAN8; + outP->blue = 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; + + ParamInfo * niP = reinterpret_cast(refcon); + + if (niP){ + PF_Boolean b = FALSE; + PF_Pixel p = CONV16TO8(*outP); + for (int i=0; i< niP->count;i++){ + PF_Pixel c = niP->src[i]; + if ( ComparePix8(&p,&c,niP->lv)){ + b=TRUE; + break; + } + } + if ( b == niP->rev){ + outP->alpha = 0; + outP->red = PF_MAX_CHAN16; + outP->green = PF_MAX_CHAN16; + outP->blue = PF_MAX_CHAN16; + } + + } + + 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_Boolean b = FALSE; + PF_Pixel p = CONV16TO8(*outP); + for (int i=0; icount;i++){ + PF_Pixel c = niP->src[i]; + if ( ComparePix8Zero(&p,&c)){ + b = TRUE; + break; + } + } + if ( b == niP->rev){ + outP->alpha = 0; + outP->red = PF_MAX_CHAN16; + outP->green = PF_MAX_CHAN16; + outP->blue = 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; + + ParamInfo * niP = reinterpret_cast(refcon); + + if (niP){ + PF_Boolean b = FALSE; + PF_Pixel p = CONV32TO8(*outP); + for (int i=0; icount;i++){ + PF_Pixel c = niP->src[i]; + if ( ComparePix8(&p,&c,niP->lv)){ + b = TRUE; + break; + } + } + if ( b == niP->rev){ + outP->alpha = 0; + outP->red = 1.0; + outP->green = 1.0; + outP->blue = 1.0; + } + } + + 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_Boolean b = FALSE; + PF_Pixel p = CONV32TO8(*outP); + for (int i=0; icount;i++){ + PF_Pixel c = niP->src[i]; + if ( ComparePix8Zero(&p,&c)){ + b = TRUE; + break; + } + } + if ( b == niP->rev){ + outP->alpha = 0; + 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; + + A_u_long idx =0; + PF_Boolean b; + PF_Pixel p; + for ( A_long i=0; iGetCHECKBOX(TARGET_POS(i),&b)); + if ( (!err)&&(b==TRUE)){ + ERR(ae->GetCOLOR(SRCCOL_POS(i),&p)); + if (!err){ + infoP->src[idx] = p; + idx++; + } + } + } + if ( !err) infoP->count = idx; + ERR(ae->GetCHECKBOX(ID_REV,&infoP->rev)); + ERR(ae->GetADD(ID_LEVEL,&infoP->lv)); + return err; +} +//------------------------------------------------------------------------------------------------- +static PF_Err + Exec (CFsAE *ae , ParamInfo *infoP) +{ + PF_Err err = PF_Err_NONE; + + //画面をコピー + ERR(ae->CopyInToOut()); + + if (infoP->count<=0) + { + return err; + } + + 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,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){ + 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 *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; +} +//----------------------------------------------------------------------------------- +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 +//----------------------------------------------------------------------------------- +static PF_Err +RespondtoAEGP ( + PF_InData *in_data, + PF_OutData *out_data, + PF_ParamDef *params[], + PF_LayerDef *output, + void* extra) +{ + PF_Err err = PF_Err_NONE; + + AEGP_SuiteHandler suites(in_data->pica_basicP); + + suites.ANSICallbacksSuite1()->sprintf( out_data->return_msg, + "%s", + reinterpret_cast(extra)); + + 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/SelectColor/SelectColor.h b/SelectColor/SelectColor.h new file mode 100644 index 0000000..a33d8a0 --- /dev/null +++ b/SelectColor/SelectColor.h @@ -0,0 +1,101 @@ +//----------------------------------------------------------------------------------- +/* + F's Plugins for VS2010/VS2012 +*/ +//----------------------------------------------------------------------------------- +#pragma once +#ifndef SelectColor_H +#define SelectColor_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" + + +enum { + ID_INPUT = 0, // default input layer + + ID_TARGET0, + ID_SRCCOL0, + + ID_TARGET1, + ID_SRCCOL1, + + ID_TARGET2, + ID_SRCCOL2, + + ID_TARGET3, + ID_SRCCOL3, + + ID_TARGET4, + ID_SRCCOL4, + + ID_TARGET5, + ID_SRCCOL5, + + ID_TARGET6, + ID_SRCCOL6, + + ID_TARGET7, + ID_SRCCOL7, + + ID_REV, + ID_LEVEL, + ID_NUM_PARAMS +}; + +#define SelectColorCount 8 + +#define TARGET_POS(i) ( ID_TARGET0 + (i)*2 ) +#define SRCCOL_POS(i) ( ID_TARGET0 + (i)*2 +1) + +typedef struct ParamInfo{ + PF_Boolean rev; + A_long lv; + A_long count; + PF_Pixel8 src[SelectColorCount]; +} 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 // SelectColor_H \ No newline at end of file diff --git a/SelectColor/SelectColorPiPL.r b/SelectColor/SelectColorPiPL.r new file mode 100644 index 0000000..8f6b114 --- /dev/null +++ b/SelectColor/SelectColorPiPL.r @@ -0,0 +1,74 @@ +#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/SelectColor/Win/SelectColor.vcxproj b/SelectColor/Win/SelectColor.vcxproj new file mode 100644 index 0000000..ea6c811 --- /dev/null +++ b/SelectColor/Win/SelectColor.vcxproj @@ -0,0 +1,582 @@ +サソ + + + + Debug + Win32 + + + Debug + x64 + + + Release-MD + Win32 + + + Release-MD + x64 + + + Release + Win32 + + + Release + x64 + + + + {6585D4DB-91DB-4B4E-8E86-2AA4A7B7D362} + SelectColor + 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 + 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/SelectColor.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/SelectColor.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/SelectColor.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 + + + + + _DEBUG;%(PreprocessorDefinitions) + true + true + Win32 + .\Debug/SelectColor.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 + + + + + _DEBUG;%(PreprocessorDefinitions) + true + true + X64 + .\Debug/SelectColor.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/SelectColor.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 + 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/SelectColor/Win/SelectColor.vcxproj.filters b/SelectColor/Win/SelectColor.vcxproj.filters new file mode 100644 index 0000000..97eeb43 --- /dev/null +++ b/SelectColor/Win/SelectColor.vcxproj.filters @@ -0,0 +1,154 @@ + + + + + {c9c6b908-d46b-48e3-ba26-5285a18113a7} + h;hpp;hxx;hm;inl;fi;fd + + + {1f4f1d0d-cc9e-4300-924d-9938b5800907} + + + {a9c35b23-1da2-49d1-a0b0-6a6d1b108ba4} + ico;cur;bmp;dlg;rc2;rct;bin;cnt;rtf;gif;jpg;jpeg;jpe + + + {f6626881-ae93-446b-b64a-68c9d0d7bbc8} + + + {a3f99ebc-7024-48ca-b14a-8f1385fa6727} + + + {051ea6c5-9e15-4011-b9a8-f1e205dbeeff} + + + {226e464e-da4a-40bf-978c-e128d85d0062} + + + {e5978b97-971a-4423-9350-42b246aba700} + + + + + 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/SelectColor/Win/SelectColorPiPL.rc b/SelectColor/Win/SelectColorPiPL.rc new file mode 100644 index 0000000..4e2b920 --- /dev/null +++ b/SelectColor/Win/SelectColorPiPL.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 SelectColor", + + "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 SelectColor", + + "MIB8", + 0x6165464CL, + 0L, + 4L + 0L, + + +END + diff --git a/SelectedBlur/Fs_Entry.h b/SelectedBlur/Fs_Entry.h new file mode 100644 index 0000000..ee3be89 --- /dev/null +++ b/SelectedBlur/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/SelectedBlur/Fs_Target.h b/SelectedBlur/Fs_Target.h new file mode 100644 index 0000000..63ee9d5 --- /dev/null +++ b/SelectedBlur/Fs_Target.h @@ -0,0 +1,80 @@ +//----------------------------------------------------------------------------------- +/* + F's Plugins for VS2010/VS2012 +*/ +//----------------------------------------------------------------------------------- + +#pragma once +#ifndef FS_TARGET_H +#define FS_TARGET_H + +//----------------------------------------------------------------------------------- +//プラグインの識別に使われる名前 +#define FS_NAME "F's SelectedBlur" + +//----------------------------------------------------------------------------------- +//プラグインの説明に使われる文字 +#define FS_DESCRIPTION "選択した色だけぼかします。CS6対応テストバージョン" + +//----------------------------------------------------------------------------------- +//プラグインが表示されるメニュー名 +#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/SelectedBlur/SelectedBlur.cpp b/SelectedBlur/SelectedBlur.cpp new file mode 100644 index 0000000..9d066ff --- /dev/null +++ b/SelectedBlur/SelectedBlur.cpp @@ -0,0 +1,542 @@ +//----------------------------------------------------------------------------------- +/* + F's Plugins for VS2010/VS2012 +*/ +//----------------------------------------------------------------------------------- +#include "SelectedBlur.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_BLUR_VALUE,//パラメータの名前 + 0, //数値入力する場合の最小値 + 300, //数値入力する場合の最大値 + 0, //スライダーの最小値 + 30, //スライダーの最大値 + 0, //デフォルトの値 + ID_BLUR_VALUE + ); + //---------------------------------------------------------------- + AEFX_CLR_STRUCT(def); + PF_ADD_FIXED( STR_TARGET_RNG, //パラメータの名前 + 0, //数値入力する場合の最小値 + 100, //数値入力する場合の最大値 + 0, //スライダーの最小値 + 16, //スライダーの最大値 + 0, //デフォルトの値 + 1, //数値表示に関するフラグ + 0, + 0, + ID_TARGET_RANGE + ); + //---------------------------------------------------------------- + //チェックボックス + AEFX_CLR_STRUCT(def); + PF_ADD_CHECKBOX(STR_TARGET_ENABLE0, + STR_TARGET_ENABLE1, + TRUE, + 0, + ID_TARGET_ENABLED0 + ); + //色の指定 + AEFX_CLR_STRUCT(def); + PF_ADD_COLOR( STR_TARGET_COL0, + 0xFF, + 0x00, + 0x00, + ID_TARGET_COL0 + ); + //---------------------------------------------------------------- + //チェックボックス + AEFX_CLR_STRUCT(def); + PF_ADD_CHECKBOX(STR_TARGET_ENABLE0, + STR_TARGET_ENABLE1, + TRUE, + 0, + ID_TARGET_ENABLED1 + ); + //色の指定 + AEFX_CLR_STRUCT(def); + PF_ADD_COLOR( STR_TARGET_COL1, + 0x00, + 0xFF, + 0x00, + ID_TARGET_COL1 + ); + //---------------------------------------------------------------- + //チェックボックス + AEFX_CLR_STRUCT(def); + PF_ADD_CHECKBOX(STR_TARGET_ENABLE0, + STR_TARGET_ENABLE1, + FALSE, + 0, + ID_TARGET_ENABLED2 + ); + //色の指定 + AEFX_CLR_STRUCT(def); + PF_ADD_COLOR( STR_TARGET_COL2, + 0x00, + 0x00, + 0xFF, + ID_TARGET_COL2 + ); + //---------------------------------------------------------------- + //チェックボックス + AEFX_CLR_STRUCT(def); + PF_ADD_CHECKBOX(STR_TARGET_ENABLE0, + STR_TARGET_ENABLE1, + FALSE, + 0, + ID_TARGET_ENABLED3 + ); + //色の指定 + AEFX_CLR_STRUCT(def); + PF_ADD_COLOR( STR_TARGET_COL3, + 0xFF, + 0x00, + 0xFF, + ID_TARGET_COL3 + ); + //---------------------------------------------------------------- + //チェックボックス + AEFX_CLR_STRUCT(def); + PF_ADD_CHECKBOX(STR_TARGET_ENABLE0, + STR_TARGET_ENABLE1, + FALSE, + 0, + ID_TARGET_ENABLED4 + ); + //色の指定 + AEFX_CLR_STRUCT(def); + PF_ADD_COLOR( STR_TARGET_COL4, + 0x00, + 0xFF, + 0xFF, + ID_TARGET_COL4 + ); + //---------------------------------------------------------------- + //チェックボックス + AEFX_CLR_STRUCT(def); + PF_ADD_CHECKBOX(STR_TARGET_ENABLE0, + STR_TARGET_ENABLE1, + FALSE, + 0, + ID_TARGET_ENABLED5 + ); + //色の指定 + AEFX_CLR_STRUCT(def); + PF_ADD_COLOR( STR_TARGET_COL5, + 0x00, + 0x80, + 0x80, + ID_TARGET_COL5 + ); + //---------------------------------------------------------------- + //チェックボックス + AEFX_CLR_STRUCT(def); + PF_ADD_CHECKBOX(STR_TARGET_ENABLE0, + STR_TARGET_ENABLE1, + FALSE, + 0, + ID_TARGET_ENABLED6 + ); + //色の指定 + AEFX_CLR_STRUCT(def); + PF_ADD_COLOR( STR_TARGET_COL6, + 0x80, + 0x00, + 0x80, + ID_TARGET_COL6 + ); + //---------------------------------------------------------------- + //チェックボックス + AEFX_CLR_STRUCT(def); + PF_ADD_CHECKBOX(STR_TARGET_ENABLE0, + STR_TARGET_ENABLE1, + FALSE, + 0, + ID_TARGET_ENABLED7 + ); + //色の指定 + AEFX_CLR_STRUCT(def); + PF_ADD_COLOR( STR_TARGET_COL7, + 0x80, + 0x00, + 0x00, + ID_TARGET_COL7 + ); + //---------------------------------------------------------------- + out_data->num_params = ID_NUM_PARAMS; + + return err; +} +//----------------------------------------------------------------------------------- +static PF_Err +CopyImage8 ( + refconType refcon, + A_long xL, + A_long yL, + PF_Pixel8 *inP, + PF_Pixel8 *outP) +{ + PF_Err err = PF_Err_NONE; + + BlurInfo * info = reinterpret_cast(refcon); + if (info){ + if ( info->isTargetCopy==TRUE){ + PF_Boolean b = FALSE; + if ( inP->alpha >=PF_MAX_CHAN8){ + for ( A_long i=0; icol_count; i++){ + if ( ( F_ABS(inP->blue - info->target_col[i].blue )<=info->col_range) + &&( F_ABS(inP->green - info->target_col[i].green)<=info->col_range) + &&( F_ABS(inP->red - info->target_col[i].red )<=info->col_range) ) { + b = TRUE; + break; + } + } + } + if ( b ==FALSE){ + outP->alpha = + outP->blue = + outP->green = + outP->red = 0; + }else{ + outP->alpha = inP->alpha; + outP->red = inP->red; + outP->green = inP->green; + outP->blue = inP->blue; + } + }else{ + //透明のところのみを複写 + if ( outP->alpha ==0){ + outP->alpha = inP->alpha; + outP->red = inP->red; + outP->green = inP->green; + outP->blue = inP->blue; + } + } + + } + + return err; +} +//----------------------------------------------------------------------------------- +static PF_Err +CopyImage16 ( + refconType refcon, + A_long xL, + A_long yL, + PF_Pixel16 *inP, + PF_Pixel16 *outP) +{ + PF_Err err = PF_Err_NONE; + BlurInfo * info = reinterpret_cast(refcon); + if (info){ + if ( info->isTargetCopy==TRUE){ + PF_Boolean b = FALSE; + if ( inP->alpha >=PF_MAX_CHAN16){ + for ( A_long i=0; icol_count; i++){ + PF_Pixel p; + p.red = C16TO8(inP->red); + p.green = C16TO8(inP->green); + p.blue = C16TO8(inP->blue); + if ( ( F_ABS(p.blue - info->target_col[i].blue )<=info->col_range) + &&( F_ABS(p.green - info->target_col[i].green)<=info->col_range) + &&( F_ABS(p.red - info->target_col[i].red )<=info->col_range) ) { + b = TRUE; + break; + } + } + } + if ( b ==FALSE){ + outP->alpha = + outP->blue = + outP->green = + outP->red = 0; + }else{ + outP->alpha = inP->alpha; + outP->red = inP->red; + outP->green = inP->green; + outP->blue = inP->blue; + } + }else{ + //透明のところのみを複写 + if ( outP->alpha ==0){ + outP->alpha = inP->alpha; + outP->red = inP->red; + outP->green = inP->green; + outP->blue = inP->blue; + } + } + + } + return err; +} +//----------------------------------------------------------------------------------- +static PF_Err +CopyImage32 ( + refconType refcon, + A_long xL, + A_long yL, + PF_PixelFloat *inP, + PF_PixelFloat *outP) +{ + PF_Err err = PF_Err_NONE; + + BlurInfo * info = reinterpret_cast(refcon); + if (info){ + if ( info->isTargetCopy==TRUE){ + PF_Boolean b = FALSE; + PF_Pixel p; + p.alpha = RoundByteLong( FS_CONVERT32TO8( inP->alpha)); + if ( p.alpha >=PF_MAX_CHAN8){ + for ( A_long i=0; icol_count; i++){ + p.red = RoundByteLong( FS_CONVERT32TO8(inP->red) ); + p.green = RoundByteLong( FS_CONVERT32TO8(inP->green)); + p.blue = RoundByteLong( FS_CONVERT32TO8(inP->blue)); + if ( ( F_ABS(p.blue - info->target_col[i].blue )<=info->col_range) + &&( F_ABS(p.green - info->target_col[i].green)<=info->col_range) + &&( F_ABS(p.red - info->target_col[i].red )<=info->col_range) ) { + b = TRUE; + break; + } + } + } + if ( b ==FALSE){ + outP->alpha = + outP->blue = + outP->green = + outP->red = 0; + }else{ + outP->alpha = inP->alpha; + outP->red = inP->red; + outP->green = inP->green; + outP->blue = inP->blue; + } + }else{ + //透明のところのみを複写 + if ( outP->alpha ==0){ + outP->alpha = inP->alpha; + outP->red = inP->red; + outP->green = inP->green; + outP->blue = inP->blue; + } + } + } + return err; +} + +//----------------------------------------------------------------------------------- +static PF_Err +GetParams(CFsAE *ae , BlurInfo *infoP) +{ + PF_Err err = PF_Err_NONE; + if(!err) err = ae->GetADD(ID_BLUR_VALUE,&infoP->blur_value); + if(!err){ + if ( infoP->blur_value>0) + infoP->blur_value = ae->downScale(infoP->blur_value); + } + + if(!err) { + PF_Fixed v; + err = ae->GetFIXED(ID_TARGET_RANGE,&v); + if (!err) infoP->col_range = RoundByteLong(PF_MAX_CHAN8 * v /(100L<<16)); + } + if(!err) { + A_long count =0; + A_long idx = ID_TARGET_ENABLED0; + PF_Boolean b; + PF_Pixel c; + for ( A_long i =0 ; iGetCHECKBOX(idx,&b); + if (err) break; + if ( b==TRUE){ + err = ae->GetCOLOR(idx+1,&c); + if (err) break; + infoP->target_col[count] = c; + count++; + } + } + if ( !err) infoP->col_count = count; + } + return err; +} +//----------------------------------------------------------------------------------- +static void +GetBlurPrm(CFsAE *ae , BlurInfo *infoP,blurPrm *bp) +{ + bp->blur_value = infoP->blur_value; + bp->data = ae->output->data; + bp->width = ae->output->width; + bp->height = ae->output->height; + bp->in_data = ae->in_data; + bp->scanlineH = NULL; + if ( bp->width>=bp->height){ + bp->scanlineWidth = bp->width; + }else{ + bp->scanlineWidth = bp->height; + } +} +//----------------------------------------------------------------------------------- +static PF_Err +GetParams(CFsAE *ae , BlurInfo *infoP,blurPrm *bp) +{ + PF_Err err = PF_Err_NONE; + err = GetParams(ae,infoP); + if (!err) GetBlurPrm(ae,infoP,bp); + return err; +} +//----------------------------------------------------------------------------------- +static PF_Err +Exec(CFsAE *ae , BlurInfo *infoP,blurPrm *bp) +{ + PF_Err err = PF_Err_NONE; + if ((infoP->blur_value<=0)||(infoP->col_count<=1)) { + ae->CopyInToOut(); + return err; + } + switch(ae->pixelFormat()) + { + case PF_PixelFormat_ARGB128: + infoP->isTargetCopy = TRUE; + ERR( ae->iterate32((refconType)infoP,CopyImage32)); + if (!err){ + bp->widthTrue = ae->output->rowbytes / sizeof(PF_PixelFloat); + bp->scanlineH = ae->NewHandle(bp->scanlineWidth *sizeof(PF_PixelFloat)*2); + if ( !bp->scanlineH ) return PF_Err_INTERNAL_STRUCT_DAMAGED; + BlurSub32(bp); + if ( bp->scanlineH != NULL){ + ae->DisposeHandle(bp->scanlineH); + bp->scanlineH = NULL; + } + infoP->isTargetCopy = FALSE; + ERR( ae->iterate32((refconType)infoP,CopyImage32)); + } + break; + case PF_PixelFormat_ARGB64: + infoP->isTargetCopy = TRUE; + ERR( ae->iterate16((refconType)infoP,CopyImage16)); + if (!err){ + bp->widthTrue = ae->output->rowbytes / sizeof(PF_Pixel16); + bp->scanlineH = ae->NewHandle(bp->scanlineWidth *sizeof(PF_Pixel16)*2); + if ( !bp->scanlineH ) return PF_Err_INTERNAL_STRUCT_DAMAGED; + BlurSub16(bp); + if ( bp->scanlineH != NULL){ + ae->DisposeHandle(bp->scanlineH); + bp->scanlineH = NULL; + } + infoP->isTargetCopy = FALSE; + ERR( ae->iterate16((refconType)infoP,CopyImage16)); + } + break; + case PF_PixelFormat_ARGB32: + infoP->isTargetCopy = TRUE; + ERR( ae->iterate8((refconType)infoP,CopyImage8)); + if (!err){ + bp->widthTrue = ae->output->rowbytes / sizeof(PF_Pixel); + bp->scanlineH = ae->NewHandle(bp->scanlineWidth *sizeof(PF_Pixel)*2); + if ( !bp->scanlineH ) return PF_Err_INTERNAL_STRUCT_DAMAGED; + BlurSub8(bp); + if ( bp->scanlineH != NULL){ + ae->DisposeHandle(bp->scanlineH); + bp->scanlineH = NULL; + } + infoP->isTargetCopy = FALSE; + ERR( ae->iterate8((refconType)infoP,CopyImage8)); + } + 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; + + CFsAE ae(in_data,out_data,params,output,ID_NUM_PARAMS); + err = ae.resultErr(); + if ( !err){ + BlurInfo info; + blurPrm bp; + ERR(GetParams(&ae, &info,&bp)); + ERR(Exec(&ae, &info,&bp)); + } + return err; +} + +//----------------------------------------------------------------------------------- +#if defined(SUPPORT_SMARTFX) +static PF_Err +PreRender( + PF_InData *in_data, + PF_OutData *out_dataP, + PF_PreRenderExtra *extraP) +{ + PF_Err err = PF_Err_NONE; + CFsAE ae(in_data,out_dataP,extraP,sizeof(BlurInfo),ID_NUM_PARAMS); + err = ae.resultErr(); + if (!err){ + + BlurInfo *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){ + BlurInfo *infoP = reinterpret_cast(ae.LockPreRenderData()); + + if (infoP){ + blurPrm bp; + GetBlurPrm(&ae,infoP,&bp); + ERR(Exec(&ae,infoP,&bp)); + 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/SelectedBlur/SelectedBlur.h b/SelectedBlur/SelectedBlur.h new file mode 100644 index 0000000..9a1f85d --- /dev/null +++ b/SelectedBlur/SelectedBlur.h @@ -0,0 +1,143 @@ +//----------------------------------------------------------------------------------- +/* + F's Plugins for VS2010/VS2012 + +*/ +//----------------------------------------------------------------------------------- + +#pragma once +#ifndef SelectedBlur_H +#define SelectedBlur_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_VALUE "blur" +#define STR_TARGET_RNG "range" +#define STR_TARGET_ENABLE0 "有効" +#define STR_TARGET_ENABLE1 "ON" + +#define STR_TARGET_COL0 "target0" +#define STR_TARGET_COL1 "target1" +#define STR_TARGET_COL2 "target2" +#define STR_TARGET_COL3 "target3" +#define STR_TARGET_COL4 "target4" +#define STR_TARGET_COL5 "target5" +#define STR_TARGET_COL6 "target6" +#define STR_TARGET_COL7 "target7" + + +#define COLOR_COUNT 8 + +//----------------------------------------------------------------------------------- +//ユーザーインターフェースのID +//ParamsSetup関数とRender関数のparamsパラメータのIDになる +enum { + ID_INPUT = 0, // default input layer + + //以下参考用 + ID_BLUR_VALUE, + ID_TARGET_RANGE, + + ID_TARGET_ENABLED0, + ID_TARGET_COL0, + + ID_TARGET_ENABLED1, + ID_TARGET_COL1, + + ID_TARGET_ENABLED2, + ID_TARGET_COL2, + + ID_TARGET_ENABLED3, + ID_TARGET_COL3, + + ID_TARGET_ENABLED4, + ID_TARGET_COL4, + + ID_TARGET_ENABLED5, + ID_TARGET_COL5, + + ID_TARGET_ENABLED6, + ID_TARGET_COL6, + + ID_TARGET_ENABLED7, + ID_TARGET_COL7, + + ID_NUM_PARAMS + }; + +//----------------------------------------------------------------------------------- + +typedef struct BlurInfo{ + A_long blur_value; + A_u_char col_range; + A_u_char reserve1; + A_u_char reserve2; + A_u_char reserve3; + A_long col_count; + PF_Pixel target_col[COLOR_COUNT]; + PF_Boolean isTargetCopy; + A_long reserve4; +} BlurInfo, *BlurInfoP, **BlurInfoH; + +//----------------------------------------------------------------------------------- +typedef struct blurPrm +{ + 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[1024];//301 + A_long blur_value; +}blurPrm; + +//----------------------------------------------------------------------------------- +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 BlurSub8(blurPrm *prm); +PF_Err BlurSub16(blurPrm *prm); +PF_Err BlurSub32(blurPrm *prm); +//------------------------------------------------------------------------------------------------- + +#endif // SelectedBlur_H diff --git a/SelectedBlur/SelectedBlurPiPL.r b/SelectedBlur/SelectedBlurPiPL.r new file mode 100644 index 0000000..775146a --- /dev/null +++ b/SelectedBlur/SelectedBlurPiPL.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/SelectedBlur/SelectedBlurSub16.cpp b/SelectedBlur/SelectedBlurSub16.cpp new file mode 100644 index 0000000..5efde3f --- /dev/null +++ b/SelectedBlur/SelectedBlurSub16.cpp @@ -0,0 +1,193 @@ +//----------------------------------------------------------------------------------- +/* + F's Plugins for VS2010/VS2012 +*/ +//----------------------------------------------------------------------------------- + +#include "SelectedBlur.h" + +typedef struct blurPrmSub16 +{ + A_long value; + A_long tbl[1024];//451 + PF_Pixel16 *data; + PF_Pixel16 *scanline; + A_long width; + A_long height; + A_long widthTrue; +}blurPrmSub8; +//---------------------------------------------------------------------------- +PF_Boolean makeTbl(blurPrm *prm, blurPrmSub16 *sub) +{ + PF_InData *in_data; + in_data = prm->in_data; + A_long range = prm->blur_value; + if ( range<=0) return FALSE; + double zone = (PF_FpShort)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 horBlur(blurPrmSub16 *sub) +{ + PF_Pixel16 c; + A_long hor =0; + A_long ix,i; + A_long x=0, y=0; + A_long count, sr, sg, sb, gauss ; + hor =0; + for ( y=0; yheight; y++) + { + hor = sub->widthTrue * y; + //スキャンラインへ転送 + for ( x=0; xwidth; x++) sub->scanline[x] = sub->data[hor + x]; + for ( x=0; xwidth; x++){ + c = sub->scanline[x]; + if ( c.alpha==PF_MAX_CHAN16) + { + count = sr = sg = sb = gauss = 0; + //真ん中 + gauss = sub->tbl[0]; + sr += c.red * gauss; + sg += c.green * gauss; + sb += c.blue * gauss; + count += gauss; + //左 + for (i=1; i<=sub->value;i++) + { + ix = x-i; + if ( ix<0) break; + c = sub->scanline[ix]; + if ( c.alpha ==0) break; + gauss = sub->tbl[i]; + sr += c.red * gauss; + sg += c.green * gauss; + sb += c.blue * gauss; + count += gauss; + } + //左 + for (i=1; i<=sub->value;i++) + { + ix = x+i; + if ( ix>=sub->width) break; + c = sub->scanline[ix]; + if ( c.alpha ==0) break; + gauss = sub->tbl[i]; + sr += c.red * gauss; + sg += c.green * gauss; + sb += c.blue * gauss; + count += gauss; + } + if (count>0){ + c.red = RoundShort(sr/count); + c.green = RoundShort(sg/count); + c.blue = RoundShort(sb/count); + c.alpha = PF_MAX_CHAN16; + sub->data[hor + x] = c; + } + } + } + } + +} +//---------------------------------------------------------------------------- +void verBlur(blurPrmSub16 *sub) +{ + PF_Pixel16 c; + A_long hor =0; + A_long x=0, y=0; + A_long ix,i; + A_long count, sr, sg, sb, gauss ; + hor =0; + for ( x=0; xwidth; x++) + { + //スキャンラインへ転送 + hor = x; + for ( y=0; yheight; y++) { + sub->scanline[y] = sub->data[hor]; + hor += sub->widthTrue; + } + hor = x; + for ( y=0; yheight; y++){ + c = sub->scanline[y]; + if ( c.alpha==PF_MAX_CHAN16) + { + count = sr = sg = sb = gauss = 0; + //真ん中 + gauss = sub->tbl[0]; + sr += c.red * gauss; + sg += c.green * gauss; + sb += c.blue * gauss; + count += gauss; + //左 + for (i=1; i<=sub->value;i++) + { + ix = y-i; + if ( ix<0) break; + c = sub->scanline[ix]; + if ( c.alpha ==0) break; + gauss = sub->tbl[i]; + sr += c.red * gauss; + sg += c.green * gauss; + sb += c.blue * gauss; + count += gauss; + } + //左 + for (i=1; i<=sub->value;i++) + { + ix = y+i; + if ( ix>=sub->height) break; + c = sub->scanline[ix]; + if ( c.alpha ==0) break; + gauss = sub->tbl[i]; + sr += c.red * gauss; + sg += c.green * gauss; + sb += c.blue * gauss; + count += gauss; + } + if (count>0){ + c.red = RoundShort(sr/count); + c.green = RoundShort(sg/count); + c.blue = RoundShort(sb/count); + c.alpha = PF_MAX_CHAN16; + sub->data[hor] = c; + } + } + hor +=sub->widthTrue;; + } + } +} +//---------------------------------------------------------------------------- + +PF_Err BlurSub16(blurPrm *prm) +{ + PF_Err err = PF_Err_NONE; + if ( (prm->data == NULL)||(prm->scanlineH == NULL)){ + return PF_Err_INTERNAL_STRUCT_DAMAGED; + } + blurPrmSub16 sub; + sub.data = (PF_Pixel16 *)prm->data; + sub.scanline =*(PF_Pixel16**)prm->scanlineH; + sub.width = prm->width; + sub.height = prm->height; + sub.widthTrue = prm->widthTrue; + + sub.value = prm->blur_value; + if ( makeTbl(prm, &sub) == TRUE) { + horBlur(&sub); + verBlur(&sub); + + //ボケの破綻をごまかす処理 + sub.value = prm->blur_value/4; + if ( makeTbl(prm, &sub) == TRUE) horBlur(&sub); + sub.value = prm->blur_value/16; + if ( makeTbl(prm, &sub) == TRUE) verBlur(&sub); + sub.value = prm->blur_value/64; + if ( makeTbl(prm, &sub) == TRUE) horBlur(&sub); + } + + return err; +} +//---------------------------------------------------------------------------- diff --git a/SelectedBlur/SelectedBlurSub32.cpp b/SelectedBlur/SelectedBlurSub32.cpp new file mode 100644 index 0000000..97403f2 --- /dev/null +++ b/SelectedBlur/SelectedBlurSub32.cpp @@ -0,0 +1,198 @@ +//----------------------------------------------------------------------------------- +/* + F's Plugins for VS2010/VS2012 +*/ +//----------------------------------------------------------------------------------- + +#include "SelectedBlur.h" + +typedef struct blurPrmSub32 +{ + A_long value; + A_long tbl[1024];//451 + PF_PixelFloat *data; + PF_PixelFloat *scanline; + A_long width; + A_long height; + A_long widthTrue; +}blurPrmSub32; +//---------------------------------------------------------------------------- +PF_Boolean makeTbl32(blurPrm *prm, blurPrmSub32 *sub) +{ + PF_InData *in_data; + in_data = prm->in_data; + A_long range = prm->blur_value; + 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 horBlur32(blurPrmSub32 *sub) +{ + PF_PixelFloat c; + A_long hor =0; + A_long ix,i; + A_long x=0, y=0; + A_long count, gauss; + double sr, sg, sb; + hor =0; + for ( y=0; yheight; y++) + { + hor = sub->widthTrue * y; + //スキャンラインへ転送 + for ( x=0; xwidth; x++) sub->scanline[x] = sub->data[hor + x]; + for ( x=0; xwidth; x++){ + c = sub->scanline[x]; + if ( c.alpha>= 1.0) + { + sr = sg = sb = 0; + count = gauss = 0; + //真ん中 + gauss = sub->tbl[0]; + sr += c.red * gauss; + sg += c.green * gauss; + sb += c.blue * gauss; + count += gauss; + //左 + for (i=1; i<=sub->value;i++) + { + ix = x-i; + if ( ix<0) break; + c = sub->scanline[ix]; + if ( c.alpha ==0) break; + gauss = sub->tbl[i]; + sr += c.red * gauss; + sg += c.green * gauss; + sb += c.blue * gauss; + count += gauss; + } + //左 + for (i=1; i<=sub->value;i++) + { + ix = x+i; + if ( ix>=sub->width) break; + c = sub->scanline[ix]; + if ( c.alpha ==0) break; + gauss = sub->tbl[i]; + sr += c.red * gauss; + sg += c.green * gauss; + sb += c.blue * gauss; + count += gauss; + } + if (count>0){ + c.red = RoundFpShortDouble(sr/count); + c.green = RoundFpShortDouble(sg/count); + c.blue = RoundFpShortDouble(sb/count); + c.alpha = 1; + sub->data[hor + x] = c; + } + } + } + } + +} +//---------------------------------------------------------------------------- +void verBlur32(blurPrmSub32 *sub) +{ + PF_PixelFloat c; + A_long hor =0; + A_long x=0, y=0; + A_long ix,i; + A_long count, gauss; + double sr, sg, sb; + hor =0; + for ( x=0; xwidth; x++) + { + //スキャンラインへ転送 + hor = x; + for ( y=0; yheight; y++) { + sub->scanline[y] = sub->data[hor]; + hor += sub->widthTrue; + } + hor = x; + for ( y=0; yheight; y++){ + c = sub->scanline[y]; + if ( c.alpha>=1) + { + sr = sg = sb = 0; + count = gauss = 0; + //真ん中 + gauss = sub->tbl[0]; + sr += c.red * gauss; + sg += c.green * gauss; + sb += c.blue * gauss; + count += gauss; + //左 + for (i=1; i<=sub->value;i++) + { + ix = y-i; + if ( ix<0) break; + c = sub->scanline[ix]; + if ( c.alpha ==0) break; + gauss = sub->tbl[i]; + sr += c.red * gauss; + sg += c.green * gauss; + sb += c.blue * gauss; + count += gauss; + } + //左 + for (i=1; i<=sub->value;i++) + { + ix = y+i; + if ( ix>=sub->height) break; + c = sub->scanline[ix]; + if ( c.alpha ==0) break; + gauss = sub->tbl[i]; + sr += c.red * gauss; + sg += c.green * gauss; + sb += c.blue * gauss; + count += gauss; + } + if (count>0){ + c.red = RoundFpShortDouble(sr/count); + c.green = RoundFpShortDouble(sg/count); + c.blue = RoundFpShortDouble(sb/count); + c.alpha = 1; + sub->data[hor] = c; + } + } + hor +=sub->widthTrue;; + } + } +} +//---------------------------------------------------------------------------- + +PF_Err BlurSub32(blurPrm *prm) +{ + PF_Err err = PF_Err_NONE; + if ( (prm->data == NULL)||(prm->scanlineH == NULL)){ + return PF_Err_INTERNAL_STRUCT_DAMAGED; + } + blurPrmSub32 sub; + sub.data = (PF_PixelFloat *)prm->data; + sub.scanline =*(PF_PixelFloat**)prm->scanlineH; + sub.width = prm->width; + sub.height = prm->height; + sub.widthTrue = prm->widthTrue; + + sub.value = prm->blur_value; + if ( makeTbl32(prm, &sub) == TRUE) { + horBlur32(&sub); + verBlur32(&sub); + + //ボケの破綻をごまかす処理 + sub.value = prm->blur_value/4; + if ( makeTbl32(prm, &sub) == TRUE) horBlur32(&sub); + sub.value = prm->blur_value/16; + if ( makeTbl32(prm, &sub) == TRUE) verBlur32(&sub); + sub.value = prm->blur_value/64; + if ( makeTbl32(prm, &sub) == TRUE) horBlur32(&sub); + } + + + return err; +} +//---------------------------------------------------------------------------- diff --git a/SelectedBlur/SelectedBlurSub8.cpp b/SelectedBlur/SelectedBlurSub8.cpp new file mode 100644 index 0000000..63761e4 --- /dev/null +++ b/SelectedBlur/SelectedBlurSub8.cpp @@ -0,0 +1,194 @@ +//----------------------------------------------------------------------------------- +/* + F's Plugins for VS2010/VS2012 +*/ +//----------------------------------------------------------------------------------- + +#include "SelectedBlur.h" + +typedef struct blurPrmSub8 +{ + A_long value; + A_long tbl[1024];//451 + PF_Pixel8 *data; + PF_Pixel8 *scanline; + A_long width; + A_long height; + A_long widthTrue; +}blurPrmSub8; +//---------------------------------------------------------------------------- +PF_Boolean makeTbl(blurPrm *prm, blurPrmSub8 *sub) +{ + PF_InData *in_data; + in_data = prm->in_data; + A_long range = prm->blur_value; + if ( range<=0) return FALSE; + double zone = (PF_FpShort)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 horBlur(blurPrmSub8 *sub) +{ + PF_Pixel8 c; + A_long hor =0; + A_long ix,i; + A_long x=0, y=0; + A_long count, sr, sg, sb, gauss ; + hor =0; + for ( y=0; yheight; y++) + { + hor = sub->widthTrue * y; + //スキャンラインへ転送 + for ( x=0; xwidth; x++) sub->scanline[x] = sub->data[hor + x]; + for ( x=0; xwidth; x++){ + c = sub->scanline[x]; + if ( c.alpha==PF_MAX_CHAN8) + { + count = sr = sg = sb = gauss = 0; + //真ん中 + gauss = sub->tbl[0]; + sr += c.red * gauss; + sg += c.green * gauss; + sb += c.blue * gauss; + count += gauss; + //左 + for (i=1; i<=sub->value;i++) + { + ix = x-i; + if ( ix<0) break; + c = sub->scanline[ix]; + if ( c.alpha ==0) break; + gauss = sub->tbl[i]; + sr += c.red * gauss; + sg += c.green * gauss; + sb += c.blue * gauss; + count += gauss; + } + //左 + for (i=1; i<=sub->value;i++) + { + ix = x+i; + if ( ix>=sub->width) break; + c = sub->scanline[ix]; + if ( c.alpha ==0) break; + gauss = sub->tbl[i]; + sr += c.red * gauss; + sg += c.green * gauss; + sb += c.blue * gauss; + count += gauss; + } + if (count>0){ + c.red = RoundByteLong(sr/count); + c.green = RoundByteLong(sg/count); + c.blue = RoundByteLong(sb/count); + c.alpha = PF_MAX_CHAN8; + sub->data[hor + x] = c; + } + } + } + } + +} +//---------------------------------------------------------------------------- +void verBlur(blurPrmSub8 *sub) +{ + PF_Pixel8 c; + A_long hor =0; + A_long x=0, y=0; + A_long ix,i; + A_long count, sr, sg, sb, gauss ; + hor =0; + for ( x=0; xwidth; x++) + { + //スキャンラインへ転送 + hor = x; + for ( y=0; yheight; y++) { + sub->scanline[y] = sub->data[hor]; + hor += sub->widthTrue; + } + hor = x; + for ( y=0; yheight; y++){ + c = sub->scanline[y]; + if ( c.alpha==PF_MAX_CHAN8) + { + count = sr = sg = sb = gauss = 0; + //真ん中 + gauss = sub->tbl[0]; + sr += c.red * gauss; + sg += c.green * gauss; + sb += c.blue * gauss; + count += gauss; + //左 + for (i=1; i<=sub->value;i++) + { + ix = y-i; + if ( ix<0) break; + c = sub->scanline[ix]; + if ( c.alpha ==0) break; + gauss = sub->tbl[i]; + sr += c.red * gauss; + sg += c.green * gauss; + sb += c.blue * gauss; + count += gauss; + } + //左 + for (i=1; i<=sub->value;i++) + { + ix = y+i; + if ( ix>=sub->height) break; + c = sub->scanline[ix]; + if ( c.alpha ==0) break; + gauss = sub->tbl[i]; + sr += c.red * gauss; + sg += c.green * gauss; + sb += c.blue * gauss; + count += gauss; + } + if (count>0){ + c.red = RoundByteLong(sr/count); + c.green = RoundByteLong(sg/count); + c.blue = RoundByteLong(sb/count); + c.alpha = PF_MAX_CHAN8; + sub->data[hor] = c; + } + } + hor +=sub->widthTrue;; + } + } +} +//---------------------------------------------------------------------------- + +PF_Err BlurSub8(blurPrm *prm) +{ + PF_Err err = PF_Err_NONE; + if ( (prm->data == NULL)||(prm->scanlineH == NULL)){ + return PF_Err_INTERNAL_STRUCT_DAMAGED; + } + blurPrmSub8 sub; + sub.data = (PF_Pixel8 *)prm->data; + sub.scanline =*(PF_Pixel8**)prm->scanlineH; + sub.width = prm->width; + sub.height = prm->height; + sub.widthTrue = prm->widthTrue; + + + sub.value = prm->blur_value; + if ( makeTbl(prm, &sub) == TRUE) { + horBlur(&sub); + verBlur(&sub); + + //ボケの破綻をごまかす処理 + sub.value = prm->blur_value/4; + if ( makeTbl(prm, &sub) == TRUE) horBlur(&sub); + sub.value = prm->blur_value/16; + if ( makeTbl(prm, &sub) == TRUE) verBlur(&sub); + sub.value = prm->blur_value/64; + if ( makeTbl(prm, &sub) == TRUE) horBlur(&sub); + } + + return err; +} +//---------------------------------------------------------------------------- diff --git a/SelectedBlur/Win/SelectedBlur.vcxproj b/SelectedBlur/Win/SelectedBlur.vcxproj new file mode 100644 index 0000000..efa478b --- /dev/null +++ b/SelectedBlur/Win/SelectedBlur.vcxproj @@ -0,0 +1,332 @@ +サソ + + + + Debug + x64 + + + Release-MD + x64 + + + Release + x64 + + + + {F1BCCF81-1FDE-4504-998D-25DC228C8DA8} + SelectedBlur + 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/SelectedBlur.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 + + + 0x0411 + + + NotSet + $(TargetPath) + true + true + $(IntDir)$(ProjectName).pdb + Windows + false + + + $(IntDir)$(ProjectName).lib + MachineX64 + + + $(IntDir)$(ProjectName).bsc + + + + + _DEBUG;%(PreprocessorDefinitions) + true + true + X64 + .\Debug/SelectedBlur.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/SelectedBlur.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 + MaxSpeed + MaxSpeed + %(AdditionalIncludeDirectories) + %(AdditionalIncludeDirectories) + true + true + + + + + + + + + \ No newline at end of file diff --git a/SelectedBlur/Win/SelectedBlur.vcxproj.filters b/SelectedBlur/Win/SelectedBlur.vcxproj.filters new file mode 100644 index 0000000..3c7a08c --- /dev/null +++ b/SelectedBlur/Win/SelectedBlur.vcxproj.filters @@ -0,0 +1,160 @@ + + + + + {27fecfd0-ae6d-4a74-bb1c-f53fccee8117} + h;hpp;hxx;hm;inl;fi;fd + + + {872b7e45-915a-47e5-be6c-a074f560dd3a} + + + {b2aa43ef-d231-4cd8-8013-a05fae9dd6ae} + ico;cur;bmp;dlg;rc2;rct;bin;cnt;rtf;gif;jpg;jpeg;jpe + + + {67fb27cf-5276-43ff-9695-77a27ba2653e} + + + {8a1af6bf-e831-455e-a63d-0aa9819cbb77} + + + {0510ee51-32d0-419c-9b50-778b9717c42f} + + + {e3d75e8f-7ccf-4e08-9961-a60b92a3e432} + + + {70034ba1-4855-4f9d-883e-c23b9fe0a338} + + + + + 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/SelectedBlur/Win/SelectedBlurPiPL.rc b/SelectedBlur/Win/SelectedBlurPiPL.rc new file mode 100644 index 0000000..b93d700 --- /dev/null +++ b/SelectedBlur/Win/SelectedBlurPiPL.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 SelectedBlur\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 SelectedBlur\0\0\0", + + "MIB8", + 0x6165464CL, + 0L, + 4L + 0L, + + +END + diff --git a/ShitsuKanBlur/Fs_Entry.h b/ShitsuKanBlur/Fs_Entry.h new file mode 100644 index 0000000..cd8ff9b --- /dev/null +++ b/ShitsuKanBlur/Fs_Entry.h @@ -0,0 +1,227 @@ +//----------------------------------------------------------------------------------- +/* + ShitsuKanBlur 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/ShitsuKanBlur/Fs_Target.h b/ShitsuKanBlur/Fs_Target.h new file mode 100644 index 0000000..4d76126 --- /dev/null +++ b/ShitsuKanBlur/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 ShitsuKanBlur" + +//----------------------------------------------------------------------------------- +//プラグインの説明に使われる文字 +#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/ShitsuKanBlur/ShitsuKanBlur.cpp b/ShitsuKanBlur/ShitsuKanBlur.cpp new file mode 100644 index 0000000..4ac3416 --- /dev/null +++ b/ShitsuKanBlur/ShitsuKanBlur.cpp @@ -0,0 +1,741 @@ +//----------------------------------------------------------------------------------- +/* + F's Plugins for VS2010/VS2012 +*/ +//----------------------------------------------------------------------------------- + + +#include "ShitsuKanBlur.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); + //def.flags = PF_ParamFlag_START_COLLAPSED; //これをつけると表示時に開いた状態になる + PF_ADD_TOPIC(STR_COL_TOPICS0, ID_COLOR_TOPICS0); + //---------------------------------------------------------------- + //Color0 + AEFX_CLR_STRUCT(def); + PF_ADD_CHECKBOX(STR_CBX_COLOR0, + STR_CBX_ON, + FALSE, + 0, + ID_CBX_COLOR0 + ); + //---------------------------------------------------------------- + AEFX_CLR_STRUCT(def); + PF_ADD_COLOR(STR_COL_COLOR0, + 0xFF, + 0x00, + 0x00, + ID_COL_COLOR0 + ); + //---------------------------------------------------------------- + //Color1 + AEFX_CLR_STRUCT(def); + PF_ADD_CHECKBOX(STR_CBX_COLOR1, + STR_CBX_ON, + FALSE, + 0, + ID_CBX_COLOR1 + ); + //---------------------------------------------------------------- + AEFX_CLR_STRUCT(def); + PF_ADD_COLOR(STR_COL_COLOR1, + 0x00, + 0xFF, + 0x00, + ID_COL_COLOR1 + ); + //---------------------------------------------------------------- + //Color2 + AEFX_CLR_STRUCT(def); + PF_ADD_CHECKBOX(STR_CBX_COLOR2, + STR_CBX_ON, + FALSE, + 0, + ID_CBX_COLOR2 + ); + //---------------------------------------------------------------- + AEFX_CLR_STRUCT(def); + PF_ADD_COLOR(STR_COL_COLOR2, + 0x00, + 0x00, + 0xFF, + ID_COL_COLOR2 + ); + //---------------------------------------------------------------- + //Color3 + AEFX_CLR_STRUCT(def); + PF_ADD_CHECKBOX(STR_CBX_COLOR3, + STR_CBX_ON, + FALSE, + 0, + ID_CBX_COLOR3 + ); + //---------------------------------------------------------------- + AEFX_CLR_STRUCT(def); + PF_ADD_COLOR(STR_COL_COLOR3, + 0xFF, + 0xFF, + 0x00, + ID_COL_COLOR3 + ); + //---------------------------------------------------------------- + //Color4 + AEFX_CLR_STRUCT(def); + PF_ADD_CHECKBOX(STR_CBX_COLOR4, + STR_CBX_ON, + FALSE, + 0, + ID_CBX_COLOR4 + ); + //---------------------------------------------------------------- + AEFX_CLR_STRUCT(def); + PF_ADD_COLOR(STR_COL_COLOR4, + 0xFF, + 0x00, + 0x00, + ID_COL_COLOR4 + ); + //---------------------------------------------------------------- + //Color5 + AEFX_CLR_STRUCT(def); + PF_ADD_CHECKBOX(STR_CBX_COLOR5, + STR_CBX_ON, + FALSE, + 0, + ID_CBX_COLOR5 + ); + //---------------------------------------------------------------- + AEFX_CLR_STRUCT(def); + PF_ADD_COLOR(STR_COL_COLOR5, + 0x00, + 0xFF, + 0x00, + ID_COL_COLOR5 + ); + //---------------------------------------------------------------- + //Color6 + AEFX_CLR_STRUCT(def); + PF_ADD_CHECKBOX(STR_CBX_COLOR6, + STR_CBX_ON, + FALSE, + 0, + ID_CBX_COLOR6 + ); + //---------------------------------------------------------------- + AEFX_CLR_STRUCT(def); + PF_ADD_COLOR(STR_COL_COLOR6, + 0x00, + 0x00, + 0xFF, + ID_COL_COLOR6 + ); + //---------------------------------------------------------------- + //Color7 + AEFX_CLR_STRUCT(def); + PF_ADD_CHECKBOX(STR_CBX_COLOR7, + STR_CBX_ON, + FALSE, + 0, + ID_CBX_COLOR7 + ); + //---------------------------------------------------------------- + AEFX_CLR_STRUCT(def); + PF_ADD_COLOR(STR_COL_COLOR7, + 0x00, + 0xFF, + 0xFF, + ID_COL_COLOR7 + ); + //---------------------------------------------------------------- + AEFX_CLR_STRUCT(def); + PF_END_TOPIC(ID_COLOR_TOPICS_END0); + //---------------------------------------------------------------- + AEFX_CLR_STRUCT(def); + //def.flags = PF_ParamFlag_START_COLLAPSED; //これをつけると表示時に開いた状態になる + PF_ADD_TOPIC(STR_COL_TOPICS1, ID_COLOR_TOPICS1); + //---------------------------------------------------------------- + //Color0 + AEFX_CLR_STRUCT(def); + PF_ADD_CHECKBOX(STR_CBX_COLOR_EX0, + STR_CBX_ON, + FALSE, + 0, + ID_CBX_COLOR_EX0 + ); + //---------------------------------------------------------------- + AEFX_CLR_STRUCT(def); + PF_ADD_COLOR(STR_COL_COLOR_EX0, + 0xFF, + 0x00, + 0x00, + ID_COL_COLOR_EX0 + ); + //---------------------------------------------------------------- + //Color1 + AEFX_CLR_STRUCT(def); + PF_ADD_CHECKBOX(STR_CBX_COLOR_EX1, + STR_CBX_ON, + FALSE, + 0, + ID_CBX_COLOR_EX1 + ); + //---------------------------------------------------------------- + AEFX_CLR_STRUCT(def); + PF_ADD_COLOR(STR_COL_COLOR_EX1, + 0x00, + 0xFF, + 0x00, + ID_COL_COLOR_EX1 + ); + //---------------------------------------------------------------- + //Color2 + AEFX_CLR_STRUCT(def); + PF_ADD_CHECKBOX(STR_CBX_COLOR_EX2, + STR_CBX_ON, + FALSE, + 0, + ID_CBX_COLOR_EX2 + ); + //---------------------------------------------------------------- + AEFX_CLR_STRUCT(def); + PF_ADD_COLOR(STR_COL_COLOR_EX2, + 0x00, + 0x00, + 0xFF, + ID_COL_COLOR_EX2 + ); + //---------------------------------------------------------------- + //Color3 + AEFX_CLR_STRUCT(def); + PF_ADD_CHECKBOX(STR_CBX_COLOR_EX3, + STR_CBX_ON, + FALSE, + 0, + ID_CBX_COLOR_EX3 + ); + //---------------------------------------------------------------- + AEFX_CLR_STRUCT(def); + PF_ADD_COLOR(STR_COL_COLOR_EX3, + 0xFF, + 0xFF, + 0x00, + ID_COL_COLOR_EX3 + ); + //---------------------------------------------------------------- + //Color4 + AEFX_CLR_STRUCT(def); + PF_ADD_CHECKBOX(STR_CBX_COLOR_EX4, + STR_CBX_ON, + FALSE, + 0, + ID_CBX_COLOR_EX4 + ); + //---------------------------------------------------------------- + AEFX_CLR_STRUCT(def); + PF_ADD_COLOR(STR_COL_COLOR_EX4, + 0xFF, + 0x00, + 0x00, + ID_COL_COLOR_EX4 + ); + //---------------------------------------------------------------- + //Color5 + AEFX_CLR_STRUCT(def); + PF_ADD_CHECKBOX(STR_CBX_COLOR_EX5, + STR_CBX_ON, + FALSE, + 0, + ID_CBX_COLOR_EX5 + ); + //---------------------------------------------------------------- + AEFX_CLR_STRUCT(def); + PF_ADD_COLOR(STR_COL_COLOR_EX5, + 0x00, + 0xFF, + 0x00, + ID_COL_COLOR_EX5 + ); + //---------------------------------------------------------------- + //Color6 + AEFX_CLR_STRUCT(def); + PF_ADD_CHECKBOX(STR_CBX_COLOR_EX6, + STR_CBX_ON, + FALSE, + 0, + ID_CBX_COLOR_EX6 + ); + //---------------------------------------------------------------- + AEFX_CLR_STRUCT(def); + PF_ADD_COLOR(STR_COL_COLOR_EX6, + 0x00, + 0x00, + 0xFF, + ID_COL_COLOR_EX6 + ); + //---------------------------------------------------------------- + //Color7 + AEFX_CLR_STRUCT(def); + PF_ADD_CHECKBOX(STR_CBX_COLOR_EX7, + STR_CBX_ON, + FALSE, + 0, + ID_CBX_COLOR_EX7 + ); + //---------------------------------------------------------------- + AEFX_CLR_STRUCT(def); + PF_ADD_COLOR(STR_COL_COLOR_EX7, + 0x00, + 0xFF, + 0xFF, + ID_COL_COLOR_EX7 + ); + //---------------------------------------------------------------- + AEFX_CLR_STRUCT(def); + PF_END_TOPIC(ID_COLOR_TOPICS_END1); + + //---------------------------------------------------------------- + AEFX_CLR_STRUCT(def); + PF_ADD_ANGLE(STR_ANGLE, 0, ID_ANGLE); + //---------------------------------------------------------------- + AEFX_CLR_STRUCT(def); + PF_ADD_TOPIC(STR_HI_TOPICS, ID_HI_TOPICS); + //---------------------------------------------------------------- + AEFX_CLR_STRUCT(def); + PF_ADD_FIXED(STR_FLT_HI_LENGTH, //パラメータの名前 + 0, //数値入力する場合の最小値 + 200, //数値入力する場合の最大値 + 0, //スライダーの最小値 + 50, //スライダーの最大値 + 10, //デフォルトの値 + 1, //数値表示に関するフラグ + 0, + 0, + ID_FLT_HI_LENGTH + ); + //---------------------------------------------------------------- + AEFX_CLR_STRUCT(def); + //def.ui_flags = PF_PUI_DISABLED; + PF_ADD_SLIDER(STR_FLT_HI_BLUR, //パラメータの名前 + 0, //数値入力する場合の最小値 + 300, //数値入力する場合の最大値 + 0, //スライダーの最小値 + 100, //スライダーの最大値 + 20, //デフォルトの値 + ID_ADD_HI_BLUR + ); + + //---------------------------------------------------------------- + AEFX_CLR_STRUCT(def); + PF_ADD_FLOAT_SLIDER(STR_FLT_HILIGHT_LV, //Name + -200, //VALID_MIN + 200, //VALID_MAX + -100, //SLIDER_MIN + 100, //SLIDER_MAX + 1, //CURVE_TOLERANCE + 50, //DFLT + 1, //PREC + 0, //DISP + 0, //WANT_PHASE + ID_FLT_HILIGHT_LV + ); + //---------------------------------------------------------------- + AEFX_CLR_STRUCT(def); + PF_ADD_FLOAT_SLIDER(STR_FLT_HILIGHT_R, //Name + -200, //VALID_MIN + 200, //VALID_MAX + -100, //SLIDER_MIN + 100, //SLIDER_MAX + 1, //CURVE_TOLERANCE + 0, //DFLT + 1, //PREC + 0, //DISP + 0, //WANT_PHASE + ID_FLT_HILIGHT_R + ); + //---------------------------------------------------------------- + AEFX_CLR_STRUCT(def); + PF_ADD_FLOAT_SLIDER(STR_FLT_HILIGHT_G, //Name + -200, //VALID_MIN + 200, //VALID_MAX + -100, //SLIDER_MIN + 100, //SLIDER_MAX + 1, //CURVE_TOLERANCE + 0, //DFLT + 1, //PREC + 0, //DISP + 0, //WANT_PHASE + ID_FLT_HILIGHT_G + ); + //---------------------------------------------------------------- + AEFX_CLR_STRUCT(def); + PF_ADD_FLOAT_SLIDER(STR_FLT_HILIGHT_B, //Name + -200, //VALID_MIN + 200, //VALID_MAX + -100, //SLIDER_MIN + 100, //SLIDER_MAX + 1, //CURVE_TOLERANCE + 0, //DFLT + 1, //PREC + 0, //DISP + 0, //WANT_PHASE + ID_FLT_HILIGHT_B + ); + //---------------------------------------------------------------- + AEFX_CLR_STRUCT(def); + PF_END_TOPIC(ID_HI_TOPICS_END); + //---------------------------------------------------------------- + AEFX_CLR_STRUCT(def); + PF_ADD_TOPIC(STR_SW_TOPICS, ID_SW_TOPICS); + //---------------------------------------------------------------- + AEFX_CLR_STRUCT(def); + PF_ADD_FIXED(STR_FLT_SW_LENGTH, //パラメータの名前 + 0, //数値入力する場合の最小値 + 200, //数値入力する場合の最大値 + 0, //スライダーの最小値 + 100, //スライダーの最大値 + 10, //デフォルトの値 + 1, //数値表示に関するフラグ + 0, + 0, + ID_FLT_SW_LENGTH + ); + //---------------------------------------------------------------- + AEFX_CLR_STRUCT(def); + //def.ui_flags = PF_PUI_DISABLED; + PF_ADD_SLIDER(STR_FLT_SW_BLUR, //パラメータの名前 + 0, //数値入力する場合の最小値 + 300, //数値入力する場合の最大値 + 0, //スライダーの最小値 + 100, //スライダーの最大値 + 20, //デフォルトの値 + ID_ADD_SW_BLUR + ); //---------------------------------------------------------------- + AEFX_CLR_STRUCT(def); + PF_ADD_FLOAT_SLIDER(STR_FLT_SHADOW_LV, //Name + -200, //VALID_MIN + 200, //VALID_MAX + -100, //SLIDER_MIN + 100, //SLIDER_MAX + 1, //CURVE_TOLERANCE + -50, //DFLT + 1, //PREC + 0, //DISP + 0, //WANT_PHASE + ID_FLT_SHADOW_LV + ); + //---------------------------------------------------------------- + AEFX_CLR_STRUCT(def); + PF_ADD_FLOAT_SLIDER(STR_FLT_SHADOW_R, //Name + -200, //VALID_MIN + 200, //VALID_MAX + -100, //SLIDER_MIN + 100, //SLIDER_MAX + 1, //CURVE_TOLERANCE + 0, //DFLT + 1, //PREC + 0, //DISP + 0, //WANT_PHASE + ID_FLT_SHADOW_R + ); + //---------------------------------------------------------------- + AEFX_CLR_STRUCT(def); + PF_ADD_FLOAT_SLIDER(STR_FLT_SHADOW_G, //Name + -200, //VALID_MIN + 200, //VALID_MAX + -100, //SLIDER_MIN + 100, //SLIDER_MAX + 1, //CURVE_TOLERANCE + 0, //DFLT + 1, //PREC + 0, //DISP + 0, //WANT_PHASE + ID_FLT_SHADOW_G + ); + //---------------------------------------------------------------- + AEFX_CLR_STRUCT(def); + PF_ADD_FLOAT_SLIDER(STR_FLT_SHADOW_B, //Name + -200, //VALID_MIN + 200, //VALID_MAX + -100, //SLIDER_MIN + 100, //SLIDER_MAX + 1, //CURVE_TOLERANCE + 0, //DFLT + 1, //PREC + 0, //DISP + 0, //WANT_PHASE + ID_FLT_SHADOW_B + ); + //---------------------------------------------------------------- + AEFX_CLR_STRUCT(def); + PF_END_TOPIC(ID_SW_TOPICS_END); + + //---------------------------------------------------------------- + AEFX_CLR_STRUCT(def); + PF_ADD_FLOAT_SLIDER(STR_NOISE, //Name + 0, //VALID_MIN + 50, //VALID_MAX + 0, //SLIDER_MIN + 5, //SLIDER_MAX + 1, //CURVE_TOLERANCE + 1, //DFLT + 1, //PREC + 0, //DISP + 0, //WANT_PHASE + ID_FLT_NOISE + ); + + //---------------------------------------------------------------- + AEFX_CLR_STRUCT(def); + PF_ADD_CHECKBOX(STR_CBX_EDGE1, + STR_CBX_EDGE2, + FALSE, + 0, + ID_CBX_EDGE + ); + //---------------------------------------------------------------- + AEFX_CLR_STRUCT(def); + PF_ADD_POPUP(STR_PUP_DRAW, + STR_PUP_COUNT, //メニューの数 + STR_PUP_DFLT, //デフォルト + STR_PUP_ITEMS, + ID_PUP_DRAW + ); + //---------------------------------------------------------------- + AEFX_CLR_STRUCT(def); + PF_ADD_COLOR(STR_COL_MASKCOLOR, + 0xFF, + 0xFF, + 0xFF, + ID_COL_MASKCOLOR + ); + //---------------------------------------------------------------- + AEFX_CLR_STRUCT(def); + PF_ADD_CHECKBOX(STR_CBX_WHITE, + STR_CBX_ON, + FALSE, + 0, + ID_CBX_WHITE + ); + //---------------------------------------------------------------- + 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; + + + PF_Boolean b = FALSE; + int cm = 0; + infoP->Color_Max = cm; + infoP->EXColor_Max = cm; + int idx = ID_CBX_COLOR0; + for (int i = 0; i < 8; i++) { + + ERR(ae->GetCHECKBOX(idx, &b)); + idx++; + if (b == TRUE) { + ERR(ae->GetCOLOR(idx, &infoP->Color[cm])); + cm++; + } + idx++; + } + infoP->Color_Max = cm; + cm = 0; + idx = ID_CBX_COLOR_EX0; + for (int i = 0; i < 8; i++) { + + ERR(ae->GetCHECKBOX(idx, &b)); + idx++; + if (b == TRUE) { + ERR(ae->GetCOLOR(idx, &infoP->EXColor[cm])); + cm++; + } + idx++; + } + infoP->EXColor_Max = cm; + + infoP->TagetCount = 0; + + ERR(ae->GetANGLE(ID_ANGLE, &infoP->angle)); + + ERR(ae->GetFIXED(ID_FLT_HI_LENGTH, &infoP->hi_length)); + ERR(ae->GetADD(ID_ADD_HI_BLUR, &infoP->hi_blur)); + + ERR(ae->GetFLOAT(ID_FLT_HILIGHT_LV,&infoP->hi_lv)); + infoP->hi_lv /= 100.0; + ERR(ae->GetFLOAT(ID_FLT_HILIGHT_R, &infoP->hi_r)); + infoP->hi_r /= 100.0; + ERR(ae->GetFLOAT(ID_FLT_HILIGHT_G, &infoP->hi_g)); + infoP->hi_g /= 100.0; + ERR(ae->GetFLOAT(ID_FLT_HILIGHT_B, &infoP->hi_b)); + infoP->hi_b /= 100.0; + + ERR(ae->GetFIXED(ID_FLT_SW_LENGTH, &infoP->sw_length)); + ERR(ae->GetADD(ID_ADD_SW_BLUR, &infoP->sw_blur)); + + ERR(ae->GetFLOAT(ID_FLT_SHADOW_LV, &infoP->sw_lv)); + infoP->sw_lv /= 100.0; + ERR(ae->GetFLOAT(ID_FLT_SHADOW_R, &infoP->sw_r)); + infoP->sw_r /= 100.0; + ERR(ae->GetFLOAT(ID_FLT_SHADOW_G, &infoP->sw_g)); + infoP->sw_g /= 100.0; + ERR(ae->GetFLOAT(ID_FLT_SHADOW_B, &infoP->sw_b)); + infoP->sw_b /= 100.0; + + ERR(ae->GetFLOAT(ID_FLT_NOISE, &infoP->noise)); + infoP->noise /= 100.0; + + ERR(ae->GetCHECKBOX(ID_CBX_EDGE, &infoP->edge)); + + ERR(ae->GetPOPUP(ID_PUP_DRAW, &infoP->draw)); + + ERR(ae->GetCOLOR(ID_COL_MASKCOLOR, &infoP->MaskColor)); + ERR(ae->GetCHECKBOX(ID_CBX_WHITE, &infoP->white)); + return err; +} +//------------------------------------------------------------------------------------------------- +static PF_Err + Exec (CFsAE *ae , ParamInfo *infoP) +{ + PF_Err err = PF_Err_NONE; + + switch (ae->pixelFormat()) + { + case PF_PixelFormat_ARGB128: + SitsuKanSub32(ae, infoP); + break; + case PF_PixelFormat_ARGB64: + SitsuKanSub16(ae, infoP); + break; + case PF_PixelFormat_ARGB32: + SitsuKanSub8(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/ShitsuKanBlur/ShitsuKanBlur.h b/ShitsuKanBlur/ShitsuKanBlur.h new file mode 100644 index 0000000..2d5b539 --- /dev/null +++ b/ShitsuKanBlur/ShitsuKanBlur.h @@ -0,0 +1,366 @@ +//----------------------------------------------------------------------------------- +/* + ShitsuKanBlur for VS2010 +*/ +//----------------------------------------------------------------------------------- + +#pragma once +#ifndef ShitsuKanBlur_H +#define ShitsuKanBlur_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_COLOR_TOPICS0, + + ID_CBX_COLOR0, + ID_COL_COLOR0, + ID_CBX_COLOR1, + ID_COL_COLOR1, + ID_CBX_COLOR2, + ID_COL_COLOR2, + ID_CBX_COLOR3, + ID_COL_COLOR3, + ID_CBX_COLOR4, + ID_COL_COLOR4, + ID_CBX_COLOR5, + ID_COL_COLOR5, + ID_CBX_COLOR6, + ID_COL_COLOR6, + ID_CBX_COLOR7, + ID_COL_COLOR7, + + ID_COLOR_TOPICS_END0, + + ID_COLOR_TOPICS1, + + ID_CBX_COLOR_EX0, + ID_COL_COLOR_EX0, + ID_CBX_COLOR_EX1, + ID_COL_COLOR_EX1, + ID_CBX_COLOR_EX2, + ID_COL_COLOR_EX2, + ID_CBX_COLOR_EX3, + ID_COL_COLOR_EX3, + ID_CBX_COLOR_EX4, + ID_COL_COLOR_EX4, + ID_CBX_COLOR_EX5, + ID_COL_COLOR_EX5, + ID_CBX_COLOR_EX6, + ID_COL_COLOR_EX6, + ID_CBX_COLOR_EX7, + ID_COL_COLOR_EX7, + + + ID_COLOR_TOPICS_END1, + + ID_ANGLE, + + ID_HI_TOPICS, + ID_FLT_HI_LENGTH, + ID_ADD_HI_BLUR, + ID_FLT_HILIGHT_LV, + ID_FLT_HILIGHT_R, + ID_FLT_HILIGHT_G, + ID_FLT_HILIGHT_B, + ID_HI_TOPICS_END, + + ID_SW_TOPICS, + ID_FLT_SW_LENGTH, + ID_ADD_SW_BLUR, + ID_FLT_SHADOW_LV, + ID_FLT_SHADOW_R, + ID_FLT_SHADOW_G, + ID_FLT_SHADOW_B, + ID_SW_TOPICS_END, + + ID_FLT_NOISE, + ID_CBX_EDGE, + + ID_PUP_DRAW, + ID_COL_MASKCOLOR, + ID_CBX_WHITE, + + ID_NUM_PARAMS +}; +#define LENGTH_MIN 3 +//UIの表示文字列 +#define STR_CBX_ON "on" + +#define STR_CBX_COLOR0 "Enabled0" +#define STR_CBX_COLOR1 "Enabled1" +#define STR_CBX_COLOR2 "Enabled2" +#define STR_CBX_COLOR3 "Enabled3" +#define STR_CBX_COLOR4 "Enabled4" +#define STR_CBX_COLOR5 "Enabled5" +#define STR_CBX_COLOR6 "Enabled6" +#define STR_CBX_COLOR7 "Enabled7" + +#define STR_COL_COLOR0 "Color0" +#define STR_COL_COLOR1 "Color1" +#define STR_COL_COLOR2 "Color2" +#define STR_COL_COLOR3 "Color3" +#define STR_COL_COLOR4 "Color4" +#define STR_COL_COLOR5 "Color5" +#define STR_COL_COLOR6 "Color6" +#define STR_COL_COLOR7 "Color7" + +#define STR_COL_TOPICS0 "TargetColors" +#define STR_COL_TOPICS1 "TargetEXColors" +#define STR_HI_TOPICS "Hilight" +#define STR_SW_TOPICS "Shadow" + +#define STR_CBX_COLOR_EX0 "EnabledEX0" +#define STR_CBX_COLOR_EX1 "EnabledEX1" +#define STR_CBX_COLOR_EX2 "EnabledEX2" +#define STR_CBX_COLOR_EX3 "EnabledEX3" +#define STR_CBX_COLOR_EX4 "EnabledEX4" +#define STR_CBX_COLOR_EX5 "EnabledEX5" +#define STR_CBX_COLOR_EX6 "EnabledEX6" +#define STR_CBX_COLOR_EX7 "EnabledEX7" + +#define STR_COL_COLOR_EX0 "EXColor0" +#define STR_COL_COLOR_EX1 "EXColor1" +#define STR_COL_COLOR_EX2 "EXColor2" +#define STR_COL_COLOR_EX3 "EXColor3" +#define STR_COL_COLOR_EX4 "EXColor4" +#define STR_COL_COLOR_EX5 "EXColor5" +#define STR_COL_COLOR_EX6 "EXColor6" +#define STR_COL_COLOR_EX7 "EXColor7" + + +#define STR_ANGLE "Direction" +#define STR_FLT_HI_LENGTH "HilightLength" +#define STR_FLT_HI_BLUR "HilightBlur" +#define STR_FLT_SW_LENGTH "ShadowLength" +#define STR_FLT_SW_BLUR "ShadowBlur" +#define STR_CBX_EDGE1 "OutOfScreen" +#define STR_CBX_EDGE2 "EdgeRepeat" + +#define STR_FLT_HILIGHT_LV "Hilight_Lv(%)" +#define STR_FLT_HILIGHT_R "Hilight_Red(%)" +#define STR_FLT_HILIGHT_G "Hilight_Green(%)" +#define STR_FLT_HILIGHT_B "Hilight_Blue(%)" + +#define STR_FLT_SHADOW_LV "Shadow_Lv(%)" +#define STR_FLT_SHADOW_R "Shadow_Red(%)" +#define STR_FLT_SHADOW_G "Shadow_Green(%)" +#define STR_FLT_SHADOW_B "Shadow_Blue(%)" + +#define STR_NOISE "Noise" + +#define STR_CBX_DRAW "Blend_with_original" + +#define STR_PUP_DRAW "Blend" +#define STR_PUP_ITEMS "WithOriginal|Only|MaskHilight|MaskShadow" +#define STR_PUP_COUNT 4 +#define STR_PUP_DFLT 1 + +#define STR_COL_MASKCOLOR "MaskColor" +#define STR_CBX_WHITE "WhiteKey" + + + +#define SKN32_ON 1 +#define SKN32_H 0.5 + + + +//UIのパラメータ +typedef struct ParamInfo { + + A_long Color_Max; + PF_Pixel Color[8]; + A_long EXColor_Max; + PF_Pixel EXColor[8]; + A_long TagetCount; + + PF_Pixel MaskColor; + + PF_Fixed angle; + PF_Fixed hi_length; + A_long hi_blur; + PF_Fixed sw_length; + A_long sw_blur; + + + PF_FpLong hi_lv; + PF_FpLong hi_r; + PF_FpLong hi_g; + PF_FpLong hi_b; + + PF_FpLong sw_lv; + PF_FpLong sw_r; + PF_FpLong sw_g; + PF_FpLong sw_b; + + PF_Boolean edge; + PF_FpLong noise; + A_long draw; + PF_Boolean white; + + + +} ParamInfo, *ParamInfoP, **ParamInfoH; + +#define BLUR_MAX 600 + +typedef struct ParamInfo8 { + ParamInfo info; + + + A_long hi_x_offset; + A_long hi_y_offset; + + A_long sw_x_offset; + A_long sw_y_offset; + + + A_long TargetCount; + + PF_InData *in_data; + + A_long width; + A_long width2; + + A_long widthTrue; + A_long height; + A_long height2; + + PF_Pixel8 *data; + + PF_Handle scanlineH; + A_long scanlineSize; + A_long blurSize; + + A_u_char *scanline; + A_u_char *scanlineM; + A_long *blurTable; + + PF_Boolean IsTagetHi; + +} ParamInfo8, *ParamInfo8P, **ParamInfo8H; + +typedef struct ParamInfo16 { + ParamInfo info; + + + A_long hi_x_offset; + A_long hi_y_offset; + + A_long sw_x_offset; + A_long sw_y_offset; + + PF_Pixel16 MaskColor16; + + A_long TargetCount; + + PF_InData *in_data; + + A_long width; + A_long width2; + + A_long widthTrue; + A_long height; + A_long height2; + + PF_Pixel16 *data; + + PF_Handle scanlineH; + A_long scanlineSize; + A_long blurSize; + + A_u_short *scanline; + A_u_short *scanlineM; + A_long *blurTable; + + PF_Boolean IsTagetHi; + +} ParamInfo16, *ParamInfo16P, **ParamInfo16H; + +typedef struct ParamInfo32 { + ParamInfo info; + + + A_long hi_x_offset; + A_long hi_y_offset; + + A_long sw_x_offset; + A_long sw_y_offset; + + PF_PixelFloat MaskColor32; + + A_long TargetCount; + + PF_InData *in_data; + + A_long width; + A_long width2; + + A_long widthTrue; + A_long height; + A_long height2; + + PF_PixelFloat *data; + + PF_Handle scanlineH; + A_long scanlineSize; + A_long blurSize; + + PF_FpShort *scanline; + PF_FpShort *scanlineM; + A_long *blurTable; + + PF_Boolean IsTagetHi; + +} ParamInfo32, *ParamInfo32P, **ParamInfo32H; +//------------------------------------------------------- +PF_Err SitsuKanSub8(CFsAE *ae, ParamInfo *infoP); +PF_Err SitsuKanSub16(CFsAE *ae, ParamInfo *infoP); +PF_Err SitsuKanSub32(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 // ShitsuKanBlur_H diff --git a/ShitsuKanBlur/ShitsuKanBlur.psd b/ShitsuKanBlur/ShitsuKanBlur.psd new file mode 100644 index 0000000..75f273b Binary files /dev/null and b/ShitsuKanBlur/ShitsuKanBlur.psd differ diff --git a/ShitsuKanBlur/ShitsuKanBlurPiPL.r b/ShitsuKanBlur/ShitsuKanBlurPiPL.r new file mode 100644 index 0000000..98b2313 --- /dev/null +++ b/ShitsuKanBlur/ShitsuKanBlurPiPL.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/ShitsuKanBlur/ShitsuKanBlurSub16.cpp b/ShitsuKanBlur/ShitsuKanBlurSub16.cpp new file mode 100644 index 0000000..8665e74 --- /dev/null +++ b/ShitsuKanBlur/ShitsuKanBlurSub16.cpp @@ -0,0 +1,929 @@ +#include "ShitsuKanBlur.h" + +static PF_Pixel16(*GetPX16)(ParamInfo16 *infoP, A_long x, A_long y); + +//------------------------------------------------------------------------------------------------- +//ぼかし用のガウステーブル +static PF_Boolean makeTbl16(ParamInfo16 *infoP) +{ + PF_InData *in_data; + in_data = infoP->in_data; + A_long range; + if (infoP->IsTagetHi) range = infoP->info.hi_blur; + else range = infoP->info.sw_blur; + + if (range <= 0) return FALSE; + double zone = (double)range / 3; + for (A_long i = 0; i <= range; i++) { + infoP->blurTable[i] = (A_long)(PF_EXP(-i * i / (2 * zone * zone)) * 0x100); + } + return TRUE; +} +//---------------------------------------------------------------------------- +//Greenのみを水平ぼかし +void horBlurG16(ParamInfo16 *infoP) +{ + A_long blur = 0; + if (infoP->IsTagetHi) blur = infoP->info.hi_blur; + else blur = infoP->info.sw_blur; + if (blur <= 0) return; + + A_long wt = infoP->widthTrue; + A_u_short *scanline = infoP->scanline; + A_u_short *scanlineM = infoP->scanlineM; + PF_Pixel16 *data = infoP->data; + A_long hor = 0; + A_long ix, i; + A_long x = 0, y = 0; + A_long count, sg, gauss; + + hor = 0; + for (y = 0; y < infoP->height; y++) + { + hor = wt * y; + //スキャンラインへコピー + for (x = 0; x < infoP->width; x++) { + scanline[x] = data[x + hor].green; + scanlineM[x] = data[x + hor].red; + } + for (x = 0; x < infoP->width; x++) { + if (scanlineM[x] == PF_MAX_CHAN16) + { + count = sg = gauss = 0; + //真ん中 + gauss = infoP->blurTable[0]; + sg += (A_long)scanline[x] * gauss; + count += gauss; + //左 + for (i = 1; i <= blur; i++) + { + ix = x - i; + if (ix < 0) break; + if (scanlineM[ix] > 0) { + gauss = infoP->blurTable[i]; + sg += (A_long)scanline[ix] * gauss; + count += gauss; + } + } + //右 + for (i = 1; i <= blur; i++) + { + ix = x + i; + if (ix >= infoP->width) break; + if (scanlineM[ix] > 0) { + gauss = infoP->blurTable[i]; + sg += (A_long)scanline[ix] * gauss; + count += gauss; + } + } + if (count > 0) { + data[hor + x].green = RoundShort(sg / count); + } + } + else { + data[hor + x].green = 0; + } + } + } + +} +//---------------------------------------------------------------------------- +void vurBlurG16(ParamInfo16 *infoP) +{ + A_long blur = 0; + if (infoP->IsTagetHi) blur = infoP->info.hi_blur; + else blur = infoP->info.sw_blur; + if (blur <= 0) return; + + A_long wt = infoP->widthTrue; + + A_u_short *scanline = infoP->scanline; + A_u_short *scanlineM = infoP->scanlineM; + PF_Pixel16 *data = infoP->data; + A_long hor = 0; + A_long iy, i; + A_long x = 0, y = 0; + A_long count, sg, gauss; + hor = 0; + for (x = 0; x < infoP->width; x++) + { + //スキャンラインへコピー + hor = 0; + for (y = 0; y < infoP->height; y++) { + scanline[y] = data[x + hor].green; + scanlineM[y] = data[x + hor].red; + hor += wt; + } + hor = 0; + for (y = 0; y < infoP->height; y++) { + if (scanlineM[y] == PF_MAX_CHAN16) + { + count = sg = gauss = 0; + //真ん中 + gauss = infoP->blurTable[0]; + sg += (A_long)scanline[y] * gauss; + count += gauss; + //左 + for (i = 1; i <= blur; i++) + { + iy = y - i; + if (iy < 0) break; + if (scanlineM[iy] > 0) { + gauss = infoP->blurTable[i]; + sg += (A_long)scanline[iy] * gauss; + count += gauss; + } + } + //右 + for (i = 1; i <= blur; i++) + { + iy = y + i; + if (iy >= infoP->height) break; + if (scanlineM[iy] > 0) { + gauss = infoP->blurTable[i]; + sg += (A_long)scanline[iy] * gauss; + count += gauss; + } + } + if (count > 0) { + data[hor + x].green = RoundShort(sg / count); + } + } + else { + data[hor + x].green = 0; + } + hor += wt; + } + } + +} +//------------------------------------------------------------------------------------------------- +static PF_Pixel16 GetPX16_NOCLIP(ParamInfo16 *infoP, A_long x, A_long y) +{ + if ((x < 0) || (y < 0) || (x > infoP->width2) || (y > infoP->height2)) { + PF_Pixel16 p = { 0,0,0,0 }; + return p; + } + else { + PF_Pixel16 *data; + data = infoP->data; + return data[x + y * infoP->widthTrue]; + } +} +//------------------------------------------------------------------------------------------------- +static PF_Pixel16 GetPX16_CLIP(ParamInfo16 *infoP, A_long x, A_long y) +{ + A_long xx = x; + A_long yy = y; + if (xx < 0) xx = 0; + else if (xx > infoP->width2) xx = infoP->width2; + + if (yy < 0) yy = 0; + else if (yy > infoP->height2) yy = infoP->height2; + + PF_Pixel16 *data; + data = infoP->data; + return data[xx + yy * infoP->widthTrue]; +} +//------------------------------------------------------------------------------------------------- +static PF_Err +Iterate16( + CFsAE *ae, + ParamInfo16 *niP, + PF_Err(*pix_fn)(refconType refcon, A_long x, A_long y, PF_Pixel16 *in, PF_Pixel16 *out) +) +{ + PF_Err err = PF_Err_NONE; + + A_long w = ae->in->width(); + A_long h = ae->in->height(); + + A_long owi = ae->in->offsetWidth(); + A_long owo = ae->out->offsetWidth(); + + PF_Pixel16 *odata; + PF_Pixel16 *idata; + + idata = (PF_Pixel16*)ae->in->data(); + odata = (PF_Pixel16*)ae->out->data(); + + for (A_long yL = 0; yL < h; yL++) { + for (A_long xL = 0; xL < w; xL++) { + pix_fn((refconType)niP, xL, yL, idata, odata); + idata++; + odata++; + } + idata += owi; + odata += owo; + } + return err; +} +//------------------------------------------------------------------------------------------------- +static PF_Err +GetTargetPixels16( + 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); + + + PF_Pixel8 s = CONV16TO8(*inP); + PF_Pixel16 onC = { PF_MAX_CHAN16,0,0,0 }; + PF_Pixel16 exC = { PF_HALF_CHAN16,0,0,0 }; + PF_Pixel16 offC = { 0,0,0,0 }; + + A_long b = 0; + for (int i = 0; i < niP->info.Color_Max; i++) + { + if (compPix8(s, niP->info.Color[i]) == TRUE) + { + b = 1; + break; + } + } + if (b == 0) { + for (int i = 0; i < niP->info.EXColor_Max; i++) + { + if (compPix8(s, niP->info.EXColor[i]) == TRUE) + { + b = 2; + break; + } + } + } + if (b == 1) { + *outP = onC; + niP->TargetCount += 1; + } + else if (b==2){ + *outP = exC; + } + else { + *outP = offC; + } + return err; +} +//------------------------------------------------------------------------------------------------- +static PF_Err +AlphaTargetToGreen16( + refconType refcon, + A_long xL, + A_long yL, + PF_Pixel16 *inP, + PF_Pixel16 *outP) +{ + PF_Err err = PF_Err_NONE; + + if (outP->alpha != 0) { + outP->green = PF_MAX_CHAN16; + } + + return err; +} +//------------------------------------------------------------------------------------------------- +static PF_Err +SwapGB16( + refconType refcon, + A_long xL, + A_long yL, + PF_Pixel16 *inP, + PF_Pixel16 *outP) +{ + PF_Err err = PF_Err_NONE; + + A_u_short tmp = outP->green; + outP->green = outP->blue; + outP->blue = tmp; + return err; +} +//------------------------------------------------------------------------------------------------- +static PF_Err +RedToGreen16( + refconType refcon, + A_long xL, + A_long yL, + PF_Pixel16 *inP, + PF_Pixel16 *outP) +{ + PF_Err err = PF_Err_NONE; + + outP->green = outP->red; + + return err; +} +//------------------------------------------------------------------------------------------------- +static PF_Err +AlphaON16( + refconType refcon, + A_long xL, + A_long yL, + PF_Pixel16 *inP, + PF_Pixel16 *outP) +{ + PF_Err err = PF_Err_NONE; + + outP->alpha = PF_MAX_CHAN16; + + return err; +} +//------------------------------------------------------------------------------------------------- +static PF_Err +MaskedGBFromA16( + 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) { + outP->green = 0; + outP->blue = 0; + } + outP->red = 0; + + + return err; +} + +//------------------------------------------------------------------------------------------------- +static PF_Err +MaxHorG2R16( + 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); + + PF_Boolean b = FALSE; + if (outP->green == 0) + { + PF_Pixel16 *d; + if (xL > 0) { + d = outP - 1; + if (d->green > 0) b = true; + } + if (b == FALSE) { + if (xL < niP->width2) { + d = outP + 1; + if (d->green > 0) b = true; + } + } + + } + else { + b = TRUE; + } + if (b == TRUE) { + outP->red = PF_MAX_CHAN16; + } + else { + outP->red = 0; + } + + return err; +} +//------------------------------------------------------------------------------------------------- +static PF_Err +MaxVurG2R16( + 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); + + PF_Boolean b = FALSE; + if (outP->green == 0) + { + PF_Pixel16 *d; + if (yL > 0) { + d = outP - niP->widthTrue; + if (d->green > 0) b = true; + } + if (b == FALSE) { + if (yL < niP->height2) { + d = outP + niP->widthTrue; + if (d->green > 0) b = true; + } + } + + } + else { + b = TRUE; + } + if (b == TRUE) { + outP->red = PF_MAX_CHAN16; + } + else { + outP->red = 0; + } + + + return err; +} + +//------------------------------------------------------------------------------------------------- +static PF_Err +MoveG2R16( + 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); + + + PF_Pixel16 c = *outP; + + PF_Pixel16 p1 = GetPX16(niP, xL + niP->hi_x_offset, yL + niP->hi_y_offset); + PF_Pixel16 p2 = GetPX16(niP, xL - niP->sw_x_offset, yL - niP->sw_y_offset); + + + //PF_MAX_CHAN16 = 32768 0b10000000_00000000 + //だったので + A_u_short r = 0; + if (outP->green > 0) r |= 0x7F00; + if (p1.green > 0) r |= 0xF0; + if (p2.green > 0) r |= 0xF; + + outP->red = r; + + + return err; +} +//------------------------------------------------------------------------------------------------- +static PF_Err +SplitG2RGB16( + 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); + + A_u_short moto = (outP->green & 0xF00) >> 8; + A_u_short up = (outP->green & 0xF0) >> 4; + A_u_short down = outP->green & 0x0F; + + if (moto > 0) { + outP->red = PF_MAX_CHAN16; + } + else { + outP->red = 0; + } + + if (moto - up > 0) { + outP->green= PF_MAX_CHAN16; + } + else { + outP->green = 0; + } + if (moto - down > 0) { + outP->blue = PF_MAX_CHAN16; + } + else { + outP->blue = 0; + } + + + + return err; +} +//------------------------------------------------------------------------------------------------- +static PF_Err +Noise16( + 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); + + + A_long v = (A_long)(niP->info.noise * PF_MAX_CHAN16); + A_long rnd = v - (v * 2 * F_RAND() / F_RAND_MAX); + if (rnd != 0) { + if (outP->alpha > 0) { + outP->green = RoundShort(outP->green + rnd); + outP->blue = RoundShort(outP->blue + rnd); + } + } + + return err; +} +//------------------------------------------------------------------------------------------------- +static PF_Err +CopyTagetEX16( + 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); + + PF_Pixel16 c = { 0,0,0,0 }; + if (outP->alpha != PF_MAX_CHAN16) + { + PF_Boolean b = TRUE; + if (niP->info.white == TRUE) + { + if ((inP->red == PF_MAX_CHAN16) && (inP->green == PF_MAX_CHAN16) && (inP->blue == PF_MAX_CHAN16)) { + b = FALSE; + } + } + if (b == TRUE) { + *outP = *inP; + } + else { + *outP = c; + } + } + return err; +} +//------------------------------------------------------------------------------------------------- +static PF_Err +GreenToAlpha16( + 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); + + PF_Pixel16 c = niP->MaskColor16; + c.alpha = outP->green;; + *outP = c; + + return err; +} +//------------------------------------------------------------------------------------------------- +static PF_Err +BlueToAlpha16( + 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); + + PF_Pixel16 c = niP->MaskColor16; + c.alpha = outP->blue;; + *outP = c; + + return err; +} +//------------------------------------------------------------------------------------------------- +static PF_FpLong +LvSet16(PF_FpLong src, PF_FpLong lv, PF_FpLong alpha) +{ + PF_FpLong ret = 0; + + if ((lv == 0) || (alpha == 0)) { + return src; + } + PF_FpLong r = 0; + if (lv < 0) { + r = src * lv; + } + else if (lv > 0) + { + r = (PF_MAX_CHAN16 - src) *lv; + } + if (alpha != 1) { + r *= alpha; + } + + ret = src + r; + + + return ret; +} + + +static PF_Err +ColorSet16( + 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); + + //hi + PF_FpLong r, g, b; + + if (outP->alpha == PF_MAX_CHAN16) { + PF_FpLong a = (PF_FpLong)outP->green / PF_MAX_CHAN16; + + r = (PF_FpLong)inP->red; + g = (PF_FpLong)inP->green; + b = (PF_FpLong)inP->blue; + if (a > 0) { + r = LvSet16(r, niP->info.hi_lv, a); + g = LvSet16(g, niP->info.hi_lv, a); + b = LvSet16(b, niP->info.hi_lv, a); + + r = LvSet16(r, niP->info.hi_r, a); + g = LvSet16(g, niP->info.hi_g, a); + b = LvSet16(b, niP->info.hi_b, a); + } + a = (PF_FpLong)outP->blue / PF_MAX_CHAN16; + if (a > 0) { + r = LvSet16(r, niP->info.sw_lv, a); + g = LvSet16(g, niP->info.sw_lv, a); + b = LvSet16(b, niP->info.sw_lv, a); + + r = LvSet16(r, niP->info.sw_r, a); + g = LvSet16(g, niP->info.sw_g, a); + b = LvSet16(b, niP->info.sw_b, a); + } + + outP->red = RoundShort((A_long)(r + 0.5)); + outP->green = RoundShort((A_long)(g + 0.5)); + outP->blue = RoundShort((A_long)(b + 0.5)); + } + else { + outP->alpha = 0; + } + + return err; +} +//------------------------------------------------------------------------------------------------- +static PF_Err +debug16(CFsAE *ae, ParamInfo16 *pi) +{ + PF_Err err = PF_Err_NONE; + + A_long a; + a = pi->hi_x_offset; if (a < 0) a *= -1; + pi->data[0].alpha = RoundShortFpLong(a); + a = pi->hi_y_offset; if (a < 0) a *= -1; + pi->data[1].alpha = RoundShortFpLong(a); + a = pi->sw_x_offset; if (a < 0) a *= -1; + pi->data[2].alpha = RoundShortFpLong(a); + a = pi->sw_y_offset; if (a < 0) a *= -1; + pi->data[3].alpha = RoundShortFpLong(a); + + a = pi->info.hi_length >> 16; + pi->data[4].alpha = RoundShortFpLong(a); + a = pi->info.sw_length >> 16; + pi->data[5].alpha = RoundShortFpLong(a); + + + return err; +} +//------------------------------------------------------------------------------------------------- +PF_Err ToParam16(CFsAE *ae, ParamInfo *infoP, ParamInfo16 *pi) +{ + PF_Err err = PF_Err_NONE; + + infoP->TagetCount = 0; + + pi->width = ae->out->width(); + pi->width2 = pi->width - 1; + pi->widthTrue = ae->out->widthTrue(); + pi->height = ae->out->height(); + pi->height2 = pi->height - 1; + pi->data = (PF_Pixel16 *)ae->out->data(); + pi->in_data = ae->in_data; + + pi->info.Color_Max = infoP->Color_Max; + pi->info.EXColor_Max = infoP->EXColor_Max; + + for (int i = 0; i < pi->info.Color_Max; i++) pi->info.Color[i] = infoP->Color[i]; + for (int i = 0; i < pi->info.EXColor_Max; i++) pi->info.EXColor[i] = infoP->EXColor[i]; + + pi->info.noise = infoP->noise; + pi->info.draw = infoP->draw; + pi->info.edge = infoP->edge; + + pi->scanlineSize = pi->width; + if (pi->scanlineSize < pi->height) pi->scanlineSize = pi->height; + + + pi->info.hi_length = ae->downScaleNoClip(infoP->hi_length); + pi->info.hi_blur = ae->downScaleNoClip(infoP->hi_blur); + if (pi->info.hi_length <= 0) pi->info.hi_blur = 0; + + pi->info.sw_length = ae->downScaleNoClip(infoP->sw_length); + pi->info.sw_blur = ae->downScaleNoClip(infoP->sw_blur); + if (pi->info.sw_length <= 0) pi->info.sw_blur = 0; + + pi->blurSize = pi->info.hi_blur; + if (pi->blurSize < pi->info.sw_blur) pi->blurSize = pi->info.sw_blur; + + + CRotCalc rot(ae->in_data); + + A_long LM = ae->downScale(LENGTH_MIN); + + if (pi->info.hi_length > 0) { + rot.SetRotLength(infoP->angle, pi->info.hi_length); + pi->hi_x_offset = (A_long)((double)(rot.x()) / 65536.0 + 0.5); + pi->hi_y_offset = (A_long)((double)(rot.y()) / 65536.0 + 0.5); + if (pi->hi_x_offset > 0) pi->hi_x_offset += LM; + else if (pi->hi_x_offset < 0)pi->hi_x_offset -= LM; + if (pi->hi_y_offset > 0) pi->hi_y_offset += LM; + else if (pi->hi_y_offset < 0)pi->hi_y_offset -= LM; + } + else { + pi->hi_x_offset = 0; + pi->hi_y_offset = 0; + + } + if (pi->info.sw_length > 0) { + rot.SetRotLength(infoP->angle, pi->info.sw_length); + pi->sw_x_offset = (A_long)((double)(rot.x()) / 65536.0 + 0.5); + pi->sw_y_offset = (A_long)((double)(rot.y()) / 65536.0 + 0.5); + if (pi->sw_x_offset > 0) pi->sw_x_offset += LM; + else if (pi->sw_x_offset < 0)pi->sw_x_offset -= LM; + if (pi->sw_y_offset > 0) pi->sw_y_offset += LM; + else if (pi->sw_y_offset < 0)pi->sw_y_offset -= LM; + } + else { + pi->sw_x_offset = 0; + pi->sw_y_offset = 0; + + } + pi->info.hi_lv = infoP->hi_lv; + pi->info.hi_r = infoP->hi_r; + pi->info.hi_g = infoP->hi_g; + pi->info.hi_b = infoP->hi_b; + + pi->info.sw_lv = infoP->sw_lv; + pi->info.sw_r = infoP->sw_r; + pi->info.sw_g = infoP->sw_g; + pi->info.sw_b = infoP->sw_b; + + + pi->MaskColor16 = CONV8TO16(infoP->MaskColor); + pi->info.white = infoP->white; + + return err; +} + //------------------------------------------------------------------------------------------------- +PF_Err SitsuKanSub16(CFsAE *ae, ParamInfo *infoP) +{ + PF_Err err = PF_Err_NONE; + + if (ae->out->Enabled() == FALSE) + { + return PF_Err_INVALID_CALLBACK; + } + ParamInfo16 pi; + + ToParam16(ae, infoP, &pi); + + + if (infoP->edge == TRUE) { + GetPX16 = GetPX16_NOCLIP; + } + else { + GetPX16 = GetPX16_CLIP; + } + + //ターゲットをalphaへ抽出 + pi.TargetCount = 0; + ERR(ae->iterate16((refconType)&pi, GetTargetPixels16)); + + if (pi.TargetCount > 0) { + + //Max + //alphaをgreenへ + ERR(ae->iterate16((refconType)&pi, AlphaTargetToGreen16)); + + + A_long ll = ae->downScale(LENGTH_MIN); + if ((pi.info.hi_length > 0) || (pi.info.sw_length > 0)) { + + //LENGTH_MIN回繰り返す + for (int i = 0; i < ll; i++) { + ERR(ae->iterate16((refconType)&pi, MaxHorG2R16)); + ERR(ae->iterate16((refconType)&pi, RedToGreen16)); + ERR(ae->iterate16((refconType)&pi, MaxVurG2R16)); + ERR(ae->iterate16((refconType)&pi, RedToGreen16)); + } + + //ずらし + ERR(ae->iterate16((refconType)&pi, MoveG2R16)); + ERR(ae->iterate16((refconType)&pi, RedToGreen16)); + ERR(ae->iterate16((refconType)&pi, SplitG2RGB16)); + //ぼかし + if ((pi.info.hi_blur > 0) || (pi.info.sw_blur > 0)) { + pi.scanlineH = ae->NewHandle(pi.scanlineSize * sizeof(A_u_short) * 4 + pi.blurSize*sizeof(A_long) + 100); + + if (pi.scanlineH != NULL) { + ae->LockHandle(pi.scanlineH); + pi.scanline = *(A_u_short**)pi.scanlineH; + pi.scanlineM = pi.scanline + pi.scanlineSize * 2; + pi.blurTable = (A_long*)(pi.scanline + pi.scanlineSize * 4); + //hi + if (pi.info.hi_blur > 0) { + pi.IsTagetHi = TRUE; + if (makeTbl16(&pi) == TRUE) { + horBlurG16(&pi); + vurBlurG16(&pi); + + A_long b = pi.info.hi_blur; + pi.info.hi_blur /= 4; + if (makeTbl16(&pi) == TRUE) { + horBlurG16(&pi); + vurBlurG16(&pi); + } + pi.info.hi_blur = b; + + } + } + //sw + + if (pi.info.sw_blur > 0) { + pi.IsTagetHi = FALSE; + if (makeTbl16(&pi) == TRUE) { + (Iterate16(ae, &pi, SwapGB16)); + horBlurG16(&pi); + vurBlurG16(&pi); + A_long b = infoP->sw_blur; + pi.info.sw_blur /= 4; + if (makeTbl16(&pi) == TRUE) { + horBlurG16(&pi); + vurBlurG16(&pi); + } + pi.info.sw_blur = b; + (Iterate16(ae, &pi, SwapGB16)); + } + } + + ae->UnlockHandle(pi.scanlineH); + ae->DisposeHandle(pi.scanlineH); + pi.scanlineH = NULL; + } + } + } + + //ERR(ae->iterate16((refconType)&pi, MaskedGBFromA16)); + (Iterate16(ae, &pi, MaskedGBFromA16)); + if (pi.info.noise > 0) { + F_SRAND(ae->frame()); + //ERR(ae->iterate8((refconType)&pi, Noise8)); + (Iterate16(ae, &pi, Noise16)); + } + if ((pi.info.draw == 1) || (pi.info.draw == 2)) { + //ERR(ae->iterate8((refconType)&pi, ColorSet8)); + (Iterate16(ae, &pi, ColorSet16)); + } + + + } + + if (pi.info.draw == 1) { + //ERR(ae->iterate8((refconType)&pi, CopyTagetEX)); + (Iterate16(ae, &pi, CopyTagetEX16)); + } + else if (pi.info.draw == 3) + { + //ERR(ae->iterate16((refconType)&pi, GreenToAlpha16)); + (Iterate16(ae, &pi, GreenToAlpha16)); + } + else if (pi.info.draw == 4) + { + //ERR(ae->iterate16((refconType)&pi, BlueToAlpha16)); + (Iterate16(ae, &pi, BlueToAlpha16)); + } + + //debug16(ae, &pi); + + return err; + +} +/* + +まずAlphaにTargetエリアのマスクを作成 + + +*/ +//------------------------------------------------------------------------------------------------- diff --git a/ShitsuKanBlur/ShitsuKanBlurSub32.cpp b/ShitsuKanBlur/ShitsuKanBlurSub32.cpp new file mode 100644 index 0000000..17d339b --- /dev/null +++ b/ShitsuKanBlur/ShitsuKanBlurSub32.cpp @@ -0,0 +1,933 @@ +#include "ShitsuKanBlur.h" + +static PF_Pixel32(*GetPX32)(ParamInfo32 *infoP, A_long x, A_long y); + +//------------------------------------------------------------------------------------------------- +//ぼかし用のガウステーブル +static PF_Boolean makeTbl32(ParamInfo32 *infoP) +{ + PF_InData *in_data; + in_data = infoP->in_data; + A_long range; + if (infoP->IsTagetHi) range = infoP->info.hi_blur; + else range = infoP->info.sw_blur; + + if (range <= 0) return FALSE; + double zone = (double)range / 3; + for (A_long i = 0; i <= range; i++) { + infoP->blurTable[i] = (A_long)(PF_EXP(-i * i / (2 * zone * zone)) * 0x100); + } + return TRUE; +} +//---------------------------------------------------------------------------- +//Greenのみを水平ぼかし +void horBlurG32(ParamInfo32 *infoP) +{ + A_long blur = 0; + if (infoP->IsTagetHi) blur = infoP->info.hi_blur; + else blur = infoP->info.sw_blur; + if (blur <= 0) return; + + A_long wt = infoP->widthTrue; + PF_FpShort *scanline = infoP->scanline; + PF_FpShort *scanlineM = infoP->scanlineM; + PF_PixelFloat *data = infoP->data; + A_long hor = 0; + A_long ix, i; + A_long x = 0, y = 0; + A_long count, gauss; + double sg; + hor = 0; + for (y = 0; y < infoP->height; y++) + { + hor = wt * y; + //スキャンラインへコピー + for (x = 0; x < infoP->width; x++) { + scanline[x] = data[x + hor].green; + scanlineM[x] = data[x + hor].red; + } + for (x = 0; x < infoP->width; x++) { + if (scanlineM[x] >= 1.0) + { + count = gauss = 0; + sg = 0.0; + //真ん中 + gauss = infoP->blurTable[0]; + sg += (double)scanline[x] * (double)gauss; + count += gauss; + //左 + for (i = 1; i <= blur; i++) + { + ix = x - i; + if (ix < 0) break; + if (scanlineM[ix] > 0) { + gauss = infoP->blurTable[i]; + sg += (double)scanline[ix] * (double)gauss; + count += gauss; + } + } + //右 + for (i = 1; i <= blur; i++) + { + ix = x + i; + if (ix >= infoP->width) break; + if (scanlineM[ix] > 0) { + gauss = infoP->blurTable[i]; + sg += (double)scanline[ix] * (double)gauss; + count += gauss; + } + } + if (count > 0) { + data[hor + x].green = RoundFpShortDouble(sg / (double)count); + } + } + else { + data[hor + x].green = 0; + } + } + } + +} +//---------------------------------------------------------------------------- +void vurBlurG32(ParamInfo32 *infoP) +{ + A_long blur = 0; + if (infoP->IsTagetHi) blur = infoP->info.hi_blur; + else blur = infoP->info.sw_blur; + if (blur <= 0) return; + + A_long wt = infoP->widthTrue; + + PF_FpShort *scanline = infoP->scanline; + PF_FpShort *scanlineM = infoP->scanlineM; + PF_PixelFloat *data = infoP->data; + A_long hor = 0; + A_long iy, i; + A_long x = 0, y = 0; + A_long count, gauss; + double sg = 0; + hor = 0; + for (x = 0; x < infoP->width; x++) + { + //スキャンラインへコピー + hor = 0; + for (y = 0; y < infoP->height; y++) { + scanline[y] = data[x + hor].green; + scanlineM[y] = data[x + hor].red; + hor += wt; + } + hor = 0; + for (y = 0; y < infoP->height; y++) { + if (scanlineM[y] >= 1.0) + { + count = gauss = 0; + sg = 0.0; + //真ん中 + gauss = infoP->blurTable[0]; + sg += (double)scanline[y] * (double)gauss; + count += gauss; + //左 + for (i = 1; i <= blur; i++) + { + iy = y - i; + if (iy < 0) break; + if (scanlineM[iy] > 0) { + gauss = infoP->blurTable[i]; + sg += (double)scanline[iy] * (double)gauss; + count += gauss; + } + } + //右 + for (i = 1; i <= blur; i++) + { + iy = y + i; + if (iy >= infoP->height) break; + if (scanlineM[iy] > 0) { + gauss = infoP->blurTable[i]; + sg += (double)scanline[iy] * (double)gauss; + count += gauss; + } + } + if (count > 0) { + data[hor + x].green = RoundFpShortDouble(sg / (double)count); + } + } + else { + data[hor + x].green = 0; + } + hor += wt; + } + } + +} +//------------------------------------------------------------------------------------------------- +static PF_PixelFloat GetPX32_NOCLIP(ParamInfo32 *infoP, A_long x, A_long y) +{ + if ((x < 0) || (y < 0) || (x > infoP->width2) || (y > infoP->height2)) { + PF_PixelFloat p = { 0,0,0,0 }; + return p; + } + else { + PF_PixelFloat *data; + data = infoP->data; + return data[x + y * infoP->widthTrue]; + } +} +//------------------------------------------------------------------------------------------------- +static PF_PixelFloat GetPX32_CLIP(ParamInfo32 *infoP, A_long x, A_long y) +{ + A_long xx = x; + A_long yy = y; + if (xx < 0) xx = 0; + else if (xx > infoP->width2) xx = infoP->width2; + + if (yy < 0) yy = 0; + else if (yy > infoP->height2) yy = infoP->height2; + + PF_PixelFloat *data; + data = infoP->data; + return data[xx + yy * infoP->widthTrue]; +} +//------------------------------------------------------------------------------------------------- +static PF_Err +Iterate32( + CFsAE *ae, + ParamInfo32 *niP, + PF_Err(*pix_fn)(refconType refcon, A_long x, A_long y, PF_Pixel32 *in, PF_Pixel32 *out) +) +{ + PF_Err err = PF_Err_NONE; + + A_long w = ae->in->width(); + A_long h = ae->in->height(); + + A_long owi = ae->in->offsetWidth(); + A_long owo = ae->out->offsetWidth(); + + PF_PixelFloat *odata; + PF_PixelFloat *idata; + + idata = (PF_PixelFloat*)ae->in->data(); + odata = (PF_PixelFloat*)ae->out->data(); + + for (A_long yL = 0; yL < h; yL++) { + for (A_long xL = 0; xL < w; xL++) { + pix_fn((refconType)niP, xL, yL, idata, odata); + idata++; + odata++; + } + idata += owi; + odata += owo; + } + return err; +} +//------------------------------------------------------------------------------------------------- +static PF_Err +GetTargetPixels32( + refconType refcon, + A_long xL, + A_long yL, + PF_Pixel32 *inP, + PF_Pixel32 *outP) +{ + PF_Err err = PF_Err_NONE; + ParamInfo32 * niP = reinterpret_cast(refcon); + + + PF_Pixel8 s = CONV32TO8(*inP); + PF_PixelFloat onC = { 1,0,0,0 }; + PF_PixelFloat exC = { 0.5,0,0,0 }; + PF_PixelFloat offC = { 0,0,0,0 }; + + A_long b = 0; + for (int i = 0; i < niP->info.Color_Max; i++) + { + if (compPix8(s, niP->info.Color[i]) == TRUE) + { + b = 1; + break; + } + } + if (b == 0) { + for (int i = 0; i < niP->info.EXColor_Max; i++) + { + if (compPix8(s, niP->info.EXColor[i]) == TRUE) + { + b = 2; + break; + } + } + } + if (b == 1) { + *outP = onC; + niP->TargetCount += 1; + } + else if (b==2){ + *outP = exC; + } + else { + *outP = offC; + } + return err; +} +//------------------------------------------------------------------------------------------------- +static PF_Err +AlphaTargetToGreen32( + refconType refcon, + A_long xL, + A_long yL, + PF_PixelFloat *inP, + PF_PixelFloat *outP) +{ + PF_Err err = PF_Err_NONE; + + if (outP->alpha != 0) { + outP->green = 1.0; + } + + return err; +} +//------------------------------------------------------------------------------------------------- +static PF_Err +SwapGB32( + refconType refcon, + A_long xL, + A_long yL, + PF_PixelFloat *inP, + PF_PixelFloat *outP) +{ + PF_Err err = PF_Err_NONE; + + PF_FpShort tmp = outP->green; + outP->green = outP->blue; + outP->blue = tmp; + return err; +} +//------------------------------------------------------------------------------------------------- +static PF_Err +RedToGreen32( + refconType refcon, + A_long xL, + A_long yL, + PF_PixelFloat *inP, + PF_PixelFloat *outP) +{ + PF_Err err = PF_Err_NONE; + + outP->green = outP->red; + + return err; +} +//------------------------------------------------------------------------------------------------- +static PF_Err +AlphaON32( + refconType refcon, + A_long xL, + A_long yL, + PF_PixelFloat *inP, + PF_PixelFloat *outP) +{ + PF_Err err = PF_Err_NONE; + + outP->alpha = 1.0; + + return err; +} +//------------------------------------------------------------------------------------------------- +static PF_Err +MaskedGBFromA32( + 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->green = 0; + outP->blue = 0; + } + outP->red = 0; + + + return err; +} + +//------------------------------------------------------------------------------------------------- +static PF_Err +MaxHorG2R32( + 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); + + PF_Boolean b = FALSE; + if (outP->green == 0) + { + PF_PixelFloat *d; + if (xL > 0) { + d = outP - 1; + if (d->green > 0) b = true; + } + if (b == FALSE) { + if (xL < niP->width2) { + d = outP + 1; + if (d->green > 0) b = true; + } + } + + } + else { + b = TRUE; + } + if (b == TRUE) { + outP->red = 1.0; + } + else { + outP->red = 0; + } + + return err; +} +//------------------------------------------------------------------------------------------------- +static PF_Err +MaxVurG2R32( + 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); + + PF_Boolean b = FALSE; + if (outP->green == 0) + { + PF_PixelFloat *d; + if (yL > 0) { + d = outP - niP->widthTrue; + if (d->green > 0) b = true; + } + if (b == FALSE) { + if (yL < niP->height2) { + d = outP + niP->widthTrue; + if (d->green > 0) b = true; + } + } + + } + else { + b = TRUE; + } + if (b == TRUE) { + outP->red = 1.0; + } + else { + outP->red = 0; + } + + + return err; +} + +//------------------------------------------------------------------------------------------------- +static PF_Err +MoveG2R32( + 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); + + + PF_PixelFloat c = *outP; + + PF_PixelFloat p1 = GetPX32(niP, xL + niP->hi_x_offset, yL + niP->hi_y_offset); + PF_PixelFloat p2 = GetPX32(niP, xL - niP->sw_x_offset, yL - niP->sw_y_offset); + + + //PF_MAX_CHAN16 = 32768 0b10000000_00000000 + //だったので + A_long r = 0; + if (outP->green > 0) r += 4; + if (p1.green > 0) r += 2; + if (p2.green > 0) r += 1; + + outP->red = (PF_FpShort)r/8; + + + return err; +} +//------------------------------------------------------------------------------------------------- +static PF_Err +SplitG2RGB32( + 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); + + A_long moto = ((A_long)(outP->green*8) & 4) >> 2; + A_long up = ((A_long)(outP->green * 8) & 2) >> 1; + A_long down = (A_long)(outP->green*8) & 1; + + if (moto > 0) { + outP->red = 1.0; + } + else { + outP->red = 0; + } + + if (moto - up > 0) { + outP->green= 1.0; + } + else { + outP->green = 0; + } + if (moto - down > 0) { + outP->blue = 1.0; + } + else { + outP->blue = 0; + } + + + + return err; +} +//------------------------------------------------------------------------------------------------- +static PF_Err +Noise32( + 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); + + + double v = (double)(niP->info.noise ); + double rnd = v - (v * 2 * (double)F_RAND() / (double)F_RAND_MAX); + if (rnd != 0) { + if (outP->alpha > 0) { + outP->green = RoundFpShortDouble(outP->green + rnd); + outP->blue = RoundFpShortDouble(outP->blue + rnd); + } + } + + return err; +} +//------------------------------------------------------------------------------------------------- +static PF_Err +CopyTagetEX32( + 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); + + PF_PixelFloat c = { 0,0,0,0 }; + if (outP->alpha != 1.0) + { + PF_Boolean b = TRUE; + if (niP->info.white == TRUE) + { + if ((inP->red >= 1.0) && (inP->green >= 1.0) && (inP->blue >= 1.0)) { + b = FALSE; + } + } + if (b == TRUE) { + *outP = *inP; + } + else { + *outP = c; + } + } + return err; +} +//------------------------------------------------------------------------------------------------- +static PF_Err +GreenToAlpha32( + 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); + + PF_PixelFloat c = niP->MaskColor32; + c.alpha = outP->green; + *outP = c; + + return err; +} +//------------------------------------------------------------------------------------------------- +static PF_Err +BlueToAlpha32( + 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); + + PF_PixelFloat c = niP->MaskColor32; + c.alpha = outP->blue;; + *outP = c; + + return err; +} +//------------------------------------------------------------------------------------------------- +static PF_FpLong +LvSet32(PF_FpLong src, PF_FpLong lv, PF_FpLong alpha) +{ + PF_FpLong ret = 0; + + if ((lv == 0) || (alpha == 0)) { + return src; + } + PF_FpLong r = 0; + if (lv < 0) { + r = src * lv; + } + else if (lv > 0) + { + r = (1.0 - src) *lv; + } + if (alpha != 1) { + r *= alpha; + } + + ret = src + r; + + + return ret; +} + + +//------------------------------------------------------------------------------------------------- +static PF_Err +ColorSet32( + 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); + + //hi + PF_FpLong r, g, b; + + if (outP->alpha == SKN32_ON) { + PF_FpLong a = (PF_FpLong)outP->green; + if (a > 1) a = 1; + + r = (PF_FpLong)inP->red; + g = (PF_FpLong)inP->green; + b = (PF_FpLong)inP->blue; + if (a > 0) { + r = LvSet32(r, niP->info.hi_lv, a); + g = LvSet32(g, niP->info.hi_lv, a); + b = LvSet32(b, niP->info.hi_lv, a); + + r = LvSet32(r, niP->info.hi_r, a); + g = LvSet32(g, niP->info.hi_g, a); + b = LvSet32(b, niP->info.hi_b, a); + } + a = (PF_FpLong)outP->blue; + if (a > 1) a = 1; + if (a > 0) { + r = LvSet32(r, niP->info.sw_lv, a); + g = LvSet32(g, niP->info.sw_lv, a); + b = LvSet32(b, niP->info.sw_lv, a); + + r = LvSet32(r, niP->info.sw_r, a); + g = LvSet32(g, niP->info.sw_g, a); + b = LvSet32(b, niP->info.sw_b, a); + } + + outP->red = RoundFpShortDouble(r); + outP->green = RoundFpShortDouble(g); + outP->blue = RoundFpShortDouble(b); + } + else { + outP->alpha = 0; + } + + return err; +} +//------------------------------------------------------------------------------------------------- +static PF_Err +debug32(CFsAE *ae, ParamInfo32 *pi) +{ + PF_Err err = PF_Err_NONE; + + double a; + a = pi->hi_x_offset; if (a < 0) a *= -1; + pi->data[0].alpha = RoundFpShortDouble(a); + a = pi->hi_y_offset; if (a < 0) a *= -1; + pi->data[1].alpha = RoundFpShortDouble(a); + a = pi->sw_x_offset; if (a < 0) a *= -1; + pi->data[2].alpha = RoundFpShortDouble(a); + a = pi->sw_y_offset; if (a < 0) a *= -1; + pi->data[3].alpha = RoundFpShortDouble(a); + + a = pi->info.hi_length >> 16; + pi->data[4].alpha = RoundFpShortDouble(a); + a = pi->info.sw_length >> 16; + pi->data[5].alpha = RoundFpShortDouble(a); + + + return err; +} +//------------------------------------------------------------------------------------------------- +PF_Err ToParam32(CFsAE *ae, ParamInfo *infoP, ParamInfo32 *pi) +{ + PF_Err err = PF_Err_NONE; + + infoP->TagetCount = 0; + + pi->width = ae->out->width(); + pi->width2 = pi->width - 1; + pi->widthTrue = ae->out->widthTrue(); + pi->height = ae->out->height(); + pi->height2 = pi->height - 1; + pi->data = (PF_PixelFloat *)ae->out->data(); + pi->in_data = ae->in_data; + + pi->info.Color_Max = infoP->Color_Max; + pi->info.EXColor_Max = infoP->EXColor_Max; + + for (int i = 0; i < pi->info.Color_Max; i++) pi->info.Color[i] = infoP->Color[i]; + for (int i = 0; i < pi->info.EXColor_Max; i++) pi->info.EXColor[i] = infoP->EXColor[i]; + + pi->info.noise = infoP->noise; + pi->info.draw = infoP->draw; + pi->info.edge = infoP->edge; + + pi->scanlineSize = pi->width; + if (pi->scanlineSize < pi->height) pi->scanlineSize = pi->height; + + + pi->info.hi_length = ae->downScaleNoClip(infoP->hi_length); + pi->info.hi_blur = ae->downScaleNoClip(infoP->hi_blur); + if (pi->info.hi_length <= 0) pi->info.hi_blur = 0; + + pi->info.sw_length = ae->downScaleNoClip(infoP->sw_length); + pi->info.sw_blur = ae->downScaleNoClip(infoP->sw_blur); + if (pi->info.sw_length <= 0) pi->info.sw_blur = 0; + + pi->blurSize = pi->info.hi_blur; + if (pi->blurSize < pi->info.sw_blur) pi->blurSize = pi->info.sw_blur; + + + CRotCalc rot(ae->in_data); + + A_long LM = ae->downScale(LENGTH_MIN); + + if (pi->info.hi_length > 0) { + rot.SetRotLength(infoP->angle, pi->info.hi_length); + pi->hi_x_offset = (A_long)((double)(rot.x()) / 65536.0 + 0.5); + pi->hi_y_offset = (A_long)((double)(rot.y()) / 65536.0 + 0.5); + if (pi->hi_x_offset > 0) pi->hi_x_offset += LM; + else if (pi->hi_x_offset < 0)pi->hi_x_offset -= LM; + if (pi->hi_y_offset > 0) pi->hi_y_offset += LM; + else if (pi->hi_y_offset < 0)pi->hi_y_offset -= LM; + } + else { + pi->hi_x_offset = 0; + pi->hi_y_offset = 0; + + } + if (pi->info.sw_length > 0) { + rot.SetRotLength(infoP->angle, pi->info.sw_length); + pi->sw_x_offset = (A_long)((double)(rot.x()) / 65536.0 + 0.5); + pi->sw_y_offset = (A_long)((double)(rot.y()) / 65536.0 + 0.5); + if (pi->sw_x_offset > 0) pi->sw_x_offset += LM; + else if (pi->sw_x_offset < 0)pi->sw_x_offset -= LM; + if (pi->sw_y_offset > 0) pi->sw_y_offset += LM; + else if (pi->sw_y_offset < 0)pi->sw_y_offset -= LM; + } + else { + pi->sw_x_offset = 0; + pi->sw_y_offset = 0; + + } + pi->info.hi_lv = infoP->hi_lv; + pi->info.hi_r = infoP->hi_r; + pi->info.hi_g = infoP->hi_g; + pi->info.hi_b = infoP->hi_b; + + pi->info.sw_lv = infoP->sw_lv; + pi->info.sw_r = infoP->sw_r; + pi->info.sw_g = infoP->sw_g; + pi->info.sw_b = infoP->sw_b; + + + pi->MaskColor32 = CONV8TO32(infoP->MaskColor); + pi->info.white = infoP->white; + + return err; +} + //------------------------------------------------------------------------------------------------- +PF_Err SitsuKanSub32(CFsAE *ae, ParamInfo *infoP) +{ + PF_Err err = PF_Err_NONE; + + if (ae->out->Enabled() == FALSE) + { + return PF_Err_INVALID_CALLBACK; + } + ParamInfo32 pi; + + ToParam32(ae, infoP, &pi); + + + if (infoP->edge == TRUE) { + GetPX32 = GetPX32_NOCLIP; + } + else { + GetPX32 = GetPX32_CLIP; + } + + //ターゲットをalphaへ抽出 + pi.TargetCount = 0; + ERR(ae->iterate32((refconType)&pi, GetTargetPixels32)); + + if (pi.TargetCount > 0) { + + //Max + //alphaをgreenへ + ERR(ae->iterate32((refconType)&pi, AlphaTargetToGreen32)); + + + + A_long ll = ae->downScale(LENGTH_MIN); + if ((pi.info.hi_length > 0) || (pi.info.sw_length > 0)) { + + //LENGTH_MIN回繰り返す + for (int i = 0; i < ll; i++) { + ERR(ae->iterate32((refconType)&pi, MaxHorG2R32)); + ERR(ae->iterate32((refconType)&pi, RedToGreen32)); + ERR(ae->iterate32((refconType)&pi, MaxVurG2R32)); + ERR(ae->iterate32((refconType)&pi, RedToGreen32)); + } + + //ずらし + ERR(ae->iterate32((refconType)&pi, MoveG2R32)); + ERR(ae->iterate32((refconType)&pi, RedToGreen32)); + ERR(ae->iterate32((refconType)&pi, SplitG2RGB32)); + + + //ぼかし + if ((pi.info.hi_blur > 0) || (pi.info.sw_blur > 0)) { + pi.scanlineH = ae->NewHandle(pi.scanlineSize * sizeof(PF_FpShort) * 4 + pi.blurSize*sizeof(A_long) + 100); + + if (pi.scanlineH != NULL) { + ae->LockHandle(pi.scanlineH); + pi.scanline = *(PF_FpShort**)pi.scanlineH; + pi.scanlineM = pi.scanline + pi.scanlineSize * 2; + pi.blurTable = (A_long*)(pi.scanline + pi.scanlineSize * 4); + //hi + if (pi.info.hi_blur > 0) { + pi.IsTagetHi = TRUE; + if (makeTbl32(&pi) == TRUE) { + horBlurG32(&pi); + vurBlurG32(&pi); + + A_long b = pi.info.hi_blur; + pi.info.hi_blur /= 4; + if (makeTbl32(&pi) == TRUE) { + horBlurG32(&pi); + vurBlurG32(&pi); + } + pi.info.hi_blur = b; + + } + } + //sw + + if (pi.info.sw_blur > 0) { + pi.IsTagetHi = FALSE; + if (makeTbl32(&pi) == TRUE) { + (Iterate32(ae, &pi, SwapGB32)); + horBlurG32(&pi); + vurBlurG32(&pi); + A_long b = infoP->sw_blur; + pi.info.sw_blur /= 4; + if (makeTbl32(&pi) == TRUE) { + horBlurG32(&pi); + vurBlurG32(&pi); + } + pi.info.sw_blur = b; + (Iterate32(ae, &pi, SwapGB32)); + } + } + + ae->UnlockHandle(pi.scanlineH); + ae->DisposeHandle(pi.scanlineH); + pi.scanlineH = NULL; + } + } + } + + (Iterate32(ae, &pi, MaskedGBFromA32)); + if (pi.info.noise > 0) { + F_SRAND(ae->frame()); + (Iterate32(ae, &pi, Noise32)); + } + if ((pi.info.draw == 1) || (pi.info.draw == 2)) { + (Iterate32(ae, &pi, ColorSet32)); + } + + + + } + + if (pi.info.draw == 1) { + (Iterate32(ae, &pi, CopyTagetEX32)); + } + else if (pi.info.draw == 3) + { + (Iterate32(ae, &pi, GreenToAlpha32)); + } + else if (pi.info.draw == 4) + { + (Iterate32(ae, &pi, BlueToAlpha32)); + } + + + + return err; + +} +/* + +まずAlphaにTargetエリアのマスクを作成 + + +*/ +//------------------------------------------------------------------------------------------------- diff --git a/ShitsuKanBlur/ShitsuKanBlurSub8.cpp b/ShitsuKanBlur/ShitsuKanBlurSub8.cpp new file mode 100644 index 0000000..bfc894f --- /dev/null +++ b/ShitsuKanBlur/ShitsuKanBlurSub8.cpp @@ -0,0 +1,903 @@ +#include "ShitsuKanBlur.h" + +static PF_Pixel(*GetPX8)(ParamInfo8 *infoP, A_long x, A_long y); + +//------------------------------------------------------------------------------------------------- +//ぼかし用のガウステーブル +static PF_Boolean makeTbl(ParamInfo8 *infoP) +{ + PF_InData *in_data; + in_data = infoP->in_data; + A_long range; + if (infoP->IsTagetHi) range = infoP->info.hi_blur; + else range = infoP->info.sw_blur; + + if (range <= 0) return FALSE; + double zone = (double)range / 3; + for (A_long i = 0; i <= range; i++) { + infoP->blurTable[i] = (A_long)(PF_EXP(-i * i / (2 * zone * zone)) * 0x100); + } + return TRUE; +} +//---------------------------------------------------------------------------- +//Greenのみを水平ぼかし +void horBlurG(ParamInfo8 *infoP) +{ + A_long blur = 0; + if (infoP->IsTagetHi) blur = infoP->info.hi_blur; + else blur = infoP->info.sw_blur; + if (blur <= 0) return; + + A_long wt = infoP->widthTrue; + A_u_char *scanline = infoP->scanline; + A_u_char *scanlineM = infoP->scanlineM; + PF_Pixel *data = infoP->data; + A_long hor = 0; + A_long ix, i; + A_long x = 0, y = 0; + A_long count, sg, gauss; + + hor = 0; + for (y = 0; y < infoP->height; y++) + { + hor = wt * y; + //スキャンラインへコピー + for (x = 0; x < infoP->width; x++) { + scanline[x] = data[x + hor].green; + scanlineM[x] = data[x + hor].red; + } + for (x = 0; x < infoP->width; x++) { + if (scanlineM[x] == PF_MAX_CHAN8) + { + count = sg = gauss = 0; + //真ん中 + gauss = infoP->blurTable[0]; + sg += (A_long)scanline[x] * gauss; + count += gauss; + //左 + for (i = 1; i <= blur; i++) + { + ix = x - i; + if (ix < 0) break; + if (scanlineM[ix] > 0) { + gauss = infoP->blurTable[i]; + sg += (A_long)scanline[ix] * gauss; + count += gauss; + } + } + //右 + for (i = 1; i <= blur; i++) + { + ix = x + i; + if (ix >= infoP->width) break; + if (scanlineM[ix] > 0) { + gauss = infoP->blurTable[i]; + sg += (A_long)scanline[ix] * gauss; + count += gauss; + } + } + if (count > 0) { + data[hor + x].green = RoundByteLong(sg / count); + } + } + else { + data[hor + x].green = 0; + } + } + } + +} +//---------------------------------------------------------------------------- +void vurBlurG(ParamInfo8 *infoP) +{ + A_long blur = 0; + if (infoP->IsTagetHi) blur = infoP->info.hi_blur; + else blur = infoP->info.sw_blur; + if (blur <= 0) return; + + A_long wt = infoP->widthTrue; + + A_u_char *scanline = infoP->scanline; + A_u_char *scanlineM = infoP->scanlineM; + PF_Pixel *data = infoP->data; + A_long hor = 0; + A_long iy, i; + A_long x = 0, y = 0; + A_long count, sg, gauss; + hor = 0; + for (x = 0; x < infoP->width; x++) + { + //スキャンラインへコピー + hor = 0; + for (y = 0; y < infoP->height; y++) { + scanline[y] = data[x + hor].green; + scanlineM[y] = data[x + hor].red; + hor += wt; + } + hor = 0; + for (y = 0; y < infoP->height; y++) { + if (scanlineM[y] == PF_MAX_CHAN8) + { + count = sg = gauss = 0; + //真ん中 + gauss = infoP->blurTable[0]; + sg += (A_long)scanline[y] * gauss; + count += gauss; + //左 + for (i = 1; i <= blur; i++) + { + iy = y - i; + if (iy < 0) break; + if (scanlineM[iy] > 0) { + gauss = infoP->blurTable[i]; + sg += (A_long)scanline[iy] * gauss; + count += gauss; + } + } + //右 + for (i = 1; i <= blur; i++) + { + iy = y + i; + if (iy >= infoP->height) break; + if (scanlineM[iy] > 0) { + gauss = infoP->blurTable[i]; + sg += (A_long)scanline[iy] * gauss; + count += gauss; + } + } + if (count > 0) { + data[hor + x].green = RoundByteLong(sg / count); + } + } + else { + data[hor + x].green = 0; + } + hor += wt; + } + } + +} +//------------------------------------------------------------------------------------------------- +static PF_Pixel GetPX8_NOCLIP(ParamInfo8 *infoP, A_long x, A_long y) +{ + if ((x < 0) || (y < 0) || (x > infoP->width2) || (y > infoP->height2)) { + PF_Pixel p = { 0,0,0,0 }; + return p; + } + else { + PF_Pixel *data = (PF_Pixel *)infoP->data; + return data[x + y * infoP->widthTrue]; + } +} +//------------------------------------------------------------------------------------------------- +static PF_Pixel GetPX8_CLIP(ParamInfo8 *infoP, A_long x, A_long y) +{ + A_long xx = x; + A_long yy = y; + if (xx < 0) xx = 0; + else if (xx > infoP->width2) xx = infoP->width2; + + if (yy < 0) yy = 0; + else if (yy > infoP->height2) yy = infoP->height2; + + PF_Pixel *data = (PF_Pixel *)infoP->data; + return data[xx + yy * infoP->widthTrue]; +} +//------------------------------------------------------------------------------------------------- +static PF_Err +Iterate( + CFsAE *ae, + ParamInfo8 *niP, + PF_Err(*pix_fn)(refconType refcon, A_long x, A_long y, PF_Pixel *in, PF_Pixel *out) +) +{ + PF_Err err = PF_Err_NONE; + + A_long w = ae->in->width(); + A_long h = ae->in->height(); + + A_long owi = ae->in->offsetWidth(); + A_long owo = ae->out->offsetWidth(); + + PF_Pixel *odata; + PF_Pixel *idata; + + idata = (PF_Pixel*)ae->in->data(); + odata = (PF_Pixel*)ae->out->data(); + + for (A_long yL = 0; yL < h; yL++) { + for (A_long xL = 0; xL < w; xL++) { + pix_fn((refconType)niP, xL, yL, idata, odata); + idata++; + odata++; + } + idata += owi; + odata += owo; + } + return err; +} +//------------------------------------------------------------------------------------------------- +static PF_Err +GetTargetPixels8( + 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); + + + PF_Pixel s = *inP; + PF_Pixel onC = { PF_MAX_CHAN8,0,0,0 }; + PF_Pixel exC = { PF_HALF_CHAN8,0,0,0 }; + PF_Pixel offC = { 0,0,0,0 }; + + A_long b = 0; + for (int i = 0; i < niP->info.Color_Max; i++) + { + if (compPix8(s, niP->info.Color[i]) == TRUE) + { + b = 1; + break; + } + } + if (b == 0) { + for (int i = 0; i < niP->info.EXColor_Max; i++) + { + if (compPix8(s, niP->info.EXColor[i]) == TRUE) + { + b = 2; + break; + } + } + } + if (b == 1) { + *outP = onC; + niP->TargetCount += 1; + } + else if (b==2){ + *outP = exC; + } + else { + *outP = offC; + } + return err; +} +//------------------------------------------------------------------------------------------------- +static PF_Err +AlphaTargetToGreen( + refconType refcon, + A_long xL, + A_long yL, + PF_Pixel8 *inP, + PF_Pixel8 *outP) +{ + PF_Err err = PF_Err_NONE; + + if (outP->alpha != 0) { + outP->green = PF_MAX_CHAN8; + } + + return err; +} +//------------------------------------------------------------------------------------------------- +static PF_Err +SwapGB( + refconType refcon, + A_long xL, + A_long yL, + PF_Pixel8 *inP, + PF_Pixel8 *outP) +{ + PF_Err err = PF_Err_NONE; + + A_u_char tmp = outP->green; + outP->green = outP->blue; + outP->blue = tmp; + return err; +} +//------------------------------------------------------------------------------------------------- +static PF_Err +RedToGreen( + refconType refcon, + A_long xL, + A_long yL, + PF_Pixel8 *inP, + PF_Pixel8 *outP) +{ + PF_Err err = PF_Err_NONE; + + outP->green = outP->red; + + return err; +} +//------------------------------------------------------------------------------------------------- +static PF_Err +MaskedGBFromA( + 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) { + outP->green = 0; + outP->blue = 0; + } + outP->red = 0; + + + return err; +} + +//------------------------------------------------------------------------------------------------- +static PF_Err +MaxHorG2R( + 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); + + PF_Boolean b = FALSE; + if (outP->green == 0) + { + PF_Pixel *d; + if (xL > 0) { + d = outP - 1; + if (d->green > 0) b = true; + } + if (b == FALSE) { + if (xL < niP->width2) { + d = outP + 1; + if (d->green > 0) b = true; + } + } + + } + else { + b = TRUE; + } + if (b == TRUE) { + outP->red = PF_MAX_CHAN8; + } + else { + outP->red = 0; + } + + return err; +} +//------------------------------------------------------------------------------------------------- +static PF_Err +MaxVurG2R( + 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); + + PF_Boolean b = FALSE; + if (outP->green == 0) + { + PF_Pixel *d; + if (yL > 0) { + d = outP - niP->widthTrue; + if (d->green > 0) b = true; + } + if (b == FALSE) { + if (yL < niP->height2) { + d = outP + niP->widthTrue; + if (d->green > 0) b = true; + } + } + + } + else { + b = TRUE; + } + if (b == TRUE) { + outP->red = PF_MAX_CHAN8; + } + else { + outP->red = 0; + } + + + return err; +} + +//------------------------------------------------------------------------------------------------- +static PF_Err +MoveG2R( + 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); + + + PF_Pixel p1 = GetPX8(niP, xL + niP->hi_x_offset, yL + niP->hi_y_offset); + PF_Pixel p2 = GetPX8(niP, xL - niP->sw_x_offset, yL - niP->sw_y_offset); + + A_u_char r = outP->green & 0x30; + r |= p1.green & 0x0C; + r |= p2.green & 0x03; + + outP->red = r; + + return err; +} +//------------------------------------------------------------------------------------------------- +static PF_Err +SplitG2RGB( + 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); + + A_u_char moto = (outP->green & 0x30) >> 4; + A_u_char up = (outP->green & 0x0c) >> 2; + A_u_char down = outP->green & 0x03; + + if (moto > 0) { + outP->red = PF_MAX_CHAN8; + } + else { + outP->red = 0; + } + + if (moto - up > 0) { + outP->green= PF_MAX_CHAN8; + } + else { + outP->green = 0; + } + if (moto - down > 0) { + outP->blue = PF_MAX_CHAN8; + } + else { + outP->blue = 0; + } + + + + return err; +} +//------------------------------------------------------------------------------------------------- +static PF_Err +Noise8( + 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); + + + A_long v = (A_long)(niP->info.noise * PF_MAX_CHAN8); + A_long rnd = v - (v * 2 * F_RAND() / F_RAND_MAX); + if (rnd != 0) { + if (outP->alpha > 0) { + outP->green = RoundByteLong(outP->green + rnd); + outP->blue = RoundByteLong(outP->blue + rnd); + } + } + + return err; +} +//------------------------------------------------------------------------------------------------- +static PF_Err +CopyTagetEX( + 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); + + PF_Pixel c = { 0,0,0,0 }; + if (outP->alpha != PF_MAX_CHAN8) + { + PF_Boolean b = TRUE; + if (niP->info.white == TRUE) + { + if ((inP->red == PF_MAX_CHAN8) && (inP->green == PF_MAX_CHAN8) && (inP->blue == PF_MAX_CHAN8)) { + b = FALSE; + } + } + if (b == TRUE) { + *outP = *inP; + } + else { + *outP = c; + } + } + return err; +} +//------------------------------------------------------------------------------------------------- +static PF_Err +GreenToAlpha( + 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); + + PF_Pixel c = niP->info.MaskColor; + c.alpha = outP->green;; + *outP = c; + + return err; +} +//------------------------------------------------------------------------------------------------- +static PF_Err +BlueToAlpha( + 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); + + PF_Pixel c = niP->info.MaskColor; + c.alpha = outP->blue;; + *outP = c; + + + + return err; +} +//------------------------------------------------------------------------------------------------- +static PF_FpLong +LvSet(PF_FpLong src, PF_FpLong lv, PF_FpLong alpha) +{ + PF_FpLong ret = 0; + + if ((lv == 0) || (alpha == 0)) { + return src; + } + PF_FpLong r = 0; + if (lv < 0) { + r = src * lv; + } + else if (lv > 0) + { + r = (PF_MAX_CHAN8 - src) *lv; + } + if (alpha != 1) { + r *= alpha; + } + + ret = src + r; + + + return ret; +} + + +static PF_Err +ColorSet8( + 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); + + //hi + PF_FpLong r, g, b; + + if (outP->alpha == PF_MAX_CHAN8) { + PF_FpLong a = (PF_FpLong)outP->green / PF_MAX_CHAN8; + + r = (PF_FpLong)inP->red; + g = (PF_FpLong)inP->green; + b = (PF_FpLong)inP->blue; + if (a > 0) { + r = LvSet(r, niP->info.hi_lv, a); + g = LvSet(g, niP->info.hi_lv, a); + b = LvSet(b, niP->info.hi_lv, a); + + r = LvSet(r, niP->info.hi_r, a); + g = LvSet(g, niP->info.hi_g, a); + b = LvSet(b, niP->info.hi_b, a); + } + a = (PF_FpLong)outP->blue / PF_MAX_CHAN8; + if (a > 0) { + r = LvSet(r, niP->info.sw_lv, a); + g = LvSet(g, niP->info.sw_lv, a); + b = LvSet(b, niP->info.sw_lv, a); + + r = LvSet(r, niP->info.sw_r, a); + g = LvSet(g, niP->info.sw_g, a); + b = LvSet(b, niP->info.sw_b, a); + } + + outP->red = RoundByteLong((A_long)(r + 0.5)); + outP->green = RoundByteLong((A_long)(g + 0.5)); + outP->blue = RoundByteLong((A_long)(b + 0.5)); + } + else { + outP->alpha = 0; + } + + return err; +} +//------------------------------------------------------------------------------------------------- +static PF_Err +debug8(CFsAE *ae, ParamInfo8 *pi) +{ + PF_Err err = PF_Err_NONE; + + A_long a; + a = pi->hi_x_offset;if (a < 0) a *= -1; + pi->data[0].alpha = RoundByteLong(a); + a = pi->hi_y_offset; if (a < 0) a *= -1; + pi->data[1].alpha = RoundByteLong(a); + a = pi->sw_x_offset; if (a < 0) a *= -1; + pi->data[2].alpha = RoundByteLong(a); + a = pi->sw_y_offset; if (a < 0) a *= -1; + pi->data[3].alpha = RoundByteLong(a); + + a = pi->info.hi_length >> 16; + pi->data[4].alpha = RoundByteLong(a); + a = pi->info.sw_length >> 16; + pi->data[5].alpha = RoundByteLong(a); + + + return err; +} +//------------------------------------------------------------------------------------------------- +PF_Err ToParam8(CFsAE *ae, ParamInfo *infoP, ParamInfo8 *pi) +{ + PF_Err err = PF_Err_NONE; + + infoP->TagetCount = 0; + + pi->width = ae->out->width(); + pi->width2 = pi->width - 1; + pi->widthTrue = ae->out->widthTrue(); + pi->height = ae->out->height(); + pi->height2 = pi->height - 1; + pi->data = (PF_Pixel8 *)ae->out->data(); + pi->in_data = ae->in_data; + + pi->info.Color_Max = infoP->Color_Max; + pi->info.EXColor_Max = infoP->EXColor_Max; + + for (int i = 0; i < pi->info.Color_Max; i++) pi->info.Color[i] = infoP->Color[i]; + for (int i = 0; i < pi->info.EXColor_Max; i++) pi->info.EXColor[i] = infoP->EXColor[i]; + + pi->info.noise = infoP->noise; + pi->info.draw = infoP->draw; + pi->info.edge = infoP->edge; + + pi->scanlineSize = pi->width; + if (pi->scanlineSize < pi->height) pi->scanlineSize = pi->height; + + + pi->info.hi_length = ae->downScaleNoClip(infoP->hi_length); + pi->info.hi_blur = ae->downScaleNoClip(infoP->hi_blur); + if (pi->info.hi_length <= 0) pi->info.hi_blur = 0; + pi->info.sw_length = ae->downScaleNoClip(infoP->sw_length); + pi->info.sw_blur = ae->downScaleNoClip(infoP->sw_blur); + if (pi->info.sw_length <= 0) pi->info.sw_blur = 0; + + pi->blurSize = pi->info.hi_blur; + if (pi->blurSize < pi->info.sw_blur) pi->blurSize = pi->info.sw_blur; + + + CRotCalc rot(ae->in_data); + + A_long LM = ae->downScale(LENGTH_MIN); + + if (pi->info.hi_length > 0) { + rot.SetRotLength(infoP->angle, pi->info.hi_length); + pi->hi_x_offset = (A_long)((double)(rot.x()) / 65536.0 + 0.5); + pi->hi_y_offset = (A_long)((double)(rot.y()) / 65536.0 + 0.5); + if (pi->hi_x_offset > 0) pi->hi_x_offset += LM; + else if (pi->hi_x_offset < 0)pi->hi_x_offset -= LM; + if (pi->hi_y_offset > 0) pi->hi_y_offset += LM; + else if (pi->hi_y_offset < 0)pi->hi_y_offset -= LM; + } + else { + pi->hi_x_offset = 0; + pi->hi_y_offset = 0; + + } + if (pi->info.sw_length > 0) { + rot.SetRotLength(infoP->angle, pi->info.sw_length); + pi->sw_x_offset = (A_long)((double)(rot.x()) / 65536.0 + 0.5); + pi->sw_y_offset = (A_long)((double)(rot.y()) / 65536.0 + 0.5); + if (pi->sw_x_offset > 0) pi->sw_x_offset += LM; + else if (pi->sw_x_offset < 0)pi->sw_x_offset -= LM; + if (pi->sw_y_offset > 0) pi->sw_y_offset += LM; + else if (pi->sw_y_offset < 0)pi->sw_y_offset -= LM; + } + else { + pi->sw_x_offset = 0; + pi->sw_y_offset = 0; + + } + pi->info.hi_lv = infoP->hi_lv; + pi->info.hi_r = infoP->hi_r; + pi->info.hi_g = infoP->hi_g; + pi->info.hi_b = infoP->hi_b; + + pi->info.sw_lv = infoP->sw_lv; + pi->info.sw_r = infoP->sw_r; + pi->info.sw_g = infoP->sw_g; + pi->info.sw_b = infoP->sw_b; + + + pi->info.MaskColor = infoP->MaskColor; + pi->info.white = infoP->white; + return err; +} + //------------------------------------------------------------------------------------------------- +PF_Err SitsuKanSub8(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); + + + if (infoP->edge == TRUE) { + GetPX8 = GetPX8_NOCLIP; + } + else { + GetPX8 = GetPX8_CLIP; + } + + //ターゲットをalphaへ抽出 + pi.TargetCount = 0; + ERR(ae->iterate8((refconType)&pi, GetTargetPixels8)); + + if (pi.TargetCount > 0) { + + //Max + //alphaをgreenへ + ERR(ae->iterate8((refconType)&pi, AlphaTargetToGreen)); + + + A_long ll = ae->downScale(LENGTH_MIN); + if ((pi.info.hi_length > 0) || (pi.info.sw_length > 0)) { + //LENGTH_MIN回繰り返す + for (int i = 0; i < ll; i++) { + ERR(ae->iterate8((refconType)&pi, MaxHorG2R)); + ERR(ae->iterate8((refconType)&pi, RedToGreen)); + ERR(ae->iterate8((refconType)&pi, MaxVurG2R)); + ERR(ae->iterate8((refconType)&pi, RedToGreen)); + } + //ずらし + ERR(ae->iterate8((refconType)&pi, MoveG2R)); + ERR(ae->iterate8((refconType)&pi, RedToGreen)); + ERR(ae->iterate8((refconType)&pi, SplitG2RGB)); + + //ぼかし + if ((pi.info.hi_blur > 0) || (pi.info.sw_blur > 0)) { + pi.scanlineH = ae->NewHandle(pi.scanlineSize * sizeof(A_u_char) * 4 + pi.blurSize*sizeof(A_long) + 100); + + if (pi.scanlineH != NULL) { + ae->LockHandle(pi.scanlineH); + pi.scanline = *(A_u_char**)pi.scanlineH; + pi.scanlineM = pi.scanline + pi.scanlineSize * 2; + pi.blurTable = (A_long*)(pi.scanline + pi.scanlineSize * 4); + //hi + if (pi.info.hi_blur > 0) { + pi.IsTagetHi = TRUE; + if (makeTbl(&pi) == TRUE) { + horBlurG(&pi); + vurBlurG(&pi); + + A_long b = pi.info.hi_blur; + pi.info.hi_blur /= 4; + if (makeTbl(&pi) == TRUE) { + horBlurG(&pi); + vurBlurG(&pi); + } + pi.info.hi_blur = b; + + } + } + //sw + + if (pi.info.sw_blur > 0) { + pi.IsTagetHi = FALSE; + if (makeTbl(&pi) == TRUE) { + (Iterate(ae, &pi, SwapGB)); + horBlurG(&pi); + vurBlurG(&pi); + A_long b = infoP->sw_blur; + pi.info.sw_blur /= 4; + if (makeTbl(&pi) == TRUE) { + horBlurG(&pi); + vurBlurG(&pi); + } + pi.info.sw_blur = b; + (Iterate(ae, &pi, SwapGB)); + } + } + + ae->UnlockHandle(pi.scanlineH); + ae->DisposeHandle(pi.scanlineH); + pi.scanlineH = NULL; + } + } + } + //ERR(ae->iterate8((refconType)&pi, MaskedGBFromA)); + (Iterate(ae, &pi, MaskedGBFromA)); + if (pi.info.noise > 0) { + F_SRAND(ae->frame()); + //ERR(ae->iterate8((refconType)&pi, Noise8)); + (Iterate(ae, &pi, Noise8)); + } + if ((pi.info.draw == 1) || (pi.info.draw == 2)) { + //ERR(ae->iterate8((refconType)&pi, ColorSet8)); + (Iterate(ae, &pi, ColorSet8)); + } + + + } + + if (pi.info.draw == 1) { + //ERR(ae->iterate8((refconType)&pi, CopyTagetEX)); + (Iterate(ae, &pi, CopyTagetEX)); + } + else if (pi.info.draw == 3) + { + //ERR(ae->iterate8((refconType)&pi, GreenToAlpha)); + (Iterate(ae, &pi, GreenToAlpha)); + } + else if (pi.info.draw == 4) + { + //ERR(ae->iterate8((refconType)&pi, BlueToAlpha)); + (Iterate(ae, &pi, BlueToAlpha)); + } + + //debug8(ae, &pi); + + return err; + +} +/* + +まずAlphaにTargetエリアのマスクを作成 + + +*/ +//------------------------------------------------------------------------------------------------- diff --git a/ShitsuKanBlur/Win/PluginSkeletonPiPL.rc b/ShitsuKanBlur/Win/PluginSkeletonPiPL.rc new file mode 100644 index 0000000..387ca93 --- /dev/null +++ b/ShitsuKanBlur/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, 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, + "\x12F's PluginSkeleton\0", + + "MIB8", + 0x6165464CL, + 0L, + 4L + 0L, + + +END + diff --git a/ShitsuKanBlur/Win/PropertySheet.props b/ShitsuKanBlur/Win/PropertySheet.props new file mode 100644 index 0000000..7429103 --- /dev/null +++ b/ShitsuKanBlur/Win/PropertySheet.props @@ -0,0 +1,15 @@ + + + + + CC2018 + + + + + + $(AESDK) + true + + + \ No newline at end of file diff --git a/ShitsuKanBlur/Win/PropertySheet1.props b/ShitsuKanBlur/Win/PropertySheet1.props new file mode 100644 index 0000000..550f87d --- /dev/null +++ b/ShitsuKanBlur/Win/PropertySheet1.props @@ -0,0 +1,15 @@ + + + + + CC2018 + + + + + + $(AESED) + true + + + \ No newline at end of file diff --git a/ShitsuKanBlur/Win/ShitsuKanBlur.vcxproj b/ShitsuKanBlur/Win/ShitsuKanBlur.vcxproj new file mode 100644 index 0000000..cfb86d0 --- /dev/null +++ b/ShitsuKanBlur/Win/ShitsuKanBlur.vcxproj @@ -0,0 +1,600 @@ + + + + + Debug + Win32 + + + Debug + x64 + + + Release-MD + Win32 + + + Release-MD + x64 + + + Release + Win32 + + + Release + x64 + + + + {CAC5DEDC-2E7E-48DF-984E-9E65F0375230} + ShitsuKanBlur + ShitsuKanBlur + 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/ShitsuKanBlur.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/ShitsuKanBlur.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/ShitsuKanBlur.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/ShitsuKanBlur.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/ShitsuKanBlur.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/ShitsuKanBlur.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/ShitsuKanBlur/Win/ShitsuKanBlur.vcxproj.filters b/ShitsuKanBlur/Win/ShitsuKanBlur.vcxproj.filters new file mode 100644 index 0000000..eabba8f --- /dev/null +++ b/ShitsuKanBlur/Win/ShitsuKanBlur.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 + + + + + + + + Resource Files + + + \ No newline at end of file diff --git a/ShitsuKanBlur/Win/ShitsuKanBlurPiPL.rc b/ShitsuKanBlur/Win/ShitsuKanBlurPiPL.rc new file mode 100644 index 0000000..a5e1b8a --- /dev/null +++ b/ShitsuKanBlur/Win/ShitsuKanBlurPiPL.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 ShitsuKanBlur\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, + 20, 0x0, + "\x11F's ShitsuKanBlur\0\0", + + "MIB8", + 0x6165464CL, + 0L, + 4L + 0L, + + +END + diff --git a/ShitsuKanBlur/Win/ShitsuKanPiPL.rc b/ShitsuKanBlur/Win/ShitsuKanPiPL.rc new file mode 100644 index 0000000..18797be --- /dev/null +++ b/ShitsuKanBlur/Win/ShitsuKanPiPL.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 ShitsuKan\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 ShitsuKan\0\0", + + "MIB8", + 0x6165464CL, + 0L, + 4L + 0L, + + +END + diff --git a/Star/Fs_Entry.h b/Star/Fs_Entry.h new file mode 100644 index 0000000..6a6b8b1 --- /dev/null +++ b/Star/Fs_Entry.h @@ -0,0 +1,227 @@ +//----------------------------------------------------------------------------------- +/* + 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, + 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 +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/Star/Fs_Target.h b/Star/Fs_Target.h new file mode 100644 index 0000000..fe63241 --- /dev/null +++ b/Star/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 Star" + +//----------------------------------------------------------------------------------- +//プラグインの説明に使われる文字 +#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/Star/Star.cpp b/Star/Star.cpp new file mode 100644 index 0000000..4b14db7 --- /dev/null +++ b/Star/Star.cpp @@ -0,0 +1,416 @@ +//----------------------------------------------------------------------------------- +/* + F's Plugins for VS2010/VS2012 +*/ +//----------------------------------------------------------------------------------- + +#include "Star.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_FIXED( STR_LENGTH_PAR, //パラメータの名前 + 0, //数値入力する場合の最小値 + 500, //数値入力する場合の最大値 + 0, //スライダーの最小値 + 100, //スライダーの最大値 + 100, //デフォルトの値 + 1, //数値表示に関するフラグ + 0, + 0, + ID_LENGTH_PAR + ); + //---------------------------------------------------------------- + AEFX_CLR_STRUCT(def); + PF_ADD_FIXED( STR_STRONG_PAR, //パラメータの名前 + 0, //数値入力する場合の最小値 + 200, //数値入力する場合の最大値 + 0, //スライダーの最小値 + 100, //スライダーの最大値 + 50, //デフォルトの値 + 1, //数値表示に関するフラグ + 0, + 0, + ID_STRONG_PAR + ); + //---------------------------------------------------------------- + //角度 + AEFX_CLR_STRUCT(def); + PF_ADD_ANGLE(STR_ROT,0,ID_ROT); +//---------------------------------------------------------------- +//******************************************************** +//******************************************************** + //色関係 + AEFX_CLR_STRUCT(def); + def.flags = PF_ParamFlag_START_COLLAPSED; + PF_ADD_TOPIC(STR_COLOR_TOPIC, ID_COLOR_TOPIC); +//---------------------------------------------------------------- + AEFX_CLR_STRUCT(def); + PF_ADD_POPUP( STR_COLOR_KIND, + STR_COLOR_KIND_CNT, //メニューの数 + STR_COLOR_KIND_DEF, //デフォルト + STR_COLOR_KIND_POP, + ID_COLOR_KIND + ); + //---------------------------------------------------------------- + //色の指定 + AEFX_CLR_STRUCT(def); + PF_ADD_COLOR( STR_COLOR_A, + 0xF7, + 0xFF, + 0xD2, + ID_COLOR_A + ); + //---------------------------------------------------------------- + //色の指定 + AEFX_CLR_STRUCT(def); + PF_ADD_COLOR( STR_COLOR_B, + 0xF0, + 0xFF, + 0x05, + ID_COLOR_B + ); +//---------------------------------------------------------------- + AEFX_CLR_STRUCT(def); + PF_ADD_FIXED( STR_COLOR_BORDER, //パラメータの名前 + 0, //数値入力する場合の最小値 + 100, //数値入力する場合の最大値 + 0, //スライダーの最小値 + 100, //スライダーの最大値 + 30, //デフォルトの値 + 1, //数値表示に関するフラグ + 0, + 0, + ID_COLOR_BORDER + ); +//---------------------------------------------------------------- +//色関係終わり + AEFX_CLR_STRUCT(def); + PF_END_TOPIC(ID_COLOR_TOPIC_END); +//---------------------------------------------------------------- +//******************************************************** +//******************************************************** + AEFX_CLR_STRUCT(def); + def.flags = PF_ParamFlag_START_COLLAPSED; + PF_ADD_TOPIC(STR_LINE1_TOPIC, ID_LINE1_TOPIC); +//---------------------------------------------------------------- + AEFX_CLR_STRUCT(def); + PF_ADD_SLIDER( STR_LINE1_LENGTH, //パラメータの名前 + 0, //数値入力する場合の最小値 + 500, //数値入力する場合の最大値 + 0, //スライダーの最小値 + 100, //スライダーの最大値 + 64, //デフォルトの値 + ID_LINE1_LENGTH + ); +//---------------------------------------------------------------- + AEFX_CLR_STRUCT(def); + PF_ADD_FIXED( STR_LINE1_STRONG, //パラメータの名前 + 0, //数値入力する場合の最小値 + 100, //数値入力する場合の最大値 + 0, //スライダーの最小値 + 100, //スライダーの最大値 + 50, //デフォルトの値 + 1, //数値表示に関するフラグ + 0, + 0, + ID_LINE1_STRONG + ); +//---------------------------------------------------------------- + //角度 + AEFX_CLR_STRUCT(def); + PF_ADD_ANGLE(STR_LINE1_ANGLE,0,ID_LINE1_ROT); +//---------------------------------------------------------------- + AEFX_CLR_STRUCT(def); + PF_END_TOPIC(ID_LINE1_TOPIC_END); +//******************************************************** +//******************************************************** + AEFX_CLR_STRUCT(def); + def.flags = PF_ParamFlag_START_COLLAPSED; + PF_ADD_TOPIC(STR_LINE2_TOPIC, ID_LINE2_TOPIC); +//---------------------------------------------------------------- + AEFX_CLR_STRUCT(def); + PF_ADD_SLIDER( STR_LINE2_LENGTH, //パラメータの名前 + 0, //数値入力する場合の最小値 + 500, //数値入力する場合の最大値 + 0, //スライダーの最小値 + 100, //スライダーの最大値 + 40, //デフォルトの値 + ID_LINE2_LENGTH + ); +//---------------------------------------------------------------- + AEFX_CLR_STRUCT(def); + PF_ADD_FIXED( STR_LINE2_STRONG, //パラメータの名前 + 0, //数値入力する場合の最小値 + 100, //数値入力する場合の最大値 + 0, //スライダーの最小値 + 100, //スライダーの最大値 + 50, //デフォルトの値 + 1, //数値表示に関するフラグ + 0, + 0, + ID_LINE2_STRONG + ); +//---------------------------------------------------------------- + //角度 + AEFX_CLR_STRUCT(def); + PF_ADD_ANGLE(STR_LINE2_ANGLE,45,ID_LINE1_ROT); +//---------------------------------------------------------------- + AEFX_CLR_STRUCT(def); + PF_END_TOPIC(ID_LINE2_TOPIC_END); + //---------------------------------------------------------------- +//******************************************************** +//******************************************************** + AEFX_CLR_STRUCT(def); + def.flags = PF_ParamFlag_START_COLLAPSED; + PF_ADD_TOPIC(STR_LINE3_TOPIC, ID_LINE3_TOPIC); +//---------------------------------------------------------------- + AEFX_CLR_STRUCT(def); + PF_ADD_SLIDER( STR_LINE3_LENGTH, //パラメータの名前 + 0, //数値入力する場合の最小値 + 500, //数値入力する場合の最大値 + 0, //スライダーの最小値 + 100, //スライダーの最大値 + 64, //デフォルトの値 + ID_LINE1_LENGTH + ); +//---------------------------------------------------------------- + AEFX_CLR_STRUCT(def); + PF_ADD_FIXED( STR_LINE3_STRONG, //パラメータの名前 + 0, //数値入力する場合の最小値 + 100, //数値入力する場合の最大値 + 0, //スライダーの最小値 + 100, //スライダーの最大値 + 50, //デフォルトの値 + 1, //数値表示に関するフラグ + 0, + 0, + ID_LINE3_STRONG + ); +//---------------------------------------------------------------- + //角度 + AEFX_CLR_STRUCT(def); + PF_ADD_ANGLE(STR_LINE3_ANGLE,90,ID_LINE3_ROT); +//---------------------------------------------------------------- + AEFX_CLR_STRUCT(def); + PF_END_TOPIC(ID_LINE3_TOPIC_END); +//---------------------------------------------------------------- +//******************************************************** +//******************************************************** + AEFX_CLR_STRUCT(def); + def.flags = PF_ParamFlag_START_COLLAPSED; + PF_ADD_TOPIC(STR_LINE4_TOPIC, ID_LINE4_TOPIC); +//---------------------------------------------------------------- + AEFX_CLR_STRUCT(def); + PF_ADD_SLIDER( STR_LINE4_LENGTH, //パラメータの名前 + 0, //数値入力する場合の最小値 + 500, //数値入力する場合の最大値 + 0, //スライダーの最小値 + 100, //スライダーの最大値 + 40, //デフォルトの値 + ID_LINE4_LENGTH + ); +//---------------------------------------------------------------- + AEFX_CLR_STRUCT(def); + PF_ADD_FIXED( STR_LINE4_STRONG, //パラメータの名前 + 0, //数値入力する場合の最小値 + 100, //数値入力する場合の最大値 + 0, //スライダーの最小値 + 100, //スライダーの最大値 + 50, //デフォルトの値 + 1, //数値表示に関するフラグ + 0, + 0, + ID_LINE4_STRONG + ); +//---------------------------------------------------------------- + //角度 + AEFX_CLR_STRUCT(def); + PF_ADD_ANGLE(STR_LINE4_ANGLE,135,ID_LINE4_ROT); +//---------------------------------------------------------------- + AEFX_CLR_STRUCT(def); + PF_END_TOPIC(ID_LINE4_TOPIC_END); +//---------------------------------------------------------------- + out_data->num_params = ID_NUM_PARAMS; + + return err; +} + +//------------------------------------------------------------------------------------------------- +static PF_Err GetParams(CFsAE *ae, ParamInfo *infoP) +{ + PF_Err err = PF_Err_NONE; + + PF_FpShort all_length; + PF_FpShort all_strong; + PF_Fixed all_angle; + ERR(ae->GetFIXED2FpShort_P1(ID_LENGTH_PAR,&all_length)); + ERR(ae->GetFIXED2FpShort_P1(ID_STRONG_PAR,&all_strong)); + ERR(ae->GetANGLE(ID_ROT,&all_angle)); + + ERR(ae->GetPOPUP(ID_COLOR_KIND,&infoP->colTable.kind)); + if (!err){ + switch (infoP->colTable.kind) { + case skBtoA: + ERR(ae->GetCOLOR(ID_COLOR_B,&infoP->colTable.col1)); + ERR(ae->GetCOLOR(ID_COLOR_A,&infoP->colTable.col2)); + break; + case skAonly: + ERR(ae->GetCOLOR(ID_COLOR_A,&infoP->colTable.col1)); + ERR(ae->GetCOLOR(ID_COLOR_A,&infoP->colTable.col2)); + break; + case skBonly: + ERR(ae->GetCOLOR(ID_COLOR_B,&infoP->colTable.col1)); + ERR(ae->GetCOLOR(ID_COLOR_B,&infoP->colTable.col2)); + break; + case skAtoB: + default: + ERR(ae->GetCOLOR(ID_COLOR_A,&infoP->colTable.col1)); + ERR(ae->GetCOLOR(ID_COLOR_B,&infoP->colTable.col2)); + break; + } + } + ERR(ae->GetFIXED2FpShort_P1(ID_COLOR_BORDER,&infoP->colTable.border)); + + A_long maxLength =0; + for ( A_long i=0; i<4; i++){ + A_long idx = ID_LINE1_TOPIC + i*5; + ERR(ae->GetADD(idx+1,&infoP->line[i].length)); + if (!err) infoP->line[i].length = ae->downScaleNoClip(infoP->line[i].length); + ERR(ae->GetFIXED2FpShort_P1(idx+2,&infoP->line[i].strong)); + ERR(ae->GetANGLE(idx+3,&infoP->line[i].angle)); + if ( !err){ + infoP->line[i].length = (A_long)((PF_FpShort)infoP->line[i].length * all_length); + if (infoP->line[i].length<0) infoP->line[i].length = 0; + else if (infoP->line[i].length>2500) infoP->line[i].length = 500*5; + if (maxLength < infoP->line[i].length) maxLength = infoP->line[i].length; + + infoP->line[i].strong = infoP->line[i].strong * all_strong; + if (infoP->line[i].strong<0) infoP->line[i].strong = 0; + + infoP->line[i].angle = infoP->line[i].angle + all_angle; + infoP->line[i].angle %= (360L<<16); + if ( infoP->line[i].angle<0) infoP->line[i].angle += (360L<<16); + if ( infoP->line[i].angle>=(180L<<16)) infoP->line[i].angle -= (180L<<16); + } + } + infoP->colTable.maxLength = maxLength; + return err; +} +//------------------------------------------------------------------------------------------------- +static PF_Err + Exec (CFsAE *ae , ParamInfo *infoP) +{ + PF_Err err = PF_Err_NONE; + + ERR(ae->out->clear()); //消す + ERR(TargetCopy(ae)); //RGBの最大値をコピー rgba同じ数値に + A_long MinValue =5; + MinMask(ae,ae->downScaleNoClip( MinValue)); //アルファーのみを最小化 + + ERR(SubtrackAlpha(ae)); // (alpha = red - alpha) で範囲を決める + + //RGBの処理 + if ( infoP->colTable.kind == skScreen){ + ScreenCopy(ae); + }else{ + FillColorCopy(ae,infoP->colTable.col1); + } + ERR(StarDraw(ae,infoP)); + ERR(AlphaMake(ae)); + ERR(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){ + 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/Star/Star.h b/Star/Star.h new file mode 100644 index 0000000..1b0c589 --- /dev/null +++ b/Star/Star.h @@ -0,0 +1,239 @@ +//----------------------------------------------------------------------------------- +/* + PluginSkeleton for VS2010 +*/ +//----------------------------------------------------------------------------------- + +#pragma once + +#ifndef Star_H +#define Star_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_LENGTH_PAR, + ID_STRONG_PAR, + ID_ROT, + + ID_COLOR_TOPIC, + ID_COLOR_KIND, + ID_COLOR_A, + ID_COLOR_B, + ID_COLOR_BORDER, + ID_COLOR_TOPIC_END, + + ID_LINE1_TOPIC, + ID_LINE1_LENGTH, + ID_LINE1_STRONG, + ID_LINE1_ROT, + ID_LINE1_TOPIC_END, + + ID_LINE2_TOPIC, + ID_LINE2_LENGTH, + ID_LINE2_STRONG, + ID_LINE2_ROT, + ID_LINE2_TOPIC_END, + + ID_LINE3_TOPIC, + ID_LINE3_LENGTH, + ID_LINE3_STRONG, + ID_LINE3_ROT, + ID_LINE3_TOPIC_END, + + ID_LINE4_TOPIC, + ID_LINE4_LENGTH, + ID_LINE4_STRONG, + ID_LINE4_ROT, + ID_LINE4_TOPIC_END, + + ID_NUM_PARAMS + }; + +// ID_COLOR_KIND +enum { + skAtoB = 1, + skBtoA, + skAonly, + skBonly, + skScreen, +}; + +#define STR_LENGTH_PAR "Length(%)" +#define STR_STRONG_PAR "Strong(%)" +#define STR_ROT "Rot" +#define STR_COLOR_TOPIC "Color" +#define STR_COLOR_KIND "Kind" +#define STR_COLOR_KIND_POP "A To B|B To A|A Only|B Only|Screen" +#define STR_COLOR_KIND_CNT 5 +#define STR_COLOR_KIND_DEF 1 +#define STR_COLOR_A "Color A" +#define STR_COLOR_B "Color B" +#define STR_COLOR_BORDER "Color Border(%)" + +#define STR_LINE1_TOPIC "Line1" +#define STR_LINE1_LENGTH "Line1 Length" +#define STR_LINE1_STRONG "Line1 Strong" +#define STR_LINE1_ANGLE "Line1 Rot" + +#define STR_LINE2_TOPIC "Line2" +#define STR_LINE2_LENGTH "Line2 Length" +#define STR_LINE2_STRONG "Line2 Strong" +#define STR_LINE2_ANGLE "Line2 Rot" + +#define STR_LINE3_TOPIC "Line3" +#define STR_LINE3_LENGTH "Line3 Length" +#define STR_LINE3_STRONG "Line3 Strong" +#define STR_LINE3_ANGLE "Line3 Rot" + +#define STR_LINE4_TOPIC "Line4" +#define STR_LINE4_LENGTH "Line4 Length" +#define STR_LINE4_STRONG "Line4 Strong" +#define STR_LINE4_ANGLE "Line4 Rot" + +typedef struct LineInfo{ + A_long length; + PF_FpShort strong; + PF_Fixed angle; +}LineInfo; + +typedef struct ColorTableInfo{ + A_long kind; + PF_Pixel col1; + PF_Pixel col2; + PF_FpShort border; + A_long maxLength; +}ColorTableInfo; + +typedef struct ParamInfo{ + ColorTableInfo colTable; + LineInfo line[4]; +} ParamInfo; + + +typedef struct ColorTableInfo8{ + PF_Pixel col1; + PF_Pixel col2; + PF_FpShort border; + A_long length; + PF_FpShort strong; + PF_Field angle; + A_long value; + PF_InData *in_data; +}ColorTableInfo8; + +typedef struct ColorTableInfo16{ + PF_Pixel16 col1; + PF_Pixel16 col2; + PF_FpShort border; + A_long length; + PF_FpShort strong; + PF_Field angle; + A_long value; + PF_InData *in_data; +}ColorTableInfo16; + +typedef struct ColorTableInfo32{ + PF_PixelFloat col1; + PF_PixelFloat col2; + PF_FpShort border; + A_long length; + PF_FpShort strong; + PF_Field angle; + A_long value; + PF_InData *in_data; +}ColorTableInfo32; + + +typedef struct{ + ColorTableInfo8 colTable; + PF_Pixel *tbl; + LineInfo line[4]; + PF_InData *in_data; + CFsGraph *g; + A_long x; + A_long y; +} ParamInfo8; + +typedef struct{ + ColorTableInfo16 colTable; + PF_Pixel16 *tbl; + LineInfo line[4]; + PF_InData *in_data; + CFsGraph *g; + A_long x; + A_long y; +} ParamInfo16; + +typedef struct{ + ColorTableInfo32 colTable; + PF_PixelFloat *tbl; + LineInfo line[4]; + PF_InData *in_data; + CFsGraph *g; + A_long x; + A_long y; +} ParamInfo32; + +//************************************************************************** +PF_Err TargetCopy (CFsAE *ae); +void MinMask(CFsAE *ae,A_long min); +PF_Err SubtrackAlpha (CFsAE *ae); +PF_Err ScreenCopy (CFsAE *ae); +PF_Err FillColorCopy (CFsAE *ae,PF_Pixel c); + +PF_Err StarDraw (CFsAE *ae, ParamInfo *infoP); + +PF_Err AlphaMake (CFsAE *ae); +//************************************************************************** + +//------------------------------------------------------- +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 // Star_H diff --git a/Star/StarBuf.cpp b/Star/StarBuf.cpp new file mode 100644 index 0000000..bd6561a --- /dev/null +++ b/Star/StarBuf.cpp @@ -0,0 +1,280 @@ + +#include "Star.h" +typedef struct bufMinParam +{ + A_long *scanline; + A_long scanlineLength; //scanlineの長さ + A_long value; //Max/Minの値 + + A_long target; //scanlineのターゲットインデックス + A_long maxIndex; +}bufMinParam; + +//------------------------------------------------------------------------------------------------- +void InToBuf8(CFsAE *ae, CFsBuffer *buf,A_long mode) +{ + 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 i,j; + + PF_Pixel *src; + src = (PF_Pixel *)ae->in->data(); + A_long *dst; + dst = buf->bufA_long(); + A_long TargetSrc =0; + A_long TargetDst =0; + for ( j = 0; j< h; j++) { + for ( i = 0; i< w; i++) { + PF_Pixel p = src[TargetSrc]; + if( p.alpha ==0){ + dst[TargetDst] = 0; + }else{ + A_long v = FS_CONVERT8TO16(MAX(p.blue,MAX(p.green,p.red))); + v = v * p.alpha/PF_MAX_CHAN8; + if ( mode ==1){ + v = v - dst[TargetDst]; + if ( v<0) v=0; + } + dst[TargetDst] = v; + } + TargetSrc++; + TargetDst++; + } + TargetSrc +=iw; + TargetDst +=ow; + } +} +//------------------------------------------------------------------------------------------------- +void InToBuf16(CFsAE *ae, CFsBuffer *buf) +{ + 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 i,j; + + PF_Pixel16 *src; + src = (PF_Pixel16 *)ae->in->data(); + A_long *dst; + dst = buf->bufA_long(); + A_long TargetSrc =0; + A_long TargetDst =0; + for ( j = 0; j< h; j++) { + for ( i = 0; i< w; i++) { + PF_Pixel16 p = src[TargetSrc]; + if( p.alpha ==0){ + dst[TargetDst] = 0; + }else{ + A_long v = (MAX(p.blue,MAX(p.green,p.red))); + dst[TargetDst] = v * p.alpha/PF_MAX_CHAN16; + } + TargetSrc++; + TargetDst++; + } + TargetSrc +=iw; + TargetDst +=ow; + } +} +//------------------------------------------------------------------------------------------------- +void InToBuf32(CFsAE *ae, CFsBuffer *buf) +{ + 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 i,j; + + PF_PixelFloat *src; + src = (PF_PixelFloat *)ae->in->data(); + A_long *dst; + dst = buf->bufA_long(); + A_long TargetSrc =0; + A_long TargetDst =0; + for ( j = 0; j< h; j++) { + for ( i = 0; i< w; i++) { + PF_PixelFloat p = src[TargetSrc]; + if( p.alpha ==0){ + dst[TargetDst] = 0; + }else{ + PF_FpShort v = (MAX(p.blue,MAX(p.green,p.red))); + if ( v>1.0) v=1.0; + dst[TargetDst] = (A_long)(v * PF_MAX_CHAN16); + } + TargetSrc++; + TargetDst++; + } + TargetSrc +=iw; + TargetDst +=ow; + } +} +//------------------------------------------------------------------------------------------------- +void BufToOut8(CFsAE *ae, CFsBuffer *buf) +{ + A_long w = ae->out->width(); + A_long h = ae->out->height(); + A_long ow = ae->out->offsetWidth(); + A_long i,j; + + A_long *src; + src = buf->bufA_long(); + PF_Pixel *dst; + dst = (PF_Pixel *)ae->out->data(); + A_long TargetSrc =0; + A_long TargetDst =0; + for ( j = 0; j< h; j++) { + for ( i = 0; i< w; i++) { + dst[TargetDst].alpha = PF_MAX_CHAN8; + dst[TargetDst].red + = dst[TargetDst].green + = dst[TargetDst].blue = RoundByteLong(FS_CONVERT16TO8(src[TargetSrc])); + + TargetSrc++; + TargetDst++; + } + TargetSrc+=ow; + TargetDst+=ow; + } +} +//---------------------------------------------------------------------------- +static A_long getMin(bufMinParam *mm) +{ + A_long start = mm->target - mm->value; + if ( start<0) start = 0; + A_long end = mm->target + mm->value; + if ( end >= mm->scanlineLength) end = mm->scanlineLength-1; + + if ( (mm->maxIndex>=start)&&(mm->maxIndex<=end)) + { + if (mm->scanline[end] <=mm->scanline[mm->maxIndex]){ + mm->maxIndex = end; + return mm->scanline[end]; + }else{ + return mm->scanline[mm->maxIndex]; + } + } + A_long idx = start; + for ( A_long i=start; i<=end; i++) + { + if ( mm->scanline[i] <=0){ + idx = i; + break; + }else{ + if ( mm->scanline[i] < mm->scanline[idx]) idx = i; + } + } + mm->maxIndex =idx; + return mm->scanline[idx]; +} +//------------------------------------------------------------------------------------------------- +void MinBuf(CFsAE *ae, CFsBuffer *buf) +{ + PF_Err err = PF_Err_NONE; + bufMinParam bm; + bm.value = 10; + A_long w = ae->out->width(); + if ( ae->out->width()out->height()) w = ae->out->height(); + CFsBuffer scanline = ae->NewBuffer(w*sizeof(A_long)); + err = scanline.err(); + + if (!err){ + A_long *data; + data = buf->bufA_long(); + bm.scanline = scanline.bufA_long(); + A_long x=0, y=0; + + bm.scanlineLength = ae->out->width(); + //水平方向 + A_long hor =0; + for ( y=0; yout->height(); y++) + { + hor = ae->out->width() * y; + //スキャンライン分転送 + for ( x=0; xout->width(); x++){ + bm.scanline[x] = data[hor + x]; + } + bm.maxIndex = -1; + for ( x=0; xout->width(); x++){ + bm.target = x; + data[hor + x] = getMin(&bm); + } + } + + bm.scanlineLength = ae->out->height(); + for ( x=0; xout->width(); x++) + { + hor = x; + for ( y=0; yout->height(); y++){ + bm.scanline[y] = data[hor]; + hor += ae->out->widthTrue(); + } + hor = x; + bm.maxIndex = -1; + for ( y=0; yout->height(); y++){ + bm.target = y; + data[hor] = getMin(&bm); + hor += ae->out->widthTrue(); + } + } + scanline.Dispose(); + } +} +//------------------------------------------------------------------------------------------------- +void BufArea8(CFsAE *ae, CFsBuffer *buf) +{ + A_long w = ae->out->width(); + A_long h = ae->out->height(); + A_long wt = ae->out->widthTrue(); + A_long j; + + A_long *dst; + dst = buf->bufA_long(); + //------------ + for ( j = 0; j< h; j++) { + A_long Target = j*wt; + A_long org = dst[Target]; + A_long idx =0; + A_long bk=0; + while(idx20){ + for ( A_long k= bk+9; k<=idx-9;k++) dst[Target+k]= 0; + } + bk = idx; + org = now; + } + idx++; + } + } + /* + A_long ww = wt * h; + //------------ + for ( j = 0; j< w; j++) { + A_long Target = j; + A_long org = dst[Target]; + A_long idx =0; + A_long bk=0; + while(idx20){ + A_long Target2 = Target + wt*9; + for ( A_long k= bk+9; k<=idx-9;k++) { + if ( Target2>16; + A_long y0 = y >>16; + A_long x1 = x0+1; + A_long y1 = y0+1; + A_long w = g->width(); + A_long h = g->height(); + if ((x0<-2)||(y0<-2)|| (x0>=w)||(y0>=h)||(x1<0)||(y1<0)) return FALSE; + + PF_FpShort xd1 = (PF_FpShort)(x &0xFFFF)/65536; + PF_FpShort yd1 = (PF_FpShort)(y &0xFFFF)/65536; + PF_FpShort xd0 = 1-xd1; + PF_FpShort yd0 = 1-yd1; + PF_Pixel *data; + data = (PF_Pixel *)g->data(); + A_long adr = x0 + y0 * g->widthTrue(); + A_long ww = g->widthTrue() * h; + if ( (xd0==1)&&(yd0=1)){ + if (( adr>=0)&&(adr=0)&&(y0>=0)){ + if (( adr>=0)&&(adr=0)){ + if (( adr>=0)&&(adrwidthTrue(); + if ( (x1=0)&&(adr=0)&&(y1=0)&&(adr>16; + A_long y0 = y >>16; + A_long x1 = x0+1; + A_long y1 = y0+1; + A_long w = g->width(); + A_long h = g->height(); + if ((x0<-2)||(y0<-2)|| (x0>=w)||(y0>=h)||(x1<0)||(y1<0)) return FALSE; + + PF_FpShort xd1 = (PF_FpShort)(x &0xFFFF)/65536; + PF_FpShort yd1 = (PF_FpShort)(y &0xFFFF)/65536; + PF_FpShort xd0 = 1-xd1; + PF_FpShort yd0 = 1-yd1; + PF_Pixel16 *data; + data = (PF_Pixel16 *)g->data(); + A_long adr = x0 + y0 * g->widthTrue(); + A_long ww = g->widthTrue() * h; + if ( (xd0==1)&&(yd0=1)){ + if (( adr>=0)&&(adr=0)&&(y0>=0)){ + if (( adr>=0)&&(adr=0)){ + if (( adr>=0)&&(adrwidthTrue(); + if ( (x1=0)&&(adr=0)&&(y1=0)&&(adr>16; + A_long y0 = y >>16; + A_long x1 = x0+1; + A_long y1 = y0+1; + A_long w = g->width(); + A_long h = g->height(); + if ((x0<-2)||(y0<-2)|| (x0>=w)||(y0>=h)||(x1<0)||(y1<0)) return FALSE; + + PF_FpShort xd1 = (PF_FpShort)(x &0xFFFF)/65536; + PF_FpShort yd1 = (PF_FpShort)(y &0xFFFF)/65536; + PF_FpShort xd0 = 1-xd1; + PF_FpShort yd0 = 1-yd1; + PF_PixelFloat *data; + data = (PF_PixelFloat *)g->data(); + A_long adr = x0 + y0 * g->widthTrue(); + A_long ww = g->widthTrue() * h; + if ( (xd0==1)&&(yd0=1)){ + if (( adr>=0)&&(adr=0)&&(y0>=0)){ + if (( adr>=0)&&(adr=0)){ + if (( adr>=0)&&(adrwidthTrue(); + if ( (x1=0)&&(adr=0)&&(y1=0)&&(adrlength<=0)|| ( ci->strong<=0)||(ci->length <= ci->value)) return ret; + + PF_FpLong op = ci->strong * (PF_FpLong)( ci->length - ci->value) / (PF_FpLong)ci->length; + + ret.blue = RoundByteFpLong(ci->col1.blue *op); + ret.green = RoundByteFpLong(ci->col1.green *op); + ret.red = RoundByteFpLong(ci->col1.red *op); + return ret; + +} +//------------------------------------------------------------------------------------------------- +PF_Pixel16 calcColorTableOnly16(ColorTableInfo16 *ci) +{ + PF_Pixel16 ret = {0,0,0,0}; + if ( (ci->length<=0)|| ( ci->strong<=0)||(ci->length <= ci->value)) return ret; + + PF_FpLong op = ci->strong * (PF_FpLong)( ci->length - ci->value) / (PF_FpLong)ci->length; + + ret.blue = RoundShortFpLong(ci->col1.blue *op); + ret.green = RoundShortFpLong(ci->col1.green *op); + ret.red = RoundShortFpLong(ci->col1.red *op); + return ret; + +} +//------------------------------------------------------------------------------------------------- +PF_PixelFloat calcColorTableOnly32(ColorTableInfo32 *ci) +{ + PF_PixelFloat ret = {0,0,0,0}; + if ( (ci->length<=0)|| ( ci->strong<=0)||(ci->length <= ci->value)) return ret; + + PF_FpLong op = ci->strong * (PF_FpLong)( ci->length - ci->value) / (PF_FpLong)ci->length; + + ret.blue = RoundFpShortDouble(ci->col1.blue *op); + ret.green = RoundFpShortDouble(ci->col1.green *op); + ret.red = RoundFpShortDouble(ci->col1.red *op); + return ret; + +} +//------------------------------------------------------------------------------------------------- +PF_Pixel calcColorTable8(ColorTableInfo8 *ci) +{ + PF_Pixel ret = {0,0,0,0}; + if ( (ci->length<=0)|| ( ci->strong<=0)||(ci->length <= ci->value)) return ret; + + PF_FpLong op = ci->strong * (PF_FpLong)( ci->length - ci->value) / (PF_FpLong)ci->length; + + A_long bd = (A_long)(ci->length * ci->border); + if ( (bd<=0)||(ci->value >= bd)){ + ret.blue = RoundByteFpLong(ci->col2.blue *op); + ret.green = RoundByteFpLong(ci->col2.green *op); + ret.red = RoundByteFpLong(ci->col2.red *op); + }else{ + PF_FpLong d2 = (PF_FpLong)ci->value / (PF_FpLong)bd; + PF_FpLong d1 = 1 - d2; + ret.blue = RoundByteFpLong((ci->col1.blue * d1 + ci->col2.blue * d2)*op); + ret.green = RoundByteFpLong((ci->col1.green * d1 + ci->col2.green * d2)*op); + ret.red = RoundByteFpLong((ci->col1.red * d1 + ci->col2.red * d2)*op); + } + return ret; + +} +//------------------------------------------------------------------------------------------------- +PF_Pixel16 calcColorTable16(ColorTableInfo16 *ci) +{ + PF_Pixel16 ret = {0,0,0,0}; + if ( (ci->length<=0)|| ( ci->strong<=0)||(ci->length <= ci->value)) return ret; + + PF_FpLong op = ci->strong * (PF_FpLong)( ci->length - ci->value) / (PF_FpLong)ci->length; + + A_long bd = (A_long)(ci->length * ci->border); + if ( (bd<=0)||(ci->value >= bd)){ + ret.blue = RoundShortFpLong(ci->col2.blue *op); + ret.green = RoundShortFpLong(ci->col2.green *op); + ret.red = RoundShortFpLong(ci->col2.red *op); + }else{ + PF_FpLong d2 = (PF_FpLong)ci->value / (PF_FpLong)bd; + PF_FpLong d1 = 1 - d2; + ret.blue = RoundShortFpLong((ci->col1.blue * d1 + ci->col2.blue * d2)*op); + ret.green = RoundShortFpLong((ci->col1.green * d1 + ci->col2.green * d2)*op); + ret.red = RoundShortFpLong((ci->col1.red * d1 + ci->col2.red * d2)*op); + } + return ret; + +} +//------------------------------------------------------------------------------------------------- +PF_PixelFloat calcColorTable32(ColorTableInfo32 *ci) +{ + PF_PixelFloat ret = {0,0,0,0}; + if ( (ci->length<=0)|| ( ci->strong<=0)||(ci->length <= ci->value)) return ret; + + PF_FpLong op = ci->strong * (PF_FpLong)( ci->length - ci->value) / (PF_FpLong)ci->length; + + A_long bd = (A_long)(ci->length * ci->border); + if ( (bd<=0)||(ci->value >= bd)){ + ret.blue = RoundFpShortDouble(ci->col2.blue *op); + ret.green = RoundFpShortDouble(ci->col2.green *op); + ret.red = RoundFpShortDouble(ci->col2.red *op); + }else{ + PF_FpLong d2 = (PF_FpLong)ci->value / (PF_FpLong)bd; + PF_FpLong d1 = 1 - d2; + ret.blue = RoundFpShortDouble((ci->col1.blue * d1 + ci->col2.blue * d2)*op); + ret.green = RoundFpShortDouble((ci->col1.green * d1 + ci->col2.green * d2)*op); + ret.red = RoundFpShortDouble((ci->col1.red * d1 + ci->col2.red * d2)*op); + } + return ret; + +} +PF_Pixel (*calcColor8)(ColorTableInfo8 *ci); +PF_Pixel16 (*calcColor16)(ColorTableInfo16 *ci); +PF_PixelFloat (*calcColor32)(ColorTableInfo32 *ci); + +void makeTable8(ParamInfo8 *infoP) +{ + for ( A_long i=0; i< infoP->colTable.length; i++){ + infoP->colTable.value = i; + infoP->tbl[i] = calcColor8(&infoP->colTable); + } +} +void makeTable16(ParamInfo16 *infoP) +{ + for ( A_long i=0; i< infoP->colTable.length; i++){ + infoP->colTable.value = i; + infoP->tbl[i] = calcColor16(&infoP->colTable); + } +} +void makeTable32(ParamInfo32 *infoP) +{ + for ( A_long i=0; i< infoP->colTable.length; i++){ + infoP->colTable.value = i; + infoP->tbl[i] = calcColor32(&infoP->colTable); + } +} +//------------------------------------------------------------------------------------------------- +void DrawLine8(ParamInfo8 *infoP) +{ + + CRotCalc c(infoP->in_data); + c.SetRotLength(infoP->colTable.angle,infoP->colTable.length<<16); + PF_Fixed dx = c.x() / infoP->colTable.length; + PF_Fixed dy = c.y() / infoP->colTable.length; + PF_Fixed x = infoP->x <<16; + PF_Fixed y = infoP->y <<16; + PF_Pixel *tbl = (PF_Pixel *)infoP->tbl; + PF_Fixed w = infoP->g->width() << 16; + PF_Fixed h = infoP->g->height() << 16; + for ( A_long i=0; icolTable.length; i++){ + if (pset8(infoP->g,x,y,tbl[i])==FALSE) break; + x+=dx; + y+=dy; + if ( x >= w)break; + if ( y >= h)break; + } + x = infoP->x <<16; + y = infoP->y <<16; + for ( A_long i=0; icolTable.length; i++){ + if (pset8(infoP->g,x,y,tbl[i])==FALSE) break; + x-=dx; + y-=dy; + if ( x <-1)break; + if ( y <-1)break; + } +} +//------------------------------------------------------------------------------------------------- +void DrawLine16(ParamInfo16 *infoP) +{ + + CRotCalc c(infoP->in_data); + c.SetRotLength(infoP->colTable.angle,infoP->colTable.length<<16); + PF_Fixed dx = c.x() / infoP->colTable.length; + PF_Fixed dy = c.y() / infoP->colTable.length; + PF_Fixed x = infoP->x <<16; + PF_Fixed y = infoP->y <<16; + PF_Pixel16 *tbl = (PF_Pixel16 *)infoP->tbl; + PF_Fixed w = infoP->g->width() << 16; + PF_Fixed h = infoP->g->height() << 16; + for ( A_long i=0; icolTable.length; i++){ + if (pset16(infoP->g,x,y,tbl[i])==FALSE) break; + x+=dx; + y+=dy; + if ( x >= w)break; + if ( y >= h)break; + } + x = infoP->x <<16; + y = infoP->y <<16; + for ( A_long i=0; icolTable.length; i++){ + if (pset16(infoP->g,x,y,tbl[i])==FALSE) break; + x-=dx; + y-=dy; + if ( x <-1)break; + if ( y <-1)break; + } +} +//------------------------------------------------------------------------------------------------- +void DrawLine32(ParamInfo32 *infoP) +{ + + CRotCalc c(infoP->in_data); + c.SetRotLength(infoP->colTable.angle,infoP->colTable.length<<16); + PF_Fixed dx = c.x() / infoP->colTable.length; + PF_Fixed dy = c.y() / infoP->colTable.length; + PF_Fixed x = infoP->x <<16; + PF_Fixed y = infoP->y <<16; + PF_PixelFloat *tbl = (PF_PixelFloat *)infoP->tbl; + PF_Fixed w = infoP->g->width() << 16; + PF_Fixed h = infoP->g->height() << 16; + for ( A_long i=0; icolTable.length; i++){ + if (pset32(infoP->g,x,y,tbl[i])==FALSE) break; + x+=dx; + y+=dy; + if ( x >= w)break; + if ( y >= h)break; + } + x = infoP->x <<16; + y = infoP->y <<16; + for ( A_long i=0; icolTable.length; i++){ + if (pset32(infoP->g,x,y,tbl[i])==FALSE) break; + x-=dx; + y-=dy; + if ( x <-1)break; + if ( y <-1)break; + } +} +//------------------------------------------------------------------------------------------------- +PF_Err StarDrawSub8(ParamInfo8 *infoP) +{ + PF_Err err = PF_Err_NONE; + A_long x,y; + PF_Pixel bl = {0,0,0,0}; + + PF_Pixel *data; + data = infoP->g->data(); + A_long target =0; + for ( y=0;y g->height(); y++){ + infoP->y = y; + for ( x=0; xg->width(); x++){ + infoP->x = x; + A_long base = (A_long)data[target].alpha; + if (base>0){ + for ( A_long i=0 ; i<4; i++){ + infoP->colTable.angle = infoP->line[i].angle; + infoP->colTable.length = infoP->line[i].length * base /PF_MAX_CHAN8; + infoP->colTable.strong = infoP->line[i].strong * (PF_FpShort)base/PF_MAX_CHAN8; + if ( (infoP->colTable.length>0)&&(infoP->colTable.strong>0)){ + makeTable8(infoP); + DrawLine8(infoP); + } + } + + } + target++; + } + target += infoP->g->offsetWidth(); + } + + return err; +} +//------------------------------------------------------------------------------------------------- +PF_Err StarDrawSub16(ParamInfo16 *infoP) +{ + PF_Err err = PF_Err_NONE; + A_long x,y; + + PF_Pixel16 *data; + data = (PF_Pixel16 *)infoP->g->data(); + A_long target =0; + for ( y=0;y g->height(); y++){ + infoP->y = y; + for ( x=0; xg->width(); x++){ + infoP->x = x; + A_long base = (A_long)data[target].alpha; + if (base>0){ + for ( A_long i=0 ; i<4; i++){ + infoP->colTable.angle = infoP->line[i].angle; + infoP->colTable.length = infoP->line[i].length * base /PF_MAX_CHAN16; + infoP->colTable.strong = infoP->line[i].strong * (PF_FpShort)base/PF_MAX_CHAN16; + if ( (infoP->colTable.length>0)&&(infoP->colTable.strong>0)){ + makeTable16(infoP); + DrawLine16(infoP); + } + } + + } + target++; + } + target += infoP->g->offsetWidth(); + } + + return err; +} +//------------------------------------------------------------------------------------------------- +PF_Err StarDrawSub32(ParamInfo32 *infoP) +{ + PF_Err err = PF_Err_NONE; + A_long x,y; + + PF_PixelFloat *data; + data = (PF_PixelFloat *)infoP->g->data(); + A_long target =0; + for ( y=0;y g->height(); y++){ + infoP->y = y; + for ( x=0; xg->width(); x++){ + infoP->x = x; + PF_FpShort base = data[target].alpha; + if (base>0){ + for ( A_long i=0 ; i<4; i++){ + infoP->colTable.angle = infoP->line[i].angle; + infoP->colTable.length = (A_long)(infoP->line[i].length * base); + infoP->colTable.strong = infoP->line[i].strong * base; + if ( (infoP->colTable.length>0)&&(infoP->colTable.strong>0)){ + makeTable32(infoP); + DrawLine32(infoP); + } + } + + } + target++; + } + target += infoP->g->offsetWidth(); + } + + return err; +} +//------------------------------------------------------------------------------------------------- +PF_Err StarDrawSubScreen8(ParamInfo8 *infoP) +{ + PF_Err err = PF_Err_NONE; + A_long x,y; + + PF_Pixel *data; + data = infoP->g->data(); + A_long target =0; + for ( y=0;y g->height(); y++){ + infoP->y = y; + for ( x=0; xg->width(); x++){ + infoP->x = x; + PF_Pixel c = data[target]; + A_long base = (A_long)c.alpha; + if (base>0){ + infoP->colTable.col1 = c; + infoP->colTable.col2 = c; + for ( A_long i=0 ; i<4; i++){ + infoP->colTable.angle = infoP->line[i].angle; + infoP->colTable.length = infoP->line[i].length * base /PF_MAX_CHAN8; + infoP->colTable.strong = infoP->line[i].strong * (PF_FpShort)base/PF_MAX_CHAN8; + if ( (infoP->colTable.length>0)&&(infoP->colTable.strong>0)){ + makeTable8(infoP); + DrawLine8(infoP); + } + } + + } + target++; + } + target += infoP->g->offsetWidth(); + } + + return err; +} +//------------------------------------------------------------------------------------------------- +PF_Err StarDrawSubScreen16(ParamInfo16 *infoP) +{ + PF_Err err = PF_Err_NONE; + A_long x,y; + + PF_Pixel16 *data; + data = (PF_Pixel16 *)infoP->g->data(); + A_long target =0; + for ( y=0;y g->height(); y++){ + infoP->y = y; + for ( x=0; xg->width(); x++){ + infoP->x = x; + PF_Pixel16 c = data[target]; + A_long base = (A_long)c.alpha; + if (base>0){ + infoP->colTable.col1 = c; + infoP->colTable.col2 = c; + for ( A_long i=0 ; i<4; i++){ + infoP->colTable.angle = infoP->line[i].angle; + infoP->colTable.length = (A_long)(infoP->line[i].length * base/PF_MAX_CHAN16); + infoP->colTable.strong = infoP->line[i].strong * (PF_FpShort)base/PF_MAX_CHAN16; + if ( (infoP->colTable.length>0)&&(infoP->colTable.strong>0)){ + makeTable16(infoP); + DrawLine16(infoP); + } + } + + } + target++; + } + target += infoP->g->offsetWidth(); + } + + return err; +} +//------------------------------------------------------------------------------------------------- +PF_Err StarDrawSubScreen32(ParamInfo32 *infoP) +{ + PF_Err err = PF_Err_NONE; + A_long x,y; + + PF_PixelFloat *data; + data = (PF_PixelFloat *)infoP->g->data(); + A_long target =0; + for ( y=0;y g->height(); y++){ + infoP->y = y; + for ( x=0; xg->width(); x++){ + infoP->x = x; + PF_PixelFloat c = data[target]; + PF_FpShort base = c.alpha; + if (base>0){ + infoP->colTable.col1 = c; + infoP->colTable.col2 = c; + for ( A_long i=0 ; i<4; i++){ + infoP->colTable.angle = infoP->line[i].angle; + infoP->colTable.length = (A_long)(infoP->line[i].length * base); + infoP->colTable.strong = infoP->line[i].strong * base; + if ( (infoP->colTable.length>0)&&(infoP->colTable.strong>0)){ + makeTable32(infoP); + DrawLine32(infoP); + } + } + + } + target++; + } + target += infoP->g->offsetWidth(); + } + + return err; +} +#define TABLE_SIZE 2500 +//------------------------------------------------------------------------------------------------- +PF_Err StarDraw (CFsAE *ae, ParamInfo *infoP) +{ + PF_Err err = PF_Err_NONE; + + CFsBuffer buf(ae->in_data); + switch(ae->pixelFormat()) + { + case PF_PixelFormat_ARGB128: + ERR(buf.Create(TABLE_SIZE * sizeof(PF_PixelFloat))); + if (!err){ + ParamInfo32 info32; + switch(infoP->colTable.kind) + { + case skAtoB: + case skBtoA: + calcColor32 = calcColorTable32; + break; + case skAonly: + case skBonly: + case skScreen: + calcColor32 = calcColorTableOnly32; + break; + } + info32.in_data = ae->in_data; + info32.g = ae->out; + for ( A_long i=0; i<4; i++){ + info32.line[i].length = infoP->line[i].length; + info32.line[i].angle = infoP->line[i].angle; + info32.line[i].strong = infoP->line[i].strong; + } + + info32.colTable.border = infoP->colTable.border; + info32.colTable.col1 = CONV8TO32(infoP->colTable.col1); + info32.colTable.col2 = CONV8TO32(infoP->colTable.col2); + info32.colTable.in_data = ae->in_data; + info32.colTable.length = 0; + info32.colTable.strong = 0; + info32.colTable.value = 0; + + info32.tbl = buf.bufPixelFloat(); + //buf.Lock(); + if ( infoP->colTable.kind == skScreen){ + StarDrawSubScreen32(&info32); + }else{ + StarDrawSub32(&info32); + } + buf.Dispose(); + } + break; + case PF_PixelFormat_ARGB64: + ERR(buf.Create(TABLE_SIZE * sizeof(PF_Pixel16))); + if (!err){ + ParamInfo16 info16; + switch(infoP->colTable.kind) + { + case skAtoB: + case skBtoA: + calcColor16 = calcColorTable16; + break; + case skAonly: + case skBonly: + case skScreen: + calcColor16 = calcColorTableOnly16; + break; + } + info16.in_data = ae->in_data; + info16.g = ae->out; + for ( A_long i=0; i<4; i++){ + info16.line[i].length = infoP->line[i].length; + info16.line[i].angle = infoP->line[i].angle; + info16.line[i].strong = infoP->line[i].strong; + } + + info16.colTable.border = infoP->colTable.border; + info16.colTable.col1 = CONV8TO16(infoP->colTable.col1); + info16.colTable.col2 = CONV8TO16(infoP->colTable.col2); + info16.colTable.in_data = ae->in_data; + info16.colTable.length = 0; + info16.colTable.strong = 0; + info16.colTable.value = 0; + + info16.tbl = buf.bufPixel16(); + //buf.Lock(); + if ( infoP->colTable.kind == skScreen){ + StarDrawSubScreen16(&info16); + }else{ + StarDrawSub16(&info16); + } + buf.Dispose(); + } + break; + case PF_PixelFormat_ARGB32: + ERR(buf.Create(TABLE_SIZE * sizeof(PF_Pixel))); + if (!err){ + ParamInfo8 info8; + switch(infoP->colTable.kind) + { + case skAtoB: + case skBtoA: + calcColor8 = calcColorTable8; + break; + case skAonly: + case skBonly: + case skScreen: + calcColor8 = calcColorTableOnly8; + break; + } + info8.in_data = ae->in_data; + info8.g = ae->out; + for ( A_long i=0; i<4; i++){ + info8.line[i].length = infoP->line[i].length; + info8.line[i].angle = infoP->line[i].angle; + info8.line[i].strong = infoP->line[i].strong; + } + + info8.colTable.border = infoP->colTable.border; + info8.colTable.col1 = infoP->colTable.col1; + info8.colTable.col2 = infoP->colTable.col2; + info8.colTable.in_data = ae->in_data; + info8.colTable.length = 0; + info8.colTable.strong = 0; + info8.colTable.value = 0; + + info8.tbl = buf.bufPixel(); + //buf.Lock(); + if ( infoP->colTable.kind == skScreen){ + StarDrawSubScreen8(&info8); + }else{ + StarDrawSub8(&info8); + } + buf.Dispose(); + } + break; + } + return err; +} diff --git a/Star/StarMask.cpp b/Star/StarMask.cpp new file mode 100644 index 0000000..91690be --- /dev/null +++ b/Star/StarMask.cpp @@ -0,0 +1,303 @@ + +#include "Star.h" +typedef struct MinParam +{ + A_long *scanline; + PF_FpShort *scanlineD; + A_long scanlineLength; //scanlineの長さ + A_long value; //Max/Minの値 + + A_long target; //scanlineのターゲットインデックス + A_long maxIndex; +}MinParam; + + +//---------------------------------------------------------------------------- +static A_long getMin(MinParam *mm) +{ + A_long start = mm->target - mm->value; + if ( start<0) start = 0; + A_long end = mm->target + mm->value; + if ( end >= mm->scanlineLength) end = mm->scanlineLength-1; + if ( (mm->maxIndex>=start)&&(mm->maxIndex<=end)) + { + if (mm->scanline[end] <=mm->scanline[mm->maxIndex]){ + mm->maxIndex = end; + return mm->scanline[end]; + }else{ + return mm->scanline[mm->maxIndex]; + } + } + A_long idx = start; + for ( A_long i=start; i<=end; i++) + { + if ( mm->scanline[i] <=0){ + idx = i; + break; + }else{ + if ( mm->scanline[i] < mm->scanline[idx]) idx = i; + } + } + mm->maxIndex =idx; + return mm->scanline[idx]; +} +//---------------------------------------------------------------------------- +static PF_FpShort getMinD(MinParam *mm) +{ + A_long start = mm->target - mm->value; + if ( start<0) start = 0; + A_long end = mm->target + mm->value; + if ( end >= mm->scanlineLength) end = mm->scanlineLength-1; + if ( (mm->maxIndex>=start)&&(mm->maxIndex<=end)) + { + if (mm->scanlineD[end] <=mm->scanlineD[mm->maxIndex]){ + mm->maxIndex = end; + return mm->scanlineD[end]; + }else{ + return mm->scanlineD[mm->maxIndex]; + } + } + A_long idx = start; + for ( A_long i=start; i<=end; i++) + { + if ( mm->scanlineD[i] <=0){ + idx = i; + break; + }else{ + if ( mm->scanlineD[i] < mm->scanlineD[idx]) idx = i; + } + } + mm->maxIndex =idx; + return mm->scanlineD[idx]; +} +//------------------------------------------------------------------------------------------------- +void MinMask8(CFsAE *ae,A_long min) +{ + PF_Err err = PF_Err_NONE; + MinParam mm; + mm.value = min; + A_long w = ae->out->width(); + if ( ae->out->width()out->height()) w = ae->out->height(); + CFsBuffer scanline = ae->NewBuffer(w*sizeof(A_long)); + err = scanline.err(); + if (!err){ + PF_Pixel *data; + data = (PF_Pixel *)ae->out->data(); + mm.scanline = scanline.bufA_long(); + mm.scanlineLength = ae->out->width(); + //水平方向 + A_long hor =0; + A_long x,y; + for (y=0; y< ae->out->height(); y++) + { + hor = ae->out->widthTrue() * y; + //スキャンライン分転送 + for (x=0; xout->width(); x++){ + mm.scanline[x] = (A_long)data[hor + x].alpha; + } + mm.maxIndex = -1; + for (x=0; xout->width(); x++){ + mm.target = x; + data[hor + x].alpha = (A_u_char)getMin(&mm); + } + } + + mm.scanlineLength = ae->out->height(); + for ( x=0; xout->width(); x++) + { + hor = x; + for ( y=0; yout->height(); y++){ + mm.scanline[y] = data[hor].alpha; + hor += ae->out->widthTrue(); + } + hor = x; + mm.maxIndex = -1; + for ( y=0; yout->height(); y++){ + mm.target = y; + data[hor].alpha = (A_u_char)getMin(&mm); + hor += ae->out->widthTrue(); + } + } + scanline.Dispose(); + } +} +//------------------------------------------------------------------------------------------------- +void MinMask16(CFsAE *ae,A_long min) +{ + PF_Err err = PF_Err_NONE; + MinParam mm; + mm.value = min; + A_long w = ae->out->width(); + if ( ae->out->width()out->height()) w = ae->out->height(); + CFsBuffer scanline = ae->NewBuffer(w*sizeof(A_long)); + err = scanline.err(); + if (!err){ + PF_Pixel16 *data; + data = (PF_Pixel16 *)ae->out->data(); + mm.scanline = scanline.bufA_long(); + + mm.scanlineLength = ae->out->width(); + //水平方向 + A_long hor =0; + A_long x,y; + for (y=0; y< ae->out->height(); y++) + { + hor = ae->out->widthTrue() * y; + //スキャンライン分転送 + for (x=0; xout->width(); x++){ + mm.scanline[x] = (A_long)data[hor + x].alpha; + } + mm.maxIndex = -1; + for (x=0; xout->width(); x++){ + mm.target = x; + data[hor + x].alpha = (A_u_short)getMin(&mm); + } + } + + mm.scanlineLength = ae->out->height(); + for ( x=0; xout->width(); x++) + { + hor = x; + for ( y=0; yout->height(); y++){ + mm.scanline[y] = data[hor].alpha; + hor += ae->out->widthTrue(); + } + hor = x; + mm.maxIndex = -1; + for ( y=0; yout->height(); y++){ + mm.target = y; + data[hor].alpha = (A_u_short)getMin(&mm); + hor += ae->out->widthTrue(); + } + } + scanline.Dispose(); + } +} +//------------------------------------------------------------------------------------------------- +void MinMask32(CFsAE *ae,A_long min) +{ + PF_Err err = PF_Err_NONE; + MinParam mm; + mm.value = min; + A_long w = ae->out->width(); + if ( ae->out->width()out->height()) w = ae->out->height(); + CFsBuffer scanline = ae->NewBuffer(w*sizeof(PF_FpShort)); + err = scanline.err(); + if (!err){ + PF_PixelFloat *data; + data = (PF_PixelFloat *)ae->out->data(); + mm.scanlineD = scanline.bufFpShort(); + + mm.scanlineLength = ae->out->width(); + //水平方向 + A_long hor =0; + A_long x,y; + for (y=0; y< ae->out->height(); y++) + { + hor = ae->out->widthTrue() * y; + //スキャンライン分転送 + for (x=0; xout->width(); x++){ + mm.scanlineD[x] = (PF_FpShort)data[hor + x].alpha; + } + mm.maxIndex = -1; + for (x=0; xout->width(); x++){ + mm.target = x; + data[hor + x].alpha = getMinD(&mm); + } + } + + mm.scanlineLength = ae->out->height(); + for ( x=0; xout->width(); x++) + { + hor = x; + for ( y=0; yout->height(); y++){ + mm.scanlineD[y] = data[hor].alpha; + hor += ae->out->widthTrue(); + } + hor = x; + mm.maxIndex = -1; + for ( y=0; yout->height(); y++){ + mm.target = y; + data[hor].alpha = getMinD(&mm); + hor += ae->out->widthTrue(); + } + } + scanline.Dispose(); + } +} +//------------------------------------------------------------------------------------------------- +void MinMask(CFsAE *ae,A_long min) +{ + if ( min<=0) return; + switch(ae->pixelFormat()) + { + case PF_PixelFormat_ARGB128: + MinMask32(ae,min); + break; + case PF_PixelFormat_ARGB64: + MinMask16(ae,min); + break; + case PF_PixelFormat_ARGB32: + MinMask8(ae,min); + break; + } + +} +//----------------------------------------------------------------------------------- +static PF_Err +SubtrackAlpha8 ( + refconType refcon, + A_long xL, + A_long yL, + PF_Pixel8 *inP, + PF_Pixel8 *outP) +{ + PF_Err err = PF_Err_NONE; + outP->alpha = RoundByteLong( outP->red - outP->alpha); + return err; +} +//----------------------------------------------------------------------------------- +static PF_Err +SubtrackAlpha16 ( + refconType refcon, + A_long xL, + A_long yL, + PF_Pixel16 *inP, + PF_Pixel16 *outP) +{ + PF_Err err = PF_Err_NONE; + outP->alpha = RoundShort( outP->red - outP->alpha); + return err; +} +//----------------------------------------------------------------------------------- +static PF_Err +SubtrackAlpha32 ( + refconType refcon, + A_long xL, + A_long yL, + PF_PixelFloat *inP, + PF_PixelFloat *outP) +{ + PF_Err err = PF_Err_NONE; + outP->alpha = RoundFpShort( outP->red - outP->alpha); + return err; +} +//------------------------------------------------------------------------------------------------- +PF_Err SubtrackAlpha (CFsAE *ae) +{ + PF_Err err = PF_Err_NONE; + + switch(ae->pixelFormat()) + { + case PF_PixelFormat_ARGB128: + ERR(ae->iterate32(NULL,SubtrackAlpha32)); + break; + case PF_PixelFormat_ARGB64: + ERR(ae->iterate16(NULL,SubtrackAlpha16)); + break; + case PF_PixelFormat_ARGB32: + ERR(ae->iterate8(NULL,SubtrackAlpha8)); + break; + } + return err; +} diff --git a/Star/StarPiPL.r b/Star/StarPiPL.r new file mode 100644 index 0000000..bfb346b --- /dev/null +++ b/Star/StarPiPL.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 { + 0 + } + } +}; + diff --git a/Star/StarTargetCopy.cpp b/Star/StarTargetCopy.cpp new file mode 100644 index 0000000..6123ce8 --- /dev/null +++ b/Star/StarTargetCopy.cpp @@ -0,0 +1,321 @@ +//----------------------------------------------------------------------------------- +/* + F's Plugins for VS2010/VS2012 +*/ +//----------------------------------------------------------------------------------- + +#include "Star.h" + + +//----------------------------------------------------------------------------------- +static PF_Err +TargetCopy8 ( + refconType refcon, + A_long xL, + A_long yL, + PF_Pixel8 *inP, + PF_Pixel8 *outP) +{ + PF_Err err = PF_Err_NONE; + + A_u_char mp = MAX(inP->red,MAX(inP->green,inP->blue)); + + outP->blue = outP->green = outP->red = + outP->alpha = RoundByteLong( mp * inP->alpha / PF_MAX_CHAN8); + return err; +} +//----------------------------------------------------------------------------------- +static PF_Err +TargetCopy16 ( + refconType refcon, + A_long xL, + A_long yL, + PF_Pixel16 *inP, + PF_Pixel16 *outP) +{ + PF_Err err = PF_Err_NONE; + + A_u_short mp = MAX(inP->red,MAX(inP->green,inP->blue)); + + outP->blue = outP->green = outP->red = + outP->alpha = RoundShort( mp * inP->alpha / PF_MAX_CHAN16); + return err; +} +//----------------------------------------------------------------------------------- +static PF_Err +TargetCopy32 ( + refconType refcon, + A_long xL, + A_long yL, + PF_PixelFloat *inP, + PF_PixelFloat *outP) +{ + PF_Err err = PF_Err_NONE; + + PF_FpShort mp = MAX(inP->red,MAX(inP->green,inP->blue)); + + outP->blue = outP->green = outP->red = + outP->alpha = RoundFpShortDouble( mp * inP->alpha); + return err; +} +//------------------------------------------------------------------------------------------------- +PF_Err TargetCopy (CFsAE *ae) +{ + PF_Err err = PF_Err_NONE; + + switch(ae->pixelFormat()) + { + case PF_PixelFormat_ARGB128: + ERR(ae->iterate32(NULL,TargetCopy32)); + break; + case PF_PixelFormat_ARGB64: + ERR(ae->iterate16(NULL,TargetCopy16)); + break; + case PF_PixelFormat_ARGB32: + ERR(ae->iterate8(NULL,TargetCopy8)); + break; + } + return err; +} +//----------------------------------------------------------------------------------- +static PF_Err +ScreenCopy8 ( + refconType refcon, + A_long xL, + A_long yL, + PF_Pixel8 *inP, + PF_Pixel8 *outP) +{ + PF_Err err = PF_Err_NONE; + + PF_Pixel r; + r.red = RoundByteLong( inP->red * inP->alpha /PF_MAX_CHAN8); + r.green = RoundByteLong( inP->green * inP->alpha /PF_MAX_CHAN8); + r.blue = RoundByteLong( inP->blue * inP->alpha /PF_MAX_CHAN8); + + r.alpha = outP->alpha; + *outP = r; + + return err; +} +//----------------------------------------------------------------------------------- +static PF_Err +ScreenCopy16 ( + refconType refcon, + A_long xL, + A_long yL, + PF_Pixel16 *inP, + PF_Pixel16 *outP) +{ + PF_Err err = PF_Err_NONE; + + PF_Pixel16 r; + r.red = RoundShort( inP->red * inP->alpha /PF_MAX_CHAN16); + r.green = RoundShort( inP->green * inP->alpha /PF_MAX_CHAN16); + r.blue = RoundShort( inP->blue * inP->alpha /PF_MAX_CHAN16); + + r.alpha = outP->alpha; + *outP = r; + + return err; +} +//----------------------------------------------------------------------------------- +static PF_Err +ScreenCopy32 ( + refconType refcon, + A_long xL, + A_long yL, + PF_PixelFloat *inP, + PF_PixelFloat *outP) +{ + PF_Err err = PF_Err_NONE; + + PF_PixelFloat r; + r.red = RoundFpShortDouble( inP->red * inP->alpha); + r.green = RoundFpShortDouble( inP->green * inP->alpha); + r.blue = RoundFpShortDouble( inP->blue * inP->alpha); + + r.alpha = outP->alpha; + *outP = r; + + return err; +} +//------------------------------------------------------------------------------------------------- +PF_Err ScreenCopy (CFsAE *ae) +{ + PF_Err err = PF_Err_NONE; + + switch(ae->pixelFormat()) + { + case PF_PixelFormat_ARGB128: + ERR(ae->iterate32(NULL,ScreenCopy32)); + break; + case PF_PixelFormat_ARGB64: + ERR(ae->iterate16(NULL,ScreenCopy16)); + break; + case PF_PixelFormat_ARGB32: + ERR(ae->iterate8(NULL,ScreenCopy8)); + break; + } + return err; +} +typedef struct +{ + PF_Pixel c8; + PF_Pixel16 c16; + PF_PixelFloat c32; +}ColorFillInfo; +#define FillColor_TARGET red +//----------------------------------------------------------------------------------- +static PF_Err +FillColor8 ( + refconType refcon, + A_long xL, + A_long yL, + PF_Pixel8 *inP, + PF_Pixel8 *outP) +{ + PF_Err err = PF_Err_NONE; + ColorFillInfo * infoP = reinterpret_cast(refcon); + + PF_Pixel r; + PF_Pixel p = infoP->c8; + r.red = RoundByteLong( p.red * outP->FillColor_TARGET /PF_MAX_CHAN8); + r.green = RoundByteLong( p.green * outP->FillColor_TARGET /PF_MAX_CHAN8); + r.blue = RoundByteLong( p.blue * outP->FillColor_TARGET /PF_MAX_CHAN8); + + r.alpha = outP->alpha; + *outP = r; + + return err; +} +//----------------------------------------------------------------------------------- +static PF_Err +FillColor16 ( + refconType refcon, + A_long xL, + A_long yL, + PF_Pixel16 *inP, + PF_Pixel16 *outP) +{ + PF_Err err = PF_Err_NONE; + ColorFillInfo * infoP = reinterpret_cast(refcon); + + PF_Pixel16 r; + PF_Pixel16 p = infoP->c16; + r.red = RoundShort( p.red * outP->FillColor_TARGET /PF_MAX_CHAN16); + r.green = RoundShort( p.green * outP->FillColor_TARGET /PF_MAX_CHAN16); + r.blue = RoundShort( p.blue * outP->FillColor_TARGET /PF_MAX_CHAN16); + + r.alpha = outP->alpha; + *outP = r; + + return err; +} +//----------------------------------------------------------------------------------- +static PF_Err +FillColor32 ( + refconType refcon, + A_long xL, + A_long yL, + PF_PixelFloat *inP, + PF_PixelFloat *outP) +{ + PF_Err err = PF_Err_NONE; + ColorFillInfo * infoP = reinterpret_cast(refcon); + + PF_PixelFloat r; + PF_PixelFloat p = infoP->c32; + r.red = RoundFpShortDouble( p.red * outP->FillColor_TARGET); + r.green = RoundFpShortDouble( p.green * outP->FillColor_TARGET); + r.blue = RoundFpShortDouble( p.blue * outP->FillColor_TARGET); + + r.alpha = outP->alpha; + *outP = r; + + return err; +} +//------------------------------------------------------------------------------------------------- +PF_Err FillColorCopy (CFsAE *ae,PF_Pixel c) +{ + PF_Err err = PF_Err_NONE; + + ColorFillInfo info; + switch(ae->pixelFormat()) + { + case PF_PixelFormat_ARGB128: + info.c32 = CONV8TO32(c); + ERR(ae->iterate32((refconType)&info,FillColor32)); + break; + case PF_PixelFormat_ARGB64: + info.c16 = CONV8TO16(c); + ERR(ae->iterate16((refconType)&info,FillColor16)); + break; + case PF_PixelFormat_ARGB32: + info.c8 = c; + ERR(ae->iterate8((refconType)&info,FillColor8)); + break; + } + return err; +} +//----------------------------------------------------------------------------------- +static PF_Err +AlphaMake8 ( + refconType refcon, + A_long xL, + A_long yL, + PF_Pixel8 *inP, + PF_Pixel8 *outP) +{ + PF_Err err = PF_Err_NONE; + + outP->alpha = MAX(outP->blue,MAX(outP->green,outP->red)); + return err; +} +//----------------------------------------------------------------------------------- +static PF_Err +AlphaMake16 ( + refconType refcon, + A_long xL, + A_long yL, + PF_Pixel16 *inP, + PF_Pixel16 *outP) +{ + PF_Err err = PF_Err_NONE; + + outP->alpha = MAX(outP->blue,MAX(outP->green,outP->red)); + return err; +} +//----------------------------------------------------------------------------------- +static PF_Err +AlphaMake32 ( + refconType refcon, + A_long xL, + A_long yL, + PF_PixelFloat *inP, + PF_PixelFloat *outP) +{ + PF_Err err = PF_Err_NONE; + + outP->alpha = MAX(outP->blue,MAX(outP->green,outP->red)); + return err; +} +//------------------------------------------------------------------------------------------------- +PF_Err AlphaMake (CFsAE *ae) +{ + PF_Err err = PF_Err_NONE; + + switch(ae->pixelFormat()) + { + case PF_PixelFormat_ARGB128: + ERR(ae->iterate32(NULL,AlphaMake32)); + break; + case PF_PixelFormat_ARGB64: + ERR(ae->iterate16(NULL,AlphaMake16)); + break; + case PF_PixelFormat_ARGB32: + ERR(ae->iterate8(NULL,AlphaMake8)); + break; + } + return err; +} diff --git a/Star/Win/Star.vcxproj b/Star/Win/Star.vcxproj new file mode 100644 index 0000000..515d4af --- /dev/null +++ b/Star/Win/Star.vcxproj @@ -0,0 +1,590 @@ +サソ + + + + Debug + Win32 + + + Debug + x64 + + + Release-MD + Win32 + + + Release-MD + x64 + + + Release + Win32 + + + Release + x64 + + + + {7DD5AAE7-DBCF-4D69-9D82-0C868ECD00E8} + Star + Star + 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/Star.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/Star.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/Star.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/Star.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/Star.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/Star.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/Star/Win/Star.vcxproj.filters b/Star/Win/Star.vcxproj.filters new file mode 100644 index 0000000..339f38f --- /dev/null +++ b/Star/Win/Star.vcxproj.filters @@ -0,0 +1,161 @@ +サソ + + + + {13eba119-cc81-452a-a930-fb4b695efd42} + h;hpp;hxx;hm;inl;fi;fd + + + {21288698-44b4-4b31-bce8-6343105574e9} + + + {a86c23c8-9be8-4981-ad01-4817ee256c30} + ico;cur;bmp;dlg;rc2;rct;bin;cnt;rtf;gif;jpg;jpeg;jpe + + + {5fb4f005-728f-4031-9c21-6c535369fc02} + + + {3509a131-0bfc-4436-a798-2c87ae4ab9e0} + + + {a9207d08-b819-479a-ba4a-a7a311b29741} + + + {f5491765-fd39-4629-a6c5-459201da94df} + + + {eccd6114-fe8d-43a2-b684-34e314a24585} + + + + + 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/Star/Win/StarPiPL.rc b/Star/Win/StarPiPL.rc new file mode 100644 index 0000000..89a1ef8 --- /dev/null +++ b/Star/Win/StarPiPL.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, + "\x08F's Star\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, + 12, 0x0, + "\x08F's Star\0\0\0", + + "MIB8", + 0x6165464CL, + 0L, + 4L + 0L, + + +END + diff --git a/Star_Colorful/Fs_Entry.h b/Star_Colorful/Fs_Entry.h new file mode 100644 index 0000000..ad7788d --- /dev/null +++ b/Star_Colorful/Fs_Entry.h @@ -0,0 +1,227 @@ +//----------------------------------------------------------------------------------- +/* + Star_Colorful 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/Star_Colorful/Fs_Target.h b/Star_Colorful/Fs_Target.h new file mode 100644 index 0000000..283e887 --- /dev/null +++ b/Star_Colorful/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 Star_Colorful" + +//----------------------------------------------------------------------------------- +//プラグインの説明に使われる文字 +#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/Star_Colorful/Star_Colorful.cpp b/Star_Colorful/Star_Colorful.cpp new file mode 100644 index 0000000..d12a8c0 --- /dev/null +++ b/Star_Colorful/Star_Colorful.cpp @@ -0,0 +1,532 @@ +//----------------------------------------------------------------------------------- +/* + F's Plugins for VS2010/VS2012 +*/ +//----------------------------------------------------------------------------------- + + +#include "Star_Colorful.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_TOPIC(STR_TOPIC0, ID_TOPIC0); + //---------------------------------------------------------------- + //ポップアップメニュー + AEFX_CLR_STRUCT(def); + PF_ADD_POPUP(STR_TARGET_KIND, + STR_TARGET_COUNT, //メニューの数 + STR_TARGET_DFLT, //デフォルト + STR_TARGET_ITEMS, + ID_TAGET_KIND + ); + + //---------------------------------------------------------------- + AEFX_CLR_STRUCT(def); + PF_ADD_FLOAT_SLIDER(STR_TAGET_BORDER, //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_BORDER + ); + //---------------------------------------------------------------- + AEFX_CLR_STRUCT(def); + PF_ADD_FLOAT_SLIDER(STR_TAGET_SOFT, //Name + 0, //VALID_MIN + 100, //VALID_MAX + 0, //SLIDER_MIN + 100, //SLIDER_MAX + 1, //CURVE_TOLERANCE + 100, //DFLT + 1, //PREC + 0, //DISP + 0, //WANT_PHASE + ID_TAGET_SOFT + ); + //---------------------------------------------------------------- + //色の指定 + AEFX_CLR_STRUCT(def); + PF_ADD_COLOR(STR_TARGET_COLOR, + 0xFF, + 0x00, + 0x00, + ID_TARGET_COLOR + ); + //---------------------------------------------------------------- + AEFX_CLR_STRUCT(def); + PF_ADD_CHECKBOX(STR_TARGET_MASK, + STR_ON, + FALSE, + 0, + ID_TARGET_MASK + ); + + //---------------------------------------------------------------- + AEFX_CLR_STRUCT(def); + PF_END_TOPIC(ID_TOPIC0_END); + //---------------------------------------------------------------- + AEFX_CLR_STRUCT(def); + PF_ADD_TOPIC(STR_TOPICA, ID_TOPICA); + //---------------------------------------------------------------- + AEFX_CLR_STRUCT(def); + PF_ADD_FLOAT_SLIDER(STR_LENGTH,//Name + 0, //VALID_MIN + 600, //VALID_MAX + 0, //SLIDER_MIN + 200, //SLIDER_MAX + 1, //CURVE_TOLERANCE + 100, //DFLT + 1, //PREC + 0, //DISP + 0, //WANT_PHASE + ID_LENGTH + ); + //---------------------------------------------------------------- + AEFX_CLR_STRUCT(def); + PF_ADD_FLOAT_SLIDER(STR_OPACITY, //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_OPACITY + ); + + //---------------------------------------------------------------- + //角度 + AEFX_CLR_STRUCT(def); + PF_ADD_ANGLE(STR_ROT, 0, ID_ROT); + //---------------------------------------------------------------- + AEFX_CLR_STRUCT(def); + PF_ADD_CHECKBOX(STR_AUTOROLLING, + STR_ON, + FALSE, + 0, + ID_AUTOROLLING + ); + //---------------------------------------------------------------- + AEFX_CLR_STRUCT(def); + PF_ADD_FLOAT_SLIDER(STR_ROLLINGSPEED,//Name + -720, //VALID_MIN + 720, //VALID_MAX + -180, //SLIDER_MIN + 180, //SLIDER_MAX + 1, //CURVE_TOLERANCE + 90, //DFLT + 1, //PREC + 0, //DISP + 0, //WANT_PHASE + ID_ROLLINGDPEED + ); + + //---------------------------------------------------------------- + AEFX_CLR_STRUCT(def); + PF_END_TOPIC(ID_TOPICA_END); + + + //---------------------------------------------------------------- + AEFX_CLR_STRUCT(def); + PF_ADD_TOPIC(STR_TOPIC1, ID_TOPIC1); + //---------------------------------------------------------------- + //ポップアップメニュー + AEFX_CLR_STRUCT(def); + PF_ADD_POPUP(STR_COLOR_KIND, + STR_COLOR_COUNT, //メニューの数 + STR_COLOR_DFLT, //デフォルト + STR_COLOR_ITEMS, + ID_COLOR_KIND + ); + //---------------------------------------------------------------- + //色の指定 + AEFX_CLR_STRUCT(def); + PF_ADD_COLOR(STR_COLOR, + 0xFF, + 0xFF, + 0x00, + ID_COLOR + ); + //---------------------------------------------------------------- + AEFX_CLR_STRUCT(def); + PF_ADD_FLOAT_SLIDER(STR_BRIGHT, //Name + 0, //VALID_MIN + 100, //VALID_MAX + 0, //SLIDER_MIN + 20, //SLIDER_MAX + 1, //CURVE_TOLERANCE + 5, //DFLT + 1, //PREC + 0, //DISP + 0, //WANT_PHASE + ID_BRIGHTNESS + ); + + //---------------------------------------------------------------- + AEFX_CLR_STRUCT(def); + PF_ADD_FLOAT_SLIDER(STR_RAINBOW_OFFSET, //Name + -30000, //VALID_MIN + +30000, //VALID_MAX + -1, //SLIDER_MIN + 1, //SLIDER_MAX + 1, //CURVE_TOLERANCE + 0, //DFLT + 1, //PREC + 0, //DISP + 0, //WANT_PHASE + ID_RAINBOW_OFFSET + ); + //---------------------------------------------------------------- + AEFX_CLR_STRUCT(def); + PF_ADD_FLOAT_SLIDER(STR_RAINBOW_DELTA, //Name + 0, //VALID_MIN + 100, //VALID_MAX + 0, //SLIDER_MIN + 5, //SLIDER_MAX + 1, //CURVE_TOLERANCE + 1, //DFLT + 1, //PREC + 0, //DISP + 0, //WANT_PHASE + ID_RAINBOW_DELTA + ); + //---------------------------------------------------------------- + AEFX_CLR_STRUCT(def); + PF_END_TOPIC(ID_TOPIC1_END); + //---------------------------------------------------------------- + AEFX_CLR_STRUCT(def); + PF_ADD_TOPIC(STR_TOPIC2, ID_TOPIC2); + //---------------------------------------------------------------- + AEFX_CLR_STRUCT(def); + PF_ADD_SLIDER(STR_VER_LEN, //パラメータの名前 + 0, //数値入力する場合の最小値 + 300, //数値入力する場合の最大値 + 0, //スライダーの最小値 + 150, //スライダーの最大値 + 70, //デフォルトの値 + ID_VER_LEN + ); + //---------------------------------------------------------------- + //角度 + AEFX_CLR_STRUCT(def); + PF_ADD_ANGLE(STR_VER_ROT, 0, ID_VER_ROT); + //---------------------------------------------------------------- + AEFX_CLR_STRUCT(def); + PF_ADD_FLOAT_SLIDER(STR_VER_OPACITY, //Name + 0, //VALID_MIN + 100, //VALID_MAX + 0, //SLIDER_MIN + 100, //SLIDER_MAX + 0, //CURVE_TOLERANCE + 100, //DFLT + 1, //PREC + 0, //DISP + 0, //WANT_PHASE + ID_VER_OPACITY + ); + //---------------------------------------------------------------- + AEFX_CLR_STRUCT(def); + PF_ADD_SLIDER(STR_HOR_LEN, //パラメータの名前 + 0, //数値入力する場合の最小値 + 300, //数値入力する場合の最大値 + 0, //スライダーの最小値 + 150, //スライダーの最大値 + 70, //デフォルトの値 + ID_HOR_LEN + ); + //---------------------------------------------------------------- + //角度 + AEFX_CLR_STRUCT(def); + PF_ADD_ANGLE(STR_HOR_ROT, 90, ID_HOR_ROT); + //---------------------------------------------------------------- + AEFX_CLR_STRUCT(def); + PF_ADD_FLOAT_SLIDER(STR_HOR_OPACITY, //Name + 0, //VALID_MIN + 100, //VALID_MAX + 0, //SLIDER_MIN + 100, //SLIDER_MAX + 0, //CURVE_TOLERANCE + 100, //DFLT + 1, //PREC + 0, //DISP + 0, //WANT_PHASE + ID_HOR_OPACITY + ); + //---------------------------------------------------------------- + AEFX_CLR_STRUCT(def); + PF_ADD_SLIDER(STR_DIA_LEN, //パラメータの名前 + 0, //数値入力する場合の最小値 + 300, //数値入力する場合の最大値 + 0, //スライダーの最小値 + 150, //スライダーの最大値 + 50, //デフォルトの値 + ID_DIA_LEN + ); + //---------------------------------------------------------------- + //角度 + AEFX_CLR_STRUCT(def); + PF_ADD_ANGLE(STR_DIA_ROT, 45, ID_DIA_ROT); + //---------------------------------------------------------------- + //角度 + AEFX_CLR_STRUCT(def); + PF_ADD_ANGLE(STR_DIA_ROT2, -45, ID_DIA_ROT2); + //---------------------------------------------------------------- + AEFX_CLR_STRUCT(def); + PF_ADD_FLOAT_SLIDER(STR_DIA_OPACITY, //Name + 0, //VALID_MIN + 100, //VALID_MAX + 0, //SLIDER_MIN + 100, //SLIDER_MAX + 0, //CURVE_TOLERANCE + 75, //DFLT + 1, //PREC + 0, //DISP + 0, //WANT_PHASE + ID_DIA_OPACITY + ); + + //---------------------------------------------------------------- + AEFX_CLR_STRUCT(def); + PF_END_TOPIC(ID_TOPIC2_END); + + //---------------------------------------------------------------- + //ポップアップメニュー + AEFX_CLR_STRUCT(def); + PF_ADD_POPUP(STR_BLEND, + STR_BLEND_COUNT, //メニューの数 + STR_BLEND_DFLT, //デフォルト + STR_BLEND_ITEMS, + ID_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; + + 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->GetPOPUP(ID_TAGET_KIND, &infoP->target_kind)); + ERR(ae->GetFLOAT(ID_TAGET_BORDER, &infoP->target_border)); + infoP->target_border /= 100; + ERR(ae->GetFLOAT(ID_TAGET_SOFT, &infoP->target_softness)); + infoP->target_softness /= 100; + + ERR(ae->GetCOLOR(ID_TARGET_COLOR, &infoP->target_color)); + ERR(ae->GetCHECKBOX(ID_TARGET_MASK, &infoP->target_maskDraw)); + + ERR(ae->GetANGLE_FLT(ID_ROT, &infoP->rot)); + infoP->rot = CRot::RoundRot(infoP->rot); + + + ERR(ae->GetCHECKBOX(ID_AUTOROLLING, &infoP->autoRolling)); + ERR(ae->GetFLOAT(ID_ROLLINGDPEED, &infoP->rollingSpeed)); + + + ERR(ae->GetFLOAT(ID_LENGTH,&infoP->length)); + infoP->length /= 100; + ERR(ae->GetFLOAT(ID_OPACITY,&infoP->opacity)); + infoP->opacity /= 100; + ERR(ae->GetFLOAT(ID_BRIGHTNESS,&infoP->brigthness)); + infoP->brigthness /= 100; + + ERR(ae->GetPOPUP(ID_COLOR_KIND, &infoP->color_kind)); + ERR(ae->GetCOLOR(ID_COLOR, &infoP->color)); + + + ERR(ae->GetFLOAT(ID_RAINBOW_OFFSET, &infoP->rainbowOffset)); + ERR(ae->GetFLOAT(ID_RAINBOW_DELTA, &infoP->rainbowDelta)); + infoP->rainbowDelta /= 100; + infoP->rainbowDelta = ae->downSaleValue()* infoP->rainbowDelta; + if (infoP->rainbowDelta == 0) infoP->rainbowDelta = 0.001; + + + ERR(ae->GetADD(ID_VER_LEN,&infoP->verLength)); + infoP->verLength = ae->downScale(infoP->verLength); + + ERR(ae->GetANGLE_FLT(ID_VER_ROT, &infoP->verRot)); + infoP->verRot = CRot::RoundRot(infoP->verRot); + + ERR(ae->GetFLOAT(ID_VER_OPACITY,&infoP->verOpacity)); + infoP->verOpacity /= 100; + + ERR(ae->GetADD(ID_HOR_LEN, &infoP->horLength)); + infoP->horLength = ae->downScale(infoP->horLength); + ERR(ae->GetANGLE_FLT(ID_HOR_ROT, &infoP->horRot)); + infoP->horRot = CRot::RoundRot(infoP->horRot); + + ERR(ae->GetFLOAT(ID_HOR_OPACITY, &infoP->horOpacity)); + infoP->horOpacity /= 100; + + ERR(ae->GetADD(ID_DIA_LEN, &infoP->diaLength)); + infoP->diaLength = ae->downScale(infoP->diaLength); + ERR(ae->GetANGLE_FLT(ID_DIA_ROT, &infoP->diaRot)); + infoP->diaRot = CRot::RoundRot(infoP->diaRot); + ERR(ae->GetANGLE_FLT(ID_DIA_ROT2, &infoP->diaRot2)); + infoP->diaRot2 = CRot::RoundRot(infoP->diaRot2); + + ERR(ae->GetFLOAT(ID_DIA_OPACITY, &infoP->diaOpacity)); + infoP->diaOpacity /= 100; + + ERR(ae->GetPOPUP(ID_BLEND, &infoP->blend)); + + + 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(StarExec32(ae, infoP)); + break; + case PF_PixelFormat_ARGB64: + ERR(StarExec16(ae, infoP)); + break; + case PF_PixelFormat_ARGB32: + ERR(StarExec8(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/Star_Colorful/Star_Colorful.h b/Star_Colorful/Star_Colorful.h new file mode 100644 index 0000000..aed7987 --- /dev/null +++ b/Star_Colorful/Star_Colorful.h @@ -0,0 +1,302 @@ +//----------------------------------------------------------------------------------- +/* + Star_Colorful for VS2010 +*/ +//----------------------------------------------------------------------------------- + +#pragma once +#ifndef Star_Colorful_H +#define Star_Colorful_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_TOPIC0, + ID_TAGET_KIND, + ID_TAGET_BORDER, + ID_TAGET_SOFT, + ID_TARGET_COLOR, + ID_TARGET_MASK, + ID_TOPIC0_END, + + ID_TOPICA, + ID_LENGTH, + ID_OPACITY, + + ID_ROT, + ID_AUTOROLLING, + ID_ROLLINGDPEED, + ID_TOPICA_END, + + + ID_TOPIC1, + ID_COLOR_KIND, + ID_COLOR, + ID_BRIGHTNESS, + ID_RAINBOW_OFFSET, + ID_RAINBOW_DELTA, + ID_TOPIC1_END, + + + ID_TOPIC2, + ID_VER_LEN, + ID_VER_ROT, + ID_VER_OPACITY, + + ID_HOR_LEN, + ID_HOR_ROT, + ID_HOR_OPACITY, + + ID_DIA_LEN, + ID_DIA_ROT, + ID_DIA_ROT2, + ID_DIA_OPACITY, + + + ID_TOPIC2_END, + + ID_BLEND, + + + ID_NUM_PARAMS +}; + +//UIの表示文字列 +#define STR_TOPIC0 "Target" + +#define STR_TARGET_KIND "Target" +#define STR_TARGET_ITEMS "RGBMax|R+G+B|Brightness|TargetColor" +#define STR_TARGET_COUNT 4 +#define STR_TARGET_DFLT 1 +#define STR_TARGET_COLOR "TargetColor" +#define STR_TARGET_MASK "TargetDisp" +#define STR_ON "on" + +#define STR_TAGET_BORDER "TargetBorder" +#define STR_TAGET_SOFT "TargetSoftness" + + +#define STR_TOPICA "Control" +#define STR_ROT "Rot" +#define STR_AUTOROLLING "AutoRolling" +#define STR_ON "on" +#define STR_ROLLINGSPEED "RollingSpeed" + +#define STR_LENGTH "Length" +#define STR_OPACITY "Opacity" + +#define STR_TOPIC1 "Color" +#define STR_COLOR_KIND "ColorKind" +#define STR_COLOR "Color" +#define STR_BRIGHT "ColorBrightness" +#define STR_COLOR_ITEMS "Color|Screen|Rainbow" +#define STR_COLOR_COUNT 3 +#define STR_COLOR_DFLT 1 + +#define STR_RAINBOW_OFFSET "RainbowOffset" +#define STR_RAINBOW_DELTA "RainbowDelta" + + +#define STR_TOPIC2 "StarDetail" +#define STR_VER_LEN "VerticalLength" +#define STR_VER_ROT "VerticalRot" +#define STR_VER_OPACITY "verticalOpacity" +#define STR_HOR_LEN "HorizonLength" +#define STR_HOR_ROT "HorizonRot" +#define STR_HOR_OPACITY "HorizonOpacity" + +#define STR_DIA_LEN "DiagonalLength" +#define STR_DIA_ROT "DiagonalRot" +#define STR_DIA_ROT2 "Diagonal2Rot" +#define STR_DIA_OPACITY "DiagonalOpacity" + +#define STR_BLEND "Blemnd" +#define STR_BLEND_ITEMS "None|Screen|Add|Normal" +#define STR_BLEND_COUNT 4 +#define STR_BLEND_DFLT 1 + + + +//UIのパラメータ +typedef struct ParamInfo { + A_long target_kind; + PF_FpLong target_border; + PF_FpLong target_softness; + PF_Pixel target_color; + PF_Boolean target_maskDraw; + + PF_FpLong rot; + PF_Boolean autoRolling; + PF_FpLong rollingSpeed; + + PF_FpLong length; + PF_FpLong opacity; + PF_FpLong brigthness; + + A_long color_kind; + PF_Pixel color; + PF_FpLong rainbowOffset; + PF_FpLong rainbowDelta; + + A_long verLength; + PF_FpLong verRot; + PF_FpLong verOpacity; + A_long horLength; + PF_FpLong horRot; + PF_FpLong horOpacity; + A_long diaLength; + PF_FpLong diaRot; + PF_FpLong diaRot2; + PF_FpLong diaOpacity; + + A_long blend; + +} ParamInfo, *ParamInfoP, **ParamInfoH; + + +typedef struct StarInfo { + + A_long len; + PF_FpLong addX; + PF_FpLong addY; + PF_FpLong opa; + PF_FpLong rot; + +}StarInfo; + + + +typedef struct ParamInfo8 { + ParamInfo info; + LABA taget_lab; + PF_FpLong target_border; + PF_FpLong target_softness; + PF_FpLong target_start; + + StarInfo hor; + StarInfo ver; + StarInfo dia; + StarInfo dia2; + PF_FpLong rot; + + PF_Pixel color; + + GInfo gin; + GInfo gout; + GInfo gtmp; + + PF_Handle bufH; + //A_u_char *scanline; + PF_Pixel *horTable; + PF_Pixel *verTable; + PF_Pixel *diaTable; + +} ParamInfo8, *ParamInfo8P, **ParamInfo8H; + +typedef struct ParamInfo16 { + ParamInfo info; + LABA taget_lab; + PF_FpLong target_border; + PF_FpLong target_softness; + PF_FpLong target_start; + + StarInfo hor; + StarInfo ver; + StarInfo dia; + StarInfo dia2; + PF_FpLong rot; + + PF_Pixel16 color; + + GInfo gin; + GInfo gout; + GInfo gtmp; + + PF_Handle bufH; + //A_u_char *scanline; + PF_Pixel16 *horTable; + PF_Pixel16 *verTable; + PF_Pixel16 *diaTable; + +} ParamInfo16, *ParamInfo16P, **ParamInfo16H; + +typedef struct ParamInfo32 { + ParamInfo info; + LABA taget_lab; + PF_FpLong target_border; + PF_FpLong target_softness; + PF_FpLong target_start; + + StarInfo hor; + StarInfo ver; + StarInfo dia; + StarInfo dia2; + PF_FpLong rot; + + PF_PixelFloat color; + + GInfo gin; + GInfo gout; + GInfo gtmp; + + PF_Handle bufH; + PF_PixelFloat *horTable; + PF_PixelFloat *verTable; + PF_PixelFloat *diaTable; + +} ParamInfo32, *ParamInfo32P, **ParamInfo32H; + +//------------------------------------------------------- +PF_Err StarExec8(CFsAE *ae, ParamInfo *infoP); +PF_Err StarExec16(CFsAE *ae, ParamInfo *infoP); +PF_Err StarExec32(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 // Star_Colorful_H diff --git a/Star_Colorful/Star_ColorfulPiPL.r b/Star_Colorful/Star_ColorfulPiPL.r new file mode 100644 index 0000000..98b2313 --- /dev/null +++ b/Star_Colorful/Star_ColorfulPiPL.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/Star_Colorful/Star_ColorfulSub16.cpp b/Star_Colorful/Star_ColorfulSub16.cpp new file mode 100644 index 0000000..2405242 --- /dev/null +++ b/Star_Colorful/Star_ColorfulSub16.cpp @@ -0,0 +1,1243 @@ +#include "Star_Colorful.h" + + + +//------------------------------------------------------------------------------------------------- +//画像の色を獲得 +inline PF_Pixel16 GetPX(GInfo *gi, A_long x, A_long y) +{ + PF_Pixel16 *data = (PF_Pixel16 *)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]; + +} + +//------------------------------------------------------------------------------------------------- +//スクリーン合成の基本部分 +inline A_u_short scr(A_u_short s, A_u_short d) +{ + A_long v = (A_long)d + (A_long)s - (A_long)s * (A_long)d / PF_MAX_CHAN16; + if (v < 0) v = 0; else if (v > PF_MAX_CHAN16) v = PF_MAX_CHAN16; + return (A_u_short)v; +} +//------------------------------------------------------------------------------------------------- +// ピクセルのスクリーン合成 +inline void AddPxL(GInfo *gi, A_long xL, A_long yL, PF_Pixel16 p) +{ + if ((xL < 0) || (xL >= gi->width) || (yL < 0) || (yL >= gi->height)) { + return; + } + + PF_Pixel16 *data = (PF_Pixel16 *)gi->data; + + A_long pos = xL + yL*gi->widthTrue; + data[pos].red = scr(data[pos].red ,p.red); + data[pos].green = scr(data[pos].green ,p.green); + data[pos].blue = scr(data[pos].blue, p.blue); + data[pos].alpha = scr(data[pos].alpha , p.alpha); + +} +//------------------------------------------------------------------------------------------------- +// ピクセルの濃度調整 +inline PF_Pixel16 PxPer(PF_Pixel16 p, PF_FpLong per) +{ + PF_Pixel16 r; + r.red = RoundShortFpLong( (PF_FpLong)p.red * per); + r.green = RoundShortFpLong((PF_FpLong)p.green * per); + r.blue = RoundShortFpLong((PF_FpLong)p.blue * per); + r.alpha = RoundShortFpLong((PF_FpLong)p.alpha * per); + return r; +} +//------------------------------------------------------------------------------------------------- +//小数点対応のスクリーン合成 +inline void AddPxD(GInfo *gi, PF_Pixel16 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; + + AddPxL(gi, x0, y0, PxPer(p, ax0 * ay0)); + AddPxL(gi, x0, y1, PxPer(p, ax0 * ay1)); + AddPxL(gi, x1, y0, PxPer(p, ax1 * ay0)); + AddPxL(gi, x1, y1, PxPer(p, ax1 * ay1)); + +} +//------------------------------------------------------------------------------------------------- +static PF_Err +BlendScreen( + refconType refcon, + A_long xL, + A_long yL, + PF_Pixel16 *inP, + PF_Pixel16 *outP) +{ + PF_Err err = PF_Err_NONE; + + outP->alpha = scr(outP->alpha, inP->alpha); + + PF_FpLong a = (PF_FpLong)inP->alpha/PF_MAX_CHAN16; + + outP->red = scr(outP->red, (A_u_short)((PF_FpLong)inP->red*a)); + outP->green = scr(outP->green, (A_u_short)((PF_FpLong)inP->green*a)); + outP->blue = scr(outP->blue, (A_u_short)((PF_FpLong)inP->blue*a)); + + return err; + +} +//------------------------------------------------------------------------------------------------- +static PF_Err +BlendAdd( + refconType refcon, + A_long xL, + A_long yL, + PF_Pixel16 *inP, + PF_Pixel16 *outP) +{ + PF_Err err = PF_Err_NONE; + + outP->alpha = scr(outP->alpha, inP->alpha); + + PF_FpLong a = (PF_FpLong)inP->alpha / PF_MAX_CHAN16; + + outP->red = RoundShort((A_long)outP->red + (A_long)((PF_FpLong)inP->red*a)); + outP->green = RoundShort((A_long)outP->green + (A_long)((PF_FpLong)inP->green*a)); + outP->blue = RoundShort((A_long)outP->blue + (A_long)((PF_FpLong)inP->blue*a)); + + return err; + +} +//------------------------------------------------------------------------------------------------- +static PF_Err +BlendNormal( + refconType refcon, + A_long xL, + A_long yL, + PF_Pixel16 *inP, + PF_Pixel16 *outP) +{ + PF_Err err = PF_Err_NONE; + + PF_FpLong ar = 1 - (PF_FpLong)outP->alpha/ PF_MAX_CHAN16; + outP->alpha = scr(outP->alpha, inP->alpha); + + PF_FpLong a = (PF_FpLong)inP->alpha / PF_MAX_CHAN16; + PF_FpLong r, g, b; + r = ((PF_FpLong)inP->red*a)*ar; + g = ((PF_FpLong)inP->green*a)*ar; + b = ((PF_FpLong)inP->blue*a)*ar; + + outP->red = RoundShortFpLong((PF_FpLong)outP->red + r ); + outP->green = RoundShortFpLong((PF_FpLong)outP->green + g); + outP->blue = RoundShortFpLong((PF_FpLong)outP->blue + b); + + return err; + +} +//------------------------------------------------------------------------------------------------- +static PF_Err +TargetPixel( + 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); + + + PF_Pixel16 c = { PF_MAX_CHAN16,PF_MAX_CHAN16, PF_MAX_CHAN16, PF_MAX_CHAN16 }; + PF_FpShort r, g, b, a; + PF_FpLong v = 0; + a = (PF_FpShort)inP->alpha / PF_MAX_CHAN16; + r = (PF_FpShort)inP->red * a / PF_MAX_CHAN16; + g = (PF_FpShort)inP->green * a / PF_MAX_CHAN16; + b = (PF_FpShort)inP->blue * a / PF_MAX_CHAN16; + + + PF_InData *in_data = infoP->gout.in_data; + PF_PixelFloat pf; + + switch (infoP->info.target_kind) + { + case 2: + v = (r + g + b) / 3; + break; + case 3: + v = (0.29891 * r) + (0.58661 * g) + (0.11448 * b); + break; + case 4: + pf.red = r; + pf.green = g; + pf.blue = b; + pf.alpha = a; + + LABA lab = RgbToLab(pf); + //色の距離測定 + v = 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) + ); + break; + case 1: + default: + v = MAX(MAX(r, g), b); + break; + } + //------------ + if (infoP->target_softness == 0) { + if (v >= infoP->target_border) { + v = 1.0; + } + else { + v = 0; + } + } + else { + if (v <= infoP->target_start) { + v = 0; + } + else if (v >= infoP->target_border) { + v = 1.0; + } + else { + v = (v - infoP->target_start) / (infoP->target_softness); + } + + } + + a = (PF_FpShort)v; + if (a < 0)a = 0; else if (a > 1) a = 1; + + c.alpha = RoundShort((A_long)(a*PF_MAX_CHAN16 + 0.5)); + + c.red = RoundShort((A_long)((double)inP->red * a+0.5)); + c.green = RoundShort((A_long)((double)inP->green * a + 0.5)); + c.blue = RoundShort((A_long)((double)inP->blue * a + 0.5)); + + + *outP = c; + + return err; +} + +//------------------------------------------------------------------------------------------------- +static PF_Err +CopyAtoTemp(ParamInfo16 *infoP) +{ + PF_Err err = PF_Err_NONE; + + PF_Pixel16 * dataO = (PF_Pixel16 *)infoP->gout.data; + PF_Pixel16 * dataT = (PF_Pixel16 *)infoP->gtmp.data; + + A_long horO = 0; + A_long horT = 0; + for (A_long y = 0; y < infoP->gout.height; y++) + { + horO = y * infoP->gout.widthTrue; + horT = y * infoP->gtmp.widthTrue; + for (A_long x = 0; x < infoP->gout.width; x++) + { + A_u_short a = dataO[x + horO].alpha; + dataT[x + horT].alpha = PF_MAX_CHAN16; + dataT[x + horT].red = a; + dataT[x + horT].green = a; + dataT[x + horT].blue = a; + } + } + + + return err; +} +//------------------------------------------------------------------------------------------------- +static PF_Err +TempRev(ParamInfo16 *infoP) +{ + PF_Err err = PF_Err_NONE; + + GInfo gi = infoP->gtmp; + + PF_Pixel16 * data = (PF_Pixel16 *)gi.data; + + A_long hor = 0; + for (A_long y = 0; y < gi.height; y++) + { + for (A_long x = 0; x < gi.width; x++) + { + A_long pos = x + hor; + data[pos].red = PF_MAX_CHAN16 - data[pos].red; + data[pos].green = PF_MAX_CHAN16 - data[pos].green; + } + hor += gi.widthTrue; + } + + + return err; +} +//------------------------------------------------------------------------------------------------- + +//------------------------------------------------------------------------------------------------- +static PF_Err +TempSub(ParamInfo16 *infoP) +{ + PF_Err err = PF_Err_NONE; + GInfo gi = infoP->gtmp; + + PF_Pixel16 * data = (PF_Pixel16 *)gi.data; + + A_long hor = 0, pos = 0; + + for (A_long y = 0; y < gi.height; y++) + { + for (A_long x = 0; x < gi.width; x++) + { + pos = x + hor; + data[pos].green = PF_MAX_CHAN16 - data[pos].green; + data[pos].red = RoundShort(data[pos].blue - data[pos].green); + } + hor += gi.widthTrue; + } + + + return err; +} +//------------------------------------------------------------------------------------------------- +static PF_Err +MaxHor(ParamInfo16 *pi) +{ + PF_Err err = PF_Err_NONE; + + GInfo gi = pi->gtmp; + + PF_Pixel16 *data = (PF_Pixel16 *)gi.data; + A_long mx1 = 0; + A_long mx2 = 0; + + A_long org,pos; + A_long hor=0; + for (A_long y = 0; y < gi.height; y++) + { + for (A_long x = 0; x < gi.width; x++) + { + pos = x + hor; + org = data[pos].red; + mx1 = mx2 = 0; + if (x > 0) { + mx1 = data[pos -1].red; + } + if (x < gi.width-1) { + mx2 = data[pos + 1].red; + } + if (mx1 < mx2) { + mx1 = mx2; + } + if (org < mx1) { + org += mx1/2; + if (org > mx1) org = mx1; + data[pos].green = RoundShort(org); + } + + } + //redに戻す + for (A_long x = 0; x < gi.width; x++) + { + pos = x + hor; + data[pos].red = data[pos].green; + } + hor += gi.widthTrue; + } + + return err; +} +//------------------------------------------------------------------------------------------------- +//------------------------------------------------------------------------------------------------- +static PF_Err +MaxVer(ParamInfo16 *pi) +{ + PF_Err err = PF_Err_NONE; + + GInfo gi = pi->gtmp; + + PF_Pixel16 *data = (PF_Pixel16 *)gi.data; + A_long mx1 = 0; + A_long mx2 = 0; + + A_long org, pos; + A_long hor = 0; + for (A_long x = 0; x < gi.width; x++) + { + hor = 0; + for (A_long y = 0; y < gi.height; y++) + { + pos = x + hor; + org = data[pos].red; + mx1 = mx2 = 0; + if (y > 0) { + mx1 = data[pos - gi.widthTrue].red; + } + if (y < gi.height - 1) { + mx2 = data[pos + gi.widthTrue].red; + } + if (mx1 < mx2) { + mx1 = mx2; + } + if (org < mx1) { + org += mx1 / 2; + if (org > mx1) org = mx1; + data[pos].green = RoundShort(org); + } + hor += gi.widthTrue; + + } + //redに戻す + hor = 0; + for (A_long y = 0; y < gi.height; y++) + { + pos = x + hor; + data[pos].red = data[pos].green; + hor += gi.widthTrue; + } + } + return err; +} +//------------------------------------------------------------------------------------------------- +static void +MakePixelTable(PF_Pixel16 *tbl, A_long len, PF_Pixel16 col, PF_FpLong per, PF_FpLong br) +{ + + if ((len <= 0) || (per <= 0)) + { + return; + } + + + PF_FpLong p = per; + for (A_long i = 0; i < len; i++) + { + p = per * (1 - (PF_FpLong)i / (PF_FpLong)len)*0.5; + tbl[i] = PxPer(col, p); + } + + A_long len2 = len / 2; + if ((len2 <= 0) || (br <= 0)) return; + for (A_long i = 0; i < len2; i++) + { + A_long r, g, b; + r = PF_MAX_CHAN16 - tbl[i].red; + g = PF_MAX_CHAN16 - tbl[i].green; + b = PF_MAX_CHAN16 - tbl[i].blue; + + tbl[i].red = RoundShort(tbl[i].red + (A_long)((PF_FpLong)r * br * (len2 - i) / len2)); + tbl[i].green = RoundShort(tbl[i].green + (A_long)((PF_FpLong)g * br * (len2 - i) / len2)); + tbl[i].blue = RoundShort(tbl[i].blue + (A_long)((PF_FpLong)b * br * (len2 - i) / len2)); + + } + +} +//------------------------------------------------------------------------------------------------- +static PF_Err StarDrawColor(ParamInfo16 *pi) +{ + PF_Err err = PF_Err_NONE; + + GInfo gt = pi->gtmp; + GInfo go = pi->gout; + GInfo go2 = pi->gout; + GInfo go3 = pi->gout; + GInfo go4 = pi->gout; + + PF_Pixel16 *dataT = (PF_Pixel16 *)gt.data; + + MakePixelTable(pi->horTable, pi->hor.len, pi->color, pi->hor.opa, pi->info.brigthness); + MakePixelTable(pi->verTable, pi->ver.len, pi->color, pi->ver.opa, pi->info.brigthness); + MakePixelTable(pi->diaTable, pi->dia.len, pi->color, pi->dia.opa, pi->info.brigthness); + + + A_long posT = 0; + A_long lv = 0; + for (A_long y = 0; y < go.height; y++) + { + for (A_long x = 0; x < go.width; x++) + { + lv = dataT[posT].red; + posT++; + if (lv <= 0) continue; + + //垂直 + if ((pi->ver.len > 0) && (pi->ver.opa > 0)) + { + A_long vl = pi->ver.len * lv / PF_MAX_CHAN16; + if (vl > 0) + { + A_long d = pi->ver.len - vl; + go.xD = (PF_FpLong)x; + go.yD = (PF_FpLong)y; + go2.xD = (PF_FpLong)x; + go2.yD = (PF_FpLong)y; + for (A_long i = d; i < pi->ver.len; i++) + { + AddPxD(&go, pi->verTable[i]); + AddPxD(&go2, pi->verTable[i]); + go.xD += pi->ver.addX; + go.yD += pi->ver.addY; + go2.xD -= pi->ver.addX; + go2.yD -= pi->ver.addY; + } + } + + } + //水平 + if ((pi->hor.len > 0) && (pi->hor.opa > 0)) + { + A_long hl = pi->hor.len * lv / PF_MAX_CHAN16; + if (hl > 0) + { + A_long d = pi->hor.len - hl; + go.xD = (PF_FpLong)x; + go.yD = (PF_FpLong)y; + go2.xD = (PF_FpLong)x; + go2.yD = (PF_FpLong)y; + for (A_long i = d; i < pi->hor.len; i++) + { + AddPxD(&go, pi->horTable[i]); + AddPxD(&go2, pi->horTable[i]); + go.xD += pi->hor.addX; + go.yD += pi->hor.addY; + go2.xD -= pi->hor.addX; + go2.yD -= pi->hor.addY; + } + } + } + //斜め + if ((pi->dia.len > 0) && (pi->dia.opa > 0)) + { + A_long dl = pi->dia.len * lv / PF_MAX_CHAN16; + if (dl > 0) + { + A_long d = pi->dia.len - dl; + go.xD = (PF_FpLong)x; + go.yD = (PF_FpLong)y; + go2.xD = (PF_FpLong)x; + go2.yD = (PF_FpLong)y; + go3.xD = (PF_FpLong)x; + go3.yD = (PF_FpLong)y; + go4.xD = (PF_FpLong)x; + go4.yD = (PF_FpLong)y; + for (A_long i = d; i < pi->dia.len; i++) + { + AddPxD(&go, pi->diaTable[i]); + AddPxD(&go2, pi->diaTable[i]); + AddPxD(&go3, pi->diaTable[i]); + AddPxD(&go4, pi->diaTable[i]); + go.xD += pi->dia.addX; + go.yD += pi->dia.addY; + go2.xD -= pi->dia.addX; + go2.yD -= pi->dia.addY; + go3.xD += pi->dia2.addX; + go3.yD += pi->dia2.addY; + go4.xD -= pi->dia2.addX; + go4.yD -= pi->dia2.addY; + } + } + } + + } + posT += gt.offsetWidth; + } + + return err; +} +//------------------------------------------------------------------------------------------------- +static PF_Err CenterDraw(ParamInfo16 *pi) +{ + PF_Err err = PF_Err_NONE; + + GInfo gt = pi->gtmp; + GInfo go = pi->gout; + + PF_Pixel16 *dataO = (PF_Pixel16 *)go.data; + PF_Pixel16 *dataT = (PF_Pixel16 *)gt.data; + + + A_long posO = 0; + A_long posT = 0; + A_long lv = 0; + + PF_FpLong r = pi->color.red; + PF_FpLong g = pi->color.green; + PF_FpLong b = pi->color.blue; + r = (r + (PF_MAX_CHAN16 - r)*pi->info.brigthness); + g = (g + (PF_MAX_CHAN16 - g)*pi->info.brigthness); + b = (b + (PF_MAX_CHAN16 - b)*pi->info.brigthness); + for (A_long y = 0; y < go.height; y++) + { + for (A_long x = 0; x < go.width; x++) + { + PF_FpLong v = (PF_FpLong)dataT[posT].green / PF_MAX_CHAN16; + dataO[posO].red = RoundShortFpLong(dataO[posO].red + r * v); + dataO[posO].green = RoundShortFpLong(dataO[posO].green + g * v); + dataO[posO].blue = RoundShortFpLong(dataO[posO].blue + b * v); + dataO[posO].alpha = RoundShortFpLong( (A_long)dataO[posO].alpha + (A_long)dataT[posT].green); + + posO++; + posT++; + + } + posT += gt.offsetWidth; + posO += go.offsetWidth; + } + + return err; +} +//------------------------------------------------------------------------------------------------- +static PF_Err blur(ParamInfo16 *pi) +{ + PF_Err err = PF_Err_NONE; + + GInfo go = pi->gout; + + PF_Pixel16 *data = (PF_Pixel16 *)go.data; + + A_long pos = 0; + A_long lv = 0; + for (A_long y = 0; y < go.height; y++) + { + for (A_long x = 0; x < go.width; x++) + { + PF_FpLong r = 0, g = 0, b = 0, a = 0; + PF_Pixel16 c; + c = GetPX(&go, x - 1, y - 1); + r += (PF_FpLong)c.red /32; + g += (PF_FpLong)c.green/32; + b += (PF_FpLong)c.blue / 32; + a += (PF_FpLong)c.alpha / 32; + + c = GetPX(&go, x, y - 1); + r += (PF_FpLong)c.red / 8; + g += (PF_FpLong)c.green / 8; + b += (PF_FpLong)c.blue / 8; + a += (PF_FpLong)c.alpha / 8; + + c = GetPX(&go, x+1, y - 1); + r += (PF_FpLong)c.red / 32; + g += (PF_FpLong)c.green / 32; + b += (PF_FpLong)c.blue / 32; + a += (PF_FpLong)c.alpha / 32; + + c = GetPX(&go, x - 1, y); + r += (PF_FpLong)c.red / 8; + g += (PF_FpLong)c.green / 8; + b += (PF_FpLong)c.blue / 8; + a += (PF_FpLong)c.alpha / 8; + + //c = GetPX(&go, x, y); + c = data[pos]; + r += (PF_FpLong)c.red * 4 / 8; + g += (PF_FpLong)c.green * 4 / 8; + b += (PF_FpLong)c.blue * 4 / 8; + a += (PF_FpLong)c.alpha * 4 / 8; + /*r += (PF_FpLong)c.red * 3 / 8; + g += (PF_FpLong)c.green * 3 / 8; + b += (PF_FpLong)c.blue * 3 / 8; + a += (PF_FpLong)c.alpha * 3 / 8;*/ + + c = GetPX(&go, x+1, y); + r += (PF_FpLong)c.red / 8; + g += (PF_FpLong)c.green / 8; + b += (PF_FpLong)c.blue / 8; + a += (PF_FpLong)c.alpha / 8; + + c = GetPX(&go, x - 1, y+1); + r += (PF_FpLong)c.red / 32; + g += (PF_FpLong)c.green / 32; + b += (PF_FpLong)c.blue / 32; + a += (PF_FpLong)c.alpha / 32; + + c = GetPX(&go, x - 0, y + 1); + r += (PF_FpLong)c.red / 8; + g += (PF_FpLong)c.green / 8; + b += (PF_FpLong)c.blue / 8; + a += (PF_FpLong)c.alpha / 8; + + c = GetPX(&go, x + 1, y + 1); + r += (PF_FpLong)c.red / 32; + g += (PF_FpLong)c.green / 32; + b += (PF_FpLong)c.blue / 32; + a += (PF_FpLong)c.alpha / 32; + + c.red = RoundShortFpLong(r); + c.green = RoundShortFpLong(g); + c.blue = RoundShortFpLong(b); + c.alpha = RoundShortFpLong(a); + + data[pos] = c; + pos++; + + } + pos += go.offsetWidth; + } + + return err; +} +//------------------------------------------------------------------------------------------------- +static PF_Err blurTempRed(ParamInfo16 *pi) +{ +#define DEC1 16 +#define DEC2 32 + PF_Err err = PF_Err_NONE; + + GInfo gt = pi->gtmp; + + PF_Pixel16 *data = (PF_Pixel16 *)gt.data; + + A_long pos = 0; + A_long lv = 0; + for (A_long y = 0; y < gt.height; y++) + { + for (A_long x = 0; x < gt.width; x++) + { + PF_FpLong r = 0; + PF_Pixel16 c; + c = GetPX(>, x - 1, y - 1); + r += (PF_FpLong)c.red / DEC2; + + c = GetPX(>, x, y - 1); + r += (PF_FpLong)c.red / DEC1; + + c = GetPX(>, x + 1, y - 1); + r += (PF_FpLong)c.red / DEC2; + + c = GetPX(>, x - 1, y); + r += (PF_FpLong)c.red / DEC1; + + //c = GetPX(&go, x, y); + c = data[pos]; + r += (PF_FpLong)c.red*2/3; + + c = GetPX(>, x + 1, y); + r += (PF_FpLong)c.red / DEC1; + + c = GetPX(>, x - 1, y + 1); + r += (PF_FpLong)c.red / DEC2; + + c = GetPX(>, x - 0, y + 1); + r += (PF_FpLong)c.red / DEC1; + + c = GetPX(>, x + 1, y + 1); + r += (PF_FpLong)c.red / DEC2; + + + data[pos].red = RoundShortFpLong(r); + pos++; + + } + pos += gt.offsetWidth; + } + + return err; +} +//------------------------------------------------------------------------------------------------- +static PF_Err ScreenTemp(ParamInfo16 *pi) +{ + PF_Err err = PF_Err_NONE; + + GInfo gi = pi->gin; + GInfo gt = pi->gtmp; + + PF_Pixel16 *dataI = (PF_Pixel16 *)gi.data; + PF_Pixel16 *dataT = (PF_Pixel16 *)gt.data; + + A_long posI = 0; + A_long posT = 0; + for (A_long y = 0; y < gt.height; y++) + { + for (A_long x = 0; x < gt.width; x++) + { + PF_Pixel16 pt = dataT[posT]; + + dataT[posT] = dataI[posI]; + dataT[posT].alpha = pt.red; + posI++; + posT++; + + } + posI += gi.offsetWidth; + posT += gt.offsetWidth; + } + + + return err; +} +//------------------------------------------------------------------------------------------------- +static PF_Err StarDrawScreen(ParamInfo16 *pi) +{ + PF_Err err = PF_Err_NONE; + + GInfo gt = pi->gtmp; + GInfo go = pi->gout; + GInfo go2 = pi->gout; + GInfo go3 = pi->gout; + GInfo go4 = pi->gout; + + PF_Pixel16 *dataT = (PF_Pixel16 *)gt.data; + + + + A_long posT = 0; + A_long lv = 0; + PF_FpLong lvb = 0; + for (A_long y = 0; y < go.height; y++) + { + for (A_long x = 0; x < go.width; x++) + { + PF_Pixel16 c = dataT[posT]; + lv = c.alpha; + lvb = (PF_FpLong)c.alpha / PF_MAX_CHAN16; + posT++; + if (lv <= 0) continue; + + //垂直 + if ((pi->ver.len > 0) && (pi->ver.opa > 0)) + { + A_long vl = pi->ver.len * lv / PF_MAX_CHAN16; + if (vl > 0) + { + MakePixelTable(pi->verTable, + pi->ver.len, + c, + pi->ver.opa*lvb, + pi->info.brigthness); + A_long d = pi->ver.len - vl; + go.xD = (PF_FpLong)x; + go.yD = (PF_FpLong)y; + go2.xD = (PF_FpLong)x; + go2.yD = (PF_FpLong)y; + for (A_long i = d; i < pi->ver.len; i++) + { + AddPxD(&go, pi->verTable[i]); + AddPxD(&go2, pi->verTable[i]); + go.xD += pi->ver.addX; + go.yD += pi->ver.addY; + go2.xD -= pi->ver.addX; + go2.yD -= pi->ver.addY; + } + } + + } + //水平 + if ((pi->hor.len > 0) && (pi->hor.opa > 0)) + { + A_long hl = pi->hor.len * lv / PF_MAX_CHAN16; + if (hl > 0) + { + MakePixelTable(pi->horTable, + pi->hor.len, + c, + pi->hor.opa*lvb, + pi->info.brigthness); + A_long d = pi->hor.len - hl; + go.xD = (PF_FpLong)x; + go.yD = (PF_FpLong)y; + go2.xD = (PF_FpLong)x; + go2.yD = (PF_FpLong)y; + for (A_long i = d; i < pi->hor.len; i++) + { + AddPxD(&go, pi->horTable[i]); + AddPxD(&go2, pi->horTable[i]); + go.xD += pi->hor.addX; + go.yD += pi->hor.addY; + go2.xD -= pi->hor.addX; + go2.yD -= pi->hor.addY; + } + } + } + //斜め + if ((pi->dia.len > 0) && (pi->dia.opa > 0)) + { + A_long dl = pi->dia.len * lv / PF_MAX_CHAN16; + if (dl > 0) + { + MakePixelTable(pi->diaTable, + pi->dia.len, + c, + pi->dia.opa*lvb, + pi->info.brigthness); + A_long d = pi->dia.len - dl; + go.xD = (PF_FpLong)x; + go.yD = (PF_FpLong)y; + go2.xD = (PF_FpLong)x; + go2.yD = (PF_FpLong)y; + go3.xD = (PF_FpLong)x; + go3.yD = (PF_FpLong)y; + go4.xD = (PF_FpLong)x; + go4.yD = (PF_FpLong)y; + for (A_long i = d; i < pi->dia.len; i++) + { + AddPxD(&go, pi->diaTable[i]); + AddPxD(&go2, pi->diaTable[i]); + AddPxD(&go3, pi->diaTable[i]); + AddPxD(&go4, pi->diaTable[i]); + go.xD += pi->dia.addX; + go.yD += pi->dia.addY; + go2.xD -= pi->dia.addX; + go2.yD -= pi->dia.addY; + go3.xD += pi->dia2.addX; + go3.yD += pi->dia2.addY; + go4.xD -= pi->dia2.addX; + go4.yD -= pi->dia2.addY; + } + } + } + + } + posT += gt.offsetWidth; + } + + return err; +} +//------------------------------------------------------------------------------------------------- +static void +MakeRainbowTable(PF_Pixel16 *tbl, A_long len,PF_FpLong ro, PF_FpLong rd, PF_FpLong per, PF_FpLong br) +{ + + if ((len <= 0) || (per <= 0)) + { + return; + } + + + PF_FpLong p = per; + HLSA hls; + for (A_long i = 0; i < len; i++) + { + p = per * (1 - (PF_FpLong)i / (PF_FpLong)len)*0.5; + A_long v = (A_long)((ro - rd * i) * 65536); + v %= 65536; + if (v < 0) v += 65536; + hls.H = (PF_FpLong)v/65536; + hls.S = 1; + hls.L = 0.5; + hls.A = 1.0; + PF_Pixel16 c = CONV32TO16(HLStoRGB(hls)); + tbl[i] = PxPer(c, p); + } + + A_long len2 = len / 2; + if ((len2 <= 0) || (br <= 0)) return; + for (A_long i = 0; i < len2; i++) + { + A_long r, g, b; + r = PF_MAX_CHAN16 - tbl[i].red; + g = PF_MAX_CHAN16 - tbl[i].green; + b = PF_MAX_CHAN16 - tbl[i].blue; + + tbl[i].red = RoundShort(tbl[i].red + (A_long)((PF_FpLong)r * br * (len2 - i) / len2)); + tbl[i].green = RoundShort(tbl[i].green + (A_long)((PF_FpLong)g * br * (len2 - i) / len2)); + tbl[i].blue = RoundShort(tbl[i].blue + (A_long)((PF_FpLong)b * br * (len2 - i) / len2)); + + } + +} +//------------------------------------------------------------------------------------------------- +static PF_Err StarDrawRainbow(ParamInfo16 *pi) +{ + PF_Err err = PF_Err_NONE; + + GInfo gt = pi->gtmp; + GInfo go = pi->gout; + GInfo go2 = pi->gout; + GInfo go3 = pi->gout; + GInfo go4 = pi->gout; + + PF_Pixel16 *dataT = (PF_Pixel16 *)gt.data; + + MakeRainbowTable(pi->verTable, pi->ver.len, pi->info.rainbowOffset, pi->info.rainbowDelta, pi->ver.opa, pi->info.brigthness); + MakeRainbowTable(pi->horTable, pi->hor.len, pi->info.rainbowOffset, pi->info.rainbowDelta, pi->hor.opa, pi->info.brigthness); + MakeRainbowTable(pi->diaTable, pi->dia.len, pi->info.rainbowOffset, pi->info.rainbowDelta, pi->dia.opa, pi->info.brigthness); + + + A_long posT = 0; + A_long lv = 0; + for (A_long y = 0; y < go.height; y++) + { + for (A_long x = 0; x < go.width; x++) + { + lv = dataT[posT].red; + posT++; + if (lv <= 0) continue; + + //垂直 + if ((pi->ver.len > 0) && (pi->ver.opa > 0)) + { + A_long vl = pi->ver.len * lv / PF_MAX_CHAN16; + if (vl > 0) + { + A_long d = pi->ver.len - vl; + go.xD = (PF_FpLong)x; + go.yD = (PF_FpLong)y; + go2.xD = (PF_FpLong)x; + go2.yD = (PF_FpLong)y; + for (A_long i = d; i < pi->ver.len; i++) + { + AddPxD(&go, pi->verTable[i]); + AddPxD(&go2, pi->verTable[i]); + go.xD += pi->ver.addX; + go.yD += pi->ver.addY; + go2.xD -= pi->ver.addX; + go2.yD -= pi->ver.addY; + } + } + + } + //水平 + if ((pi->hor.len > 0) && (pi->hor.opa > 0)) + { + A_long hl = pi->hor.len * lv / PF_MAX_CHAN16; + if (hl > 0) + { + A_long d = pi->hor.len - hl; + go.xD = (PF_FpLong)x; + go.yD = (PF_FpLong)y; + go2.xD = (PF_FpLong)x; + go2.yD = (PF_FpLong)y; + for (A_long i = d; i < pi->hor.len; i++) + { + AddPxD(&go, pi->horTable[i]); + AddPxD(&go2, pi->horTable[i]); + go.xD += pi->hor.addX; + go.yD += pi->hor.addY; + go2.xD -= pi->hor.addX; + go2.yD -= pi->hor.addY; + } + } + } + //斜め + if ((pi->dia.len > 0) && (pi->dia.opa > 0)) + { + A_long dl = pi->dia.len * lv / PF_MAX_CHAN16; + if (dl > 0) + { + A_long d = pi->dia.len - dl; + go.xD = (PF_FpLong)x; + go.yD = (PF_FpLong)y; + go2.xD = (PF_FpLong)x; + go2.yD = (PF_FpLong)y; + go3.xD = (PF_FpLong)x; + go3.yD = (PF_FpLong)y; + go4.xD = (PF_FpLong)x; + go4.yD = (PF_FpLong)y; + for (A_long i = d; i < pi->dia.len; i++) + { + AddPxD(&go, pi->diaTable[i]); + AddPxD(&go2, pi->diaTable[i]); + AddPxD(&go3, pi->diaTable[i]); + AddPxD(&go4, pi->diaTable[i]); + go.xD += pi->dia.addX; + go.yD += pi->dia.addY; + go2.xD -= pi->dia.addX; + go2.yD -= pi->dia.addY; + go3.xD += pi->dia2.addX; + go3.yD += pi->dia2.addY; + go4.xD -= pi->dia2.addX; + go4.yD -= pi->dia2.addY; + } + } + } + + } + posT += gt.offsetWidth; + } + + return err; +} +//------------------------------------------------------------------------------------------------- +static PF_Err ToParam(CFsAE *ae, ParamInfo *infoP, ParamInfo16 *pi) +{ + PF_Err err = PF_Err_NONE; + + + ae->in->ToGInfo(&pi->gin); + ae->out->ToGInfo(&pi->gout); + ae->tmp->ToGInfo(&pi->gtmp); + + pi->info = *infoP; + + pi->color = CONV8TO16(infoP->color); + + PF_PixelFloat pf = CONV8TO32(pi->info.target_color); + pi->taget_lab = RgbToLab(pf); + + pi->target_border = infoP->target_border; + pi->target_softness =infoP->target_softness; + 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->hor.len = (A_long)((double)pi->info.horLength * pi->info.length + 0.5); + pi->ver.len = (A_long)((double)pi->info.verLength * pi->info.length + 0.5); + pi->dia.len = (A_long)((double)pi->info.diaLength * pi->info.length + 0.5); + pi->dia2.len = pi->dia.len; + + pi->hor.opa = pi->info.horOpacity * pi->info.opacity; + pi->ver.opa = pi->info.verOpacity * pi->info.opacity; + pi->dia.opa = pi->info.diaOpacity * pi->info.opacity; + pi->dia2.opa = pi->dia.opa; + + pi->rot = pi->info.rot; + if ((pi->info.autoRolling == TRUE) && (pi->info.rollingSpeed != 0)) + { + double time = ((double)ae->in_data->current_time / (double)ae->in_data->time_scale); + pi->rot += (pi->info.rollingSpeed*time); + + + } + + pi->hor.rot = pi->rot + pi->info.horRot; + pi->ver.rot = pi->rot + pi->info.verRot; + pi->dia.rot = pi->rot + pi->info.diaRot; + pi->dia2.rot = pi->rot + pi->info.diaRot2; + + pi->hor.rot = CRot::RoundRot(pi->hor.rot); + pi->ver.rot = CRot::RoundRot(pi->ver.rot); + pi->dia.rot = CRot::RoundRot(pi->dia.rot); + pi->dia2.rot = CRot::RoundRot(pi->dia2.rot); + + + CRot rot(ae->in_data); + if (pi->hor.len > 0) { + rot.SetRotLength(pi->hor.rot, pi->hor.len); + pi->hor.addX = rot.x() / pi->hor.len; + pi->hor.addY = rot.y() / pi->hor.len; + } + else + { + pi->hor.addX = 0; + pi->hor.addY = 0; + + } + + if (pi->ver.len > 0) { + rot.SetRotLength(pi->ver.rot, pi->ver.len); + pi->ver.addX = rot.x() / pi->ver.len; + pi->ver.addY = rot.y() / pi->ver.len; + } + else { + pi->ver.addX = 0; + pi->ver.addY = 0; + } + if (pi->dia.len > 0) { + rot.SetRotLength(pi->dia.rot, pi->dia.len); + pi->dia.addX = rot.x() / pi->dia.len; + pi->dia.addY = rot.y() / pi->dia.len; + + rot.SetRotLength(pi->dia2.rot, pi->dia2.len); + pi->dia2.addX = rot.x() / pi->dia2.len; + pi->dia2.addY = rot.y() / pi->dia2.len; + } + else { + pi->dia.addX = 0; + pi->dia.addY = 0; + } + + return err; +} +//------------------------------------------------------------------------------------------------- +PF_Err StarExec16(CFsAE *ae, ParamInfo *infoP) +{ + PF_Err err = PF_Err_NONE; + + if (ae->out->Enabled() == FALSE) + { + return PF_Err_INVALID_CALLBACK; + } + ae->NewTmpWorld(); + ParamInfo16 pi; + + ToParam(ae, infoP, &pi); + pi.bufH = ae->NewHandle( (pi.hor.len + pi.ver.len + pi.dia.len)* sizeof(PF_Pixel16)+ 1024); + if (pi.bufH == NULL) { + err = PF_Err_OUT_OF_MEMORY; + return err; + } + pi.horTable = *(PF_Pixel16**)(pi.bufH); + pi.verTable = (pi.horTable + pi.hor.len); + pi.diaTable = (pi.verTable + pi.ver.len); + //ターゲットエリア + ERR(ae->iterate16((refconType)&pi, TargetPixel)); + ae->out->SetMatMode(MAT::blackMat); + if (pi.info.target_maskDraw==TRUE) { + ae->out->fromBlackMat16(); + return err; + } + else { + + CopyAtoTemp(&pi); + TempRev(&pi); + for (A_long i = 0; i < 3; i++) { + ERR(MaxHor( &pi)); + ERR(MaxVer( &pi)); + } + TempSub(&pi); + blurTempRed(&pi); + + switch (pi.info.color_kind) + { + case 3: + ae->out->clear(); + StarDrawRainbow(&pi); + break; + case 2: + ScreenTemp(&pi); + StarDrawScreen(&pi); + break; + case 1: + default: + ae->out->clear(); + StarDrawColor(&pi); + CenterDraw(&pi); + break; + } + blur(&pi); + switch (pi.info.blend) + { + case 4: + ERR(ae->iterate16((refconType)&pi, BlendNormal)); + break; + case 3: + ERR(ae->iterate16((refconType)&pi, BlendAdd)); + break; + case 2: + ERR(ae->iterate16((refconType)&pi, BlendScreen)); + break; + case 1: + default: + break; + } + + ae->out->fromBlackMat16(); + + } + + if (pi.bufH != NULL) { + ae->DisposeHandle(pi.bufH); + pi.bufH = NULL; + } + + return err; + +} \ No newline at end of file diff --git a/Star_Colorful/Star_ColorfulSub32.cpp b/Star_Colorful/Star_ColorfulSub32.cpp new file mode 100644 index 0000000..416b8ae --- /dev/null +++ b/Star_Colorful/Star_ColorfulSub32.cpp @@ -0,0 +1,1246 @@ +#include "Star_Colorful.h" + + + +//------------------------------------------------------------------------------------------------- +//画像の色を獲得 +inline PF_PixelFloat GetPX(GInfo *gi, A_long x, A_long y) +{ + PF_PixelFloat *data = (PF_PixelFloat *)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]; + +} + +//------------------------------------------------------------------------------------------------- +//スクリーン合成の基本部分 +inline PF_FpShort scr(PF_FpShort s, PF_FpShort d) +{ + PF_FpShort v = d + s - s * d; + if (v < 0) v = 0; else if (v > 1) v = 1; + return (PF_FpShort)v; +} +//------------------------------------------------------------------------------------------------- +// ピクセルのスクリーン合成 +inline void AddPxL(GInfo *gi, A_long xL, A_long yL, PF_PixelFloat p) +{ + if ((xL < 0) || (xL >= gi->width) || (yL < 0) || (yL >= gi->height)) { + return; + } + + PF_PixelFloat *data = (PF_PixelFloat *)gi->data; + + A_long pos = xL + yL*gi->widthTrue; + data[pos].red = scr(data[pos].red ,p.red); + data[pos].green = scr(data[pos].green ,p.green); + data[pos].blue = scr(data[pos].blue, p.blue); + data[pos].alpha = scr(data[pos].alpha , p.alpha); + +} +//------------------------------------------------------------------------------------------------- +// ピクセルの濃度調整 +inline PF_PixelFloat PxPer(PF_PixelFloat p, PF_FpLong per) +{ + PF_PixelFloat r; + r.red = RoundFpShortDouble( (PF_FpLong)p.red * per); + r.green = RoundFpShortDouble((PF_FpLong)p.green * per); + r.blue = RoundFpShortDouble((PF_FpLong)p.blue * per); + r.alpha = RoundFpShortDouble((PF_FpLong)p.alpha * per); + return r; +} +//------------------------------------------------------------------------------------------------- +//小数点対応のスクリーン合成 +inline void AddPxD(GInfo *gi, PF_PixelFloat 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; + + AddPxL(gi, x0, y0, PxPer(p, ax0 * ay0)); + AddPxL(gi, x0, y1, PxPer(p, ax0 * ay1)); + AddPxL(gi, x1, y0, PxPer(p, ax1 * ay0)); + AddPxL(gi, x1, y1, PxPer(p, ax1 * ay1)); + +} +//------------------------------------------------------------------------------------------------- +static PF_Err +BlendScreen( + refconType refcon, + A_long xL, + A_long yL, + PF_PixelFloat *inP, + PF_PixelFloat *outP) +{ + PF_Err err = PF_Err_NONE; + + outP->alpha = scr(outP->alpha, inP->alpha); + + PF_FpLong a = RoundFpShort2(inP->alpha); + + outP->red = scr(outP->red, (PF_FpShort)((PF_FpLong)inP->red*a)); + outP->green = scr(outP->green, (PF_FpShort)((PF_FpLong)inP->green*a)); + outP->blue = scr(outP->blue, (PF_FpShort)((PF_FpLong)inP->blue*a)); + + return err; + +} +//------------------------------------------------------------------------------------------------- +static PF_Err +BlendAdd( + refconType refcon, + A_long xL, + A_long yL, + PF_PixelFloat *inP, + PF_PixelFloat *outP) +{ + PF_Err err = PF_Err_NONE; + + outP->alpha = scr(RoundFpShort2(outP->alpha), RoundFpShort2(inP->alpha)); + + PF_FpLong a = RoundFpShort2(inP->alpha); + + outP->red = RoundFpShortDouble(outP->red + (inP->red*a)); + outP->green = RoundFpShortDouble(outP->green + (inP->green*a)); + outP->blue = RoundFpShortDouble(outP->blue + (inP->blue*a)); + + return err; + +} +//------------------------------------------------------------------------------------------------- +static PF_Err +BlendNormal( + refconType refcon, + A_long xL, + A_long yL, + PF_PixelFloat *inP, + PF_PixelFloat *outP) +{ + PF_Err err = PF_Err_NONE; + + PF_FpLong ar = 1 - RoundFpShort2(outP->alpha); + PF_FpLong a = RoundFpShort2(inP->alpha); + outP->alpha = scr(outP->alpha, inP->alpha); + + PF_FpLong r, g, b; + r = ((PF_FpLong)inP->red*a)*ar; + g = ((PF_FpLong)inP->green*a)*ar; + b = ((PF_FpLong)inP->blue*a)*ar; + + outP->red = RoundFpShortDouble((PF_FpLong)outP->red + r ); + outP->green = RoundFpShortDouble((PF_FpLong)outP->green + g); + outP->blue = RoundFpShortDouble((PF_FpLong)outP->blue + b); + + return err; + +} +//------------------------------------------------------------------------------------------------- +static PF_Err +TargetPixel( + 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); + + + PF_PixelFloat c = { 1,1,1,1 }; + PF_FpShort r, g, b, a; + PF_FpLong v = 0; + a = (PF_FpShort)inP->alpha; + r = (PF_FpShort)inP->red * a; + g = (PF_FpShort)inP->green * a; + b = (PF_FpShort)inP->blue * a; + + + PF_InData *in_data = infoP->gout.in_data; + PF_PixelFloat pf; + + switch (infoP->info.target_kind) + { + case 2: + v = (r + g + b) / 3; + break; + case 3: + v = (0.29891 * r) + (0.58661 * g) + (0.11448 * b); + break; + case 4: + pf.red = r; + pf.green = g; + pf.blue = b; + pf.alpha = a; + + LABA lab = RgbToLab(pf); + //色の距離測定 + v = 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) + ); + break; + case 1: + default: + v = MAX(MAX(r, g), b); + break; + } + //------------ + if (infoP->target_softness == 0) { + if (v >= infoP->target_border) { + v = 1.0; + } + else { + v = 0; + } + } + else { + if (v <= infoP->target_start) { + v = 0; + } + else if (v >= infoP->target_border) { + v = 1.0; + } + else { + v = (v - infoP->target_start) / (infoP->target_softness); + } + + } + + a = (PF_FpShort)v; + if (a < 0)a = 0; else if (a > 1) a = 1; + + c.alpha = RoundFpShortDouble(a); + + c.red = RoundFpShortDouble(inP->red * a); + c.green = RoundFpShortDouble(inP->green * a); + c.blue = RoundFpShortDouble(inP->blue * a); + + + *outP = c; + + return err; +} + +//------------------------------------------------------------------------------------------------- +static PF_Err +CopyAtoTemp(ParamInfo32 *infoP) +{ + PF_Err err = PF_Err_NONE; + + PF_PixelFloat * dataO = (PF_PixelFloat *)infoP->gout.data; + PF_PixelFloat * dataT = (PF_PixelFloat *)infoP->gtmp.data; + + A_long horO = 0; + A_long horT = 0; + for (A_long y = 0; y < infoP->gout.height; y++) + { + horO = y * infoP->gout.widthTrue; + horT = y * infoP->gtmp.widthTrue; + for (A_long x = 0; x < infoP->gout.width; x++) + { + PF_FpShort a = dataO[x + horO].alpha; + dataT[x + horT].alpha = 1; + dataT[x + horT].red = a; + dataT[x + horT].green = a; + dataT[x + horT].blue = a; + } + } + + + return err; +} +//------------------------------------------------------------------------------------------------- +static PF_Err +TempRev(ParamInfo32 *infoP) +{ + PF_Err err = PF_Err_NONE; + + GInfo gi = infoP->gtmp; + + PF_PixelFloat * data = (PF_PixelFloat *)gi.data; + + A_long hor = 0; + for (A_long y = 0; y < gi.height; y++) + { + for (A_long x = 0; x < gi.width; x++) + { + A_long pos = x + hor; + data[pos].red = 1 - data[pos].red; + data[pos].green = 1 - data[pos].green; + } + hor += gi.widthTrue; + } + + + return err; +} +//------------------------------------------------------------------------------------------------- + +//------------------------------------------------------------------------------------------------- +static PF_Err +TempSub(ParamInfo32 *infoP) +{ + PF_Err err = PF_Err_NONE; + GInfo gi = infoP->gtmp; + + PF_PixelFloat * data = (PF_PixelFloat *)gi.data; + + A_long hor = 0, pos = 0; + + for (A_long y = 0; y < gi.height; y++) + { + for (A_long x = 0; x < gi.width; x++) + { + pos = x + hor; + data[pos].green = 1 - data[pos].green; + data[pos].red = RoundFpShortDouble(data[pos].blue - data[pos].green); + } + hor += gi.widthTrue; + } + + + return err; +} +//------------------------------------------------------------------------------------------------- +static PF_Err +MaxHor(ParamInfo32 *pi) +{ + PF_Err err = PF_Err_NONE; + + GInfo gi = pi->gtmp; + + PF_PixelFloat *data = (PF_PixelFloat *)gi.data; + PF_FpShort mx1 = 0; + PF_FpShort mx2 = 0; + + PF_FpShort org; + A_long pos; + A_long hor=0; + for (A_long y = 0; y < gi.height; y++) + { + for (A_long x = 0; x < gi.width; x++) + { + pos = x + hor; + org = data[pos].red; + mx1 = mx2 = 0; + if (x > 0) { + mx1 = data[pos -1].red; + } + if (x < gi.width-1) { + mx2 = data[pos + 1].red; + } + if (mx1 < mx2) { + mx1 = mx2; + } + if (org < mx1) { + org += mx1/2; + if (org > mx1) org = mx1; + data[pos].green = RoundFpShortDouble(org); + } + + } + //redに戻す + for (A_long x = 0; x < gi.width; x++) + { + pos = x + hor; + data[pos].red = data[pos].green; + } + hor += gi.widthTrue; + } + + return err; +} +//------------------------------------------------------------------------------------------------- +//------------------------------------------------------------------------------------------------- +static PF_Err +MaxVer(ParamInfo32 *pi) +{ + PF_Err err = PF_Err_NONE; + + GInfo gi = pi->gtmp; + + PF_PixelFloat *data = (PF_PixelFloat *)gi.data; + PF_FpShort mx1 = 0; + PF_FpShort mx2 = 0; + + PF_FpShort org; + A_long pos; + A_long hor = 0; + for (A_long x = 0; x < gi.width; x++) + { + hor = 0; + for (A_long y = 0; y < gi.height; y++) + { + pos = x + hor; + org = data[pos].red; + mx1 = mx2 = 0; + if (y > 0) { + mx1 = data[pos - gi.widthTrue].red; + } + if (y < gi.height - 1) { + mx2 = data[pos + gi.widthTrue].red; + } + if (mx1 < mx2) { + mx1 = mx2; + } + if (org < mx1) { + org += mx1 / 2; + if (org > mx1) org = mx1; + data[pos].green = RoundFpShortDouble(org); + } + hor += gi.widthTrue; + + } + //redに戻す + hor = 0; + for (A_long y = 0; y < gi.height; y++) + { + pos = x + hor; + data[pos].red = data[pos].green; + hor += gi.widthTrue; + } + } + return err; +} +//------------------------------------------------------------------------------------------------- +static void +MakePixelTable(PF_PixelFloat *tbl, A_long len, PF_PixelFloat col, PF_FpLong per, PF_FpLong br) +{ + + if ((len <= 0) || (per <= 0)) + { + return; + } + + + PF_FpLong p = per; + for (A_long i = 0; i < len; i++) + { + p = per * (1 - (PF_FpLong)i / (PF_FpLong)len)*0.5; + tbl[i] = PxPer(col, p); + } + + A_long len2 = len / 2; + if ((len2 <= 0) || (br <= 0)) return; + for (A_long i = 0; i < len2; i++) + { + PF_FpLong r, g, b; + r = 1 - tbl[i].red; + g = 1 - tbl[i].green; + b = 1 - tbl[i].blue; + + tbl[i].red = RoundFpShortDouble(tbl[i].red + (r * br * (len2 - i) / len2)); + tbl[i].green = RoundFpShortDouble(tbl[i].green + (g * br * (len2 - i) / len2)); + tbl[i].blue = RoundFpShortDouble(tbl[i].blue + (b * br * (len2 - i) / len2)); + + } + +} +//------------------------------------------------------------------------------------------------- +static PF_Err StarDrawColor(ParamInfo32 *pi) +{ + PF_Err err = PF_Err_NONE; + + GInfo gt = pi->gtmp; + GInfo go = pi->gout; + GInfo go2 = pi->gout; + GInfo go3 = pi->gout; + GInfo go4 = pi->gout; + + PF_PixelFloat *dataT = (PF_PixelFloat *)gt.data; + + MakePixelTable(pi->horTable, pi->hor.len, pi->color, pi->hor.opa, pi->info.brigthness); + MakePixelTable(pi->verTable, pi->ver.len, pi->color, pi->ver.opa, pi->info.brigthness); + MakePixelTable(pi->diaTable, pi->dia.len, pi->color, pi->dia.opa, pi->info.brigthness); + + + A_long posT = 0; + PF_FpLong lv = 0; + for (A_long y = 0; y < go.height; y++) + { + for (A_long x = 0; x < go.width; x++) + { + lv = RoundFpShort2( dataT[posT].red); + posT++; + if (lv <= 0) continue; + + //垂直 + if ((pi->ver.len > 0) && (pi->ver.opa > 0)) + { + A_long vl = (A_long)(pi->ver.len * lv+0.5); + if (vl > 0) + { + A_long d = pi->ver.len - vl; + go.xD = (PF_FpLong)x; + go.yD = (PF_FpLong)y; + go2.xD = (PF_FpLong)x; + go2.yD = (PF_FpLong)y; + for (A_long i = d; i < pi->ver.len; i++) + { + AddPxD(&go, pi->verTable[i]); + AddPxD(&go2, pi->verTable[i]); + go.xD += pi->ver.addX; + go.yD += pi->ver.addY; + go2.xD -= pi->ver.addX; + go2.yD -= pi->ver.addY; + } + } + + } + //水平 + if ((pi->hor.len > 0) && (pi->hor.opa > 0)) + { + A_long hl = (A_long)(pi->hor.len * lv+0.5); + if (hl > 0) + { + A_long d = pi->hor.len - hl; + go.xD = (PF_FpLong)x; + go.yD = (PF_FpLong)y; + go2.xD = (PF_FpLong)x; + go2.yD = (PF_FpLong)y; + for (A_long i = d; i < pi->hor.len; i++) + { + AddPxD(&go, pi->horTable[i]); + AddPxD(&go2, pi->horTable[i]); + go.xD += pi->hor.addX; + go.yD += pi->hor.addY; + go2.xD -= pi->hor.addX; + go2.yD -= pi->hor.addY; + } + } + } + //斜め + if ((pi->dia.len > 0) && (pi->dia.opa > 0)) + { + A_long dl = (A_long)(pi->dia.len * lv +0.5); + if (dl > 0) + { + A_long d = pi->dia.len - dl; + go.xD = (PF_FpLong)x; + go.yD = (PF_FpLong)y; + go2.xD = (PF_FpLong)x; + go2.yD = (PF_FpLong)y; + go3.xD = (PF_FpLong)x; + go3.yD = (PF_FpLong)y; + go4.xD = (PF_FpLong)x; + go4.yD = (PF_FpLong)y; + for (A_long i = d; i < pi->dia.len; i++) + { + AddPxD(&go, pi->diaTable[i]); + AddPxD(&go2, pi->diaTable[i]); + AddPxD(&go3, pi->diaTable[i]); + AddPxD(&go4, pi->diaTable[i]); + go.xD += pi->dia.addX; + go.yD += pi->dia.addY; + go2.xD -= pi->dia.addX; + go2.yD -= pi->dia.addY; + go3.xD += pi->dia2.addX; + go3.yD += pi->dia2.addY; + go4.xD -= pi->dia2.addX; + go4.yD -= pi->dia2.addY; + } + } + } + + } + posT += gt.offsetWidth; + } + + return err; +} +//------------------------------------------------------------------------------------------------- +static PF_Err CenterDraw(ParamInfo32 *pi) +{ + PF_Err err = PF_Err_NONE; + + GInfo gt = pi->gtmp; + GInfo go = pi->gout; + + PF_PixelFloat *dataO = (PF_PixelFloat *)go.data; + PF_PixelFloat *dataT = (PF_PixelFloat *)gt.data; + + + A_long posO = 0; + A_long posT = 0; + A_long lv = 0; + + PF_FpLong r = pi->color.red; + PF_FpLong g = pi->color.green; + PF_FpLong b = pi->color.blue; + r = (r + (1 - r)*pi->info.brigthness); + g = (g + (1 - g)*pi->info.brigthness); + b = (b + (1 - b)*pi->info.brigthness); + for (A_long y = 0; y < go.height; y++) + { + for (A_long x = 0; x < go.width; x++) + { + PF_FpLong v = (PF_FpLong)dataT[posT].green; + dataO[posO].red = RoundFpShortDouble(dataO[posO].red + r * v); + dataO[posO].green = RoundFpShortDouble(dataO[posO].green + g * v); + dataO[posO].blue = RoundFpShortDouble(dataO[posO].blue + b * v); + dataO[posO].alpha = RoundFpShortDouble( dataO[posO].alpha + dataT[posT].green); + + posO++; + posT++; + + } + posT += gt.offsetWidth; + posO += go.offsetWidth; + } + + return err; +} +//------------------------------------------------------------------------------------------------- +static PF_Err blur(ParamInfo32 *pi) +{ + PF_Err err = PF_Err_NONE; + + GInfo go = pi->gout; + + PF_PixelFloat *data = (PF_PixelFloat *)go.data; + + A_long pos = 0; + A_long lv = 0; + for (A_long y = 0; y < go.height; y++) + { + for (A_long x = 0; x < go.width; x++) + { + PF_FpLong r = 0, g = 0, b = 0, a = 0; + PF_PixelFloat c; + c = GetPX(&go, x - 1, y - 1); + r += (PF_FpLong)c.red /32; + g += (PF_FpLong)c.green/32; + b += (PF_FpLong)c.blue / 32; + a += (PF_FpLong)c.alpha / 32; + + c = GetPX(&go, x, y - 1); + r += (PF_FpLong)c.red / 8; + g += (PF_FpLong)c.green / 8; + b += (PF_FpLong)c.blue / 8; + a += (PF_FpLong)c.alpha / 8; + + c = GetPX(&go, x+1, y - 1); + r += (PF_FpLong)c.red / 32; + g += (PF_FpLong)c.green / 32; + b += (PF_FpLong)c.blue / 32; + a += (PF_FpLong)c.alpha / 32; + + c = GetPX(&go, x - 1, y); + r += (PF_FpLong)c.red / 8; + g += (PF_FpLong)c.green / 8; + b += (PF_FpLong)c.blue / 8; + a += (PF_FpLong)c.alpha / 8; + + //c = GetPX(&go, x, y); + c = data[pos]; + r += (PF_FpLong)c.red * 4 / 8; + g += (PF_FpLong)c.green * 4 / 8; + b += (PF_FpLong)c.blue * 4 / 8; + a += (PF_FpLong)c.alpha * 4 / 8; + /*r += (PF_FpLong)c.red * 3 / 8; + g += (PF_FpLong)c.green * 3 / 8; + b += (PF_FpLong)c.blue * 3 / 8; + a += (PF_FpLong)c.alpha * 3 / 8;*/ + + c = GetPX(&go, x+1, y); + r += (PF_FpLong)c.red / 8; + g += (PF_FpLong)c.green / 8; + b += (PF_FpLong)c.blue / 8; + a += (PF_FpLong)c.alpha / 8; + + c = GetPX(&go, x - 1, y+1); + r += (PF_FpLong)c.red / 32; + g += (PF_FpLong)c.green / 32; + b += (PF_FpLong)c.blue / 32; + a += (PF_FpLong)c.alpha / 32; + + c = GetPX(&go, x - 0, y + 1); + r += (PF_FpLong)c.red / 8; + g += (PF_FpLong)c.green / 8; + b += (PF_FpLong)c.blue / 8; + a += (PF_FpLong)c.alpha / 8; + + c = GetPX(&go, x + 1, y + 1); + r += (PF_FpLong)c.red / 32; + g += (PF_FpLong)c.green / 32; + b += (PF_FpLong)c.blue / 32; + a += (PF_FpLong)c.alpha / 32; + + c.red = RoundFpShortDouble(r); + c.green = RoundFpShortDouble(g); + c.blue = RoundFpShortDouble(b); + c.alpha = RoundFpShortDouble(a); + + data[pos] = c; + pos++; + + } + pos += go.offsetWidth; + } + + return err; +} +//------------------------------------------------------------------------------------------------- +static PF_Err blurTempRed(ParamInfo32 *pi) +{ +#define DEC1 16 +#define DEC2 32 + PF_Err err = PF_Err_NONE; + + GInfo gt = pi->gtmp; + + PF_PixelFloat *data = (PF_PixelFloat *)gt.data; + + A_long pos = 0; + A_long lv = 0; + for (A_long y = 0; y < gt.height; y++) + { + for (A_long x = 0; x < gt.width; x++) + { + PF_FpLong r = 0; + PF_PixelFloat c; + c = GetPX(>, x - 1, y - 1); + r += (PF_FpLong)c.red / DEC2; + + c = GetPX(>, x, y - 1); + r += (PF_FpLong)c.red / DEC1; + + c = GetPX(>, x + 1, y - 1); + r += (PF_FpLong)c.red / DEC2; + + c = GetPX(>, x - 1, y); + r += (PF_FpLong)c.red / DEC1; + + //c = GetPX(&go, x, y); + c = data[pos]; + r += (PF_FpLong)c.red*2/3; + + c = GetPX(>, x + 1, y); + r += (PF_FpLong)c.red / DEC1; + + c = GetPX(>, x - 1, y + 1); + r += (PF_FpLong)c.red / DEC2; + + c = GetPX(>, x - 0, y + 1); + r += (PF_FpLong)c.red / DEC1; + + c = GetPX(>, x + 1, y + 1); + r += (PF_FpLong)c.red / DEC2; + + if (r > 1) r = 1; + + data[pos].red = RoundFpShortDouble(r); + pos++; + + } + pos += gt.offsetWidth; + } + + return err; +} +//------------------------------------------------------------------------------------------------- +static PF_Err ScreenTemp(ParamInfo32 *pi) +{ + PF_Err err = PF_Err_NONE; + + GInfo gi = pi->gin; + GInfo gt = pi->gtmp; + + PF_PixelFloat *dataI = (PF_PixelFloat *)gi.data; + PF_PixelFloat *dataT = (PF_PixelFloat *)gt.data; + + A_long posI = 0; + A_long posT = 0; + for (A_long y = 0; y < gt.height; y++) + { + for (A_long x = 0; x < gt.width; x++) + { + PF_PixelFloat pt = dataT[posT]; + + dataT[posT] = dataI[posI]; + dataT[posT].alpha = pt.red; + posI++; + posT++; + + } + posI += gi.offsetWidth; + posT += gt.offsetWidth; + } + + + return err; +} +//------------------------------------------------------------------------------------------------- +static PF_Err StarDrawScreen(ParamInfo32 *pi) +{ + PF_Err err = PF_Err_NONE; + + GInfo gt = pi->gtmp; + GInfo go = pi->gout; + GInfo go2 = pi->gout; + GInfo go3 = pi->gout; + GInfo go4 = pi->gout; + + PF_PixelFloat *dataT = (PF_PixelFloat *)gt.data; + + + + A_long posT = 0; + PF_FpLong lv = 0; + PF_FpLong lvb = 0; + for (A_long y = 0; y < go.height; y++) + { + for (A_long x = 0; x < go.width; x++) + { + PF_PixelFloat c = dataT[posT]; + lv = c.alpha; + lvb = (PF_FpLong)c.alpha; + posT++; + if (lv <= 0) continue; + + //垂直 + if ((pi->ver.len > 0) && (pi->ver.opa > 0)) + { + A_long vl = (A_long)(pi->ver.len * lv+0.5); + if (vl > 0) + { + MakePixelTable(pi->verTable, + pi->ver.len, + c, + pi->ver.opa*lvb, + pi->info.brigthness); + A_long d = pi->ver.len - vl; + go.xD = (PF_FpLong)x; + go.yD = (PF_FpLong)y; + go2.xD = (PF_FpLong)x; + go2.yD = (PF_FpLong)y; + for (A_long i = d; i < pi->ver.len; i++) + { + AddPxD(&go, pi->verTable[i]); + AddPxD(&go2, pi->verTable[i]); + go.xD += pi->ver.addX; + go.yD += pi->ver.addY; + go2.xD -= pi->ver.addX; + go2.yD -= pi->ver.addY; + } + } + + } + //水平 + if ((pi->hor.len > 0) && (pi->hor.opa > 0)) + { + A_long hl = (A_long)(pi->hor.len * lv+0.5); + if (hl > 0) + { + MakePixelTable(pi->horTable, + pi->hor.len, + c, + pi->hor.opa*lvb, + pi->info.brigthness); + A_long d = pi->hor.len - hl; + go.xD = (PF_FpLong)x; + go.yD = (PF_FpLong)y; + go2.xD = (PF_FpLong)x; + go2.yD = (PF_FpLong)y; + for (A_long i = d; i < pi->hor.len; i++) + { + AddPxD(&go, pi->horTable[i]); + AddPxD(&go2, pi->horTable[i]); + go.xD += pi->hor.addX; + go.yD += pi->hor.addY; + go2.xD -= pi->hor.addX; + go2.yD -= pi->hor.addY; + } + } + } + //斜め + if ((pi->dia.len > 0) && (pi->dia.opa > 0)) + { + A_long dl = (A_long)(pi->dia.len * lv+0.5); + if (dl > 0) + { + MakePixelTable(pi->diaTable, + pi->dia.len, + c, + pi->dia.opa*lvb, + pi->info.brigthness); + A_long d = pi->dia.len - dl; + go.xD = (PF_FpLong)x; + go.yD = (PF_FpLong)y; + go2.xD = (PF_FpLong)x; + go2.yD = (PF_FpLong)y; + go3.xD = (PF_FpLong)x; + go3.yD = (PF_FpLong)y; + go4.xD = (PF_FpLong)x; + go4.yD = (PF_FpLong)y; + for (A_long i = d; i < pi->dia.len; i++) + { + AddPxD(&go, pi->diaTable[i]); + AddPxD(&go2, pi->diaTable[i]); + AddPxD(&go3, pi->diaTable[i]); + AddPxD(&go4, pi->diaTable[i]); + go.xD += pi->dia.addX; + go.yD += pi->dia.addY; + go2.xD -= pi->dia.addX; + go2.yD -= pi->dia.addY; + go3.xD += pi->dia2.addX; + go3.yD += pi->dia2.addY; + go4.xD -= pi->dia2.addX; + go4.yD -= pi->dia2.addY; + } + } + } + + } + posT += gt.offsetWidth; + } + + return err; +} +//------------------------------------------------------------------------------------------------- +static void +MakeRainbowTable(PF_PixelFloat *tbl, A_long len, PF_FpLong ro, PF_FpLong rd, PF_FpLong per, PF_FpLong br) +{ + + if ((len <= 0) || (per <= 0)) + { + return; + } + + + PF_FpLong p = per; + HLSA hls; + for (A_long i = 0; i < len; i++) + { + p = per * (1 - (PF_FpLong)i / (PF_FpLong)len)*0.5; + A_long v = (A_long)((ro - rd * i) * 65536); + v %= 65536; + if (v < 0) v += 65536; + hls.H = (PF_FpLong)v/65536; + hls.S = 1; + hls.L = 0.5; + hls.A = 1.0; + PF_PixelFloat c = HLStoRGB(hls); + tbl[i] = PxPer(c, p); + } + + A_long len2 = len / 2; + if ((len2 <= 0) || (br <= 0)) return; + for (A_long i = 0; i < len2; i++) + { + PF_FpLong r, g, b; + r = 1 - tbl[i].red; + g = 1 - tbl[i].green; + b = 1 - tbl[i].blue; + + tbl[i].red = RoundFpShortDouble(tbl[i].red + (r * br * (len2 - i) / len2)); + tbl[i].green = RoundFpShortDouble(tbl[i].green + (g * br * (len2 - i) / len2)); + tbl[i].blue = RoundFpShortDouble(tbl[i].blue + (b * br * (len2 - i) / len2)); + + } + +} +//------------------------------------------------------------------------------------------------- +static PF_Err StarDrawRainbow(ParamInfo32 *pi) +{ + PF_Err err = PF_Err_NONE; + + GInfo gt = pi->gtmp; + GInfo go = pi->gout; + GInfo go2 = pi->gout; + GInfo go3 = pi->gout; + GInfo go4 = pi->gout; + + PF_PixelFloat *dataT = (PF_PixelFloat *)gt.data; + + MakeRainbowTable(pi->verTable, pi->ver.len, pi->info.rainbowOffset, pi->info.rainbowDelta, pi->ver.opa, pi->info.brigthness); + MakeRainbowTable(pi->horTable, pi->hor.len, pi->info.rainbowOffset, pi->info.rainbowDelta, pi->hor.opa, pi->info.brigthness); + MakeRainbowTable(pi->diaTable, pi->dia.len, pi->info.rainbowOffset, pi->info.rainbowDelta, pi->dia.opa, pi->info.brigthness); + + + A_long posT = 0; + PF_FpLong lv = 0; + for (A_long y = 0; y < go.height; y++) + { + for (A_long x = 0; x < go.width; x++) + { + lv = dataT[posT].red; + posT++; + if (lv <= 0) continue; + + //垂直 + if ((pi->ver.len > 0) && (pi->ver.opa > 0)) + { + A_long vl = (A_long)(pi->ver.len * lv+0.5); + if (vl > 0) + { + A_long d = pi->ver.len - vl; + go.xD = (PF_FpLong)x; + go.yD = (PF_FpLong)y; + go2.xD = (PF_FpLong)x; + go2.yD = (PF_FpLong)y; + for (A_long i = d; i < pi->ver.len; i++) + { + AddPxD(&go, pi->verTable[i]); + AddPxD(&go2, pi->verTable[i]); + go.xD += pi->ver.addX; + go.yD += pi->ver.addY; + go2.xD -= pi->ver.addX; + go2.yD -= pi->ver.addY; + } + } + + } + //水平 + if ((pi->hor.len > 0) && (pi->hor.opa > 0)) + { + A_long hl = (A_long)(pi->hor.len * lv+0.5); + if (hl > 0) + { + A_long d = pi->hor.len - hl; + go.xD = (PF_FpLong)x; + go.yD = (PF_FpLong)y; + go2.xD = (PF_FpLong)x; + go2.yD = (PF_FpLong)y; + for (A_long i = d; i < pi->hor.len; i++) + { + AddPxD(&go, pi->horTable[i]); + AddPxD(&go2, pi->horTable[i]); + go.xD += pi->hor.addX; + go.yD += pi->hor.addY; + go2.xD -= pi->hor.addX; + go2.yD -= pi->hor.addY; + } + } + } + //斜め + if ((pi->dia.len > 0) && (pi->dia.opa > 0)) + { + A_long dl = (A_long)(pi->dia.len * lv+0.5); + if (dl > 0) + { + A_long d = pi->dia.len - dl; + go.xD = (PF_FpLong)x; + go.yD = (PF_FpLong)y; + go2.xD = (PF_FpLong)x; + go2.yD = (PF_FpLong)y; + go3.xD = (PF_FpLong)x; + go3.yD = (PF_FpLong)y; + go4.xD = (PF_FpLong)x; + go4.yD = (PF_FpLong)y; + for (A_long i = d; i < pi->dia.len; i++) + { + AddPxD(&go, pi->diaTable[i]); + AddPxD(&go2, pi->diaTable[i]); + AddPxD(&go3, pi->diaTable[i]); + AddPxD(&go4, pi->diaTable[i]); + go.xD += pi->dia.addX; + go.yD += pi->dia.addY; + go2.xD -= pi->dia.addX; + go2.yD -= pi->dia.addY; + go3.xD += pi->dia2.addX; + go3.yD += pi->dia2.addY; + go4.xD -= pi->dia2.addX; + go4.yD -= pi->dia2.addY; + } + } + } + + } + posT += gt.offsetWidth; + } + + return err; +} +//------------------------------------------------------------------------------------------------- +static PF_Err ToParam(CFsAE *ae, ParamInfo *infoP, ParamInfo32 *pi) +{ + PF_Err err = PF_Err_NONE; + + + ae->in->ToGInfo(&pi->gin); + ae->out->ToGInfo(&pi->gout); + ae->tmp->ToGInfo(&pi->gtmp); + + pi->info = *infoP; + + pi->color = CONV8TO32(infoP->color); + + PF_PixelFloat pf = CONV8TO32(pi->info.target_color); + pi->taget_lab = RgbToLab(pf); + + pi->target_border = infoP->target_border; + pi->target_softness =infoP->target_softness; + 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->hor.len = (A_long)((double)pi->info.horLength * pi->info.length + 0.5); + pi->ver.len = (A_long)((double)pi->info.verLength * pi->info.length + 0.5); + pi->dia.len = (A_long)((double)pi->info.diaLength * pi->info.length + 0.5); + pi->dia2.len = pi->dia.len; + + pi->hor.opa = pi->info.horOpacity * pi->info.opacity; + pi->ver.opa = pi->info.verOpacity * pi->info.opacity; + pi->dia.opa = pi->info.diaOpacity * pi->info.opacity; + pi->dia2.opa = pi->dia.opa; + + pi->rot = pi->info.rot; + if ((pi->info.autoRolling == TRUE) && (pi->info.rollingSpeed != 0)) + { + double time = ((double)ae->in_data->current_time / (double)ae->in_data->time_scale); + pi->rot += (pi->info.rollingSpeed*time); + + + } + + pi->hor.rot = pi->rot + pi->info.horRot; + pi->ver.rot = pi->rot + pi->info.verRot; + pi->dia.rot = pi->rot + pi->info.diaRot; + pi->dia2.rot = pi->rot + pi->info.diaRot2; + + pi->hor.rot = CRot::RoundRot(pi->hor.rot); + pi->ver.rot = CRot::RoundRot(pi->ver.rot); + pi->dia.rot = CRot::RoundRot(pi->dia.rot); + pi->dia2.rot = CRot::RoundRot(pi->dia2.rot); + + + CRot rot(ae->in_data); + if (pi->hor.len > 0) { + rot.SetRotLength(pi->hor.rot, pi->hor.len); + pi->hor.addX = rot.x() / pi->hor.len; + pi->hor.addY = rot.y() / pi->hor.len; + } + else + { + pi->hor.addX = 0; + pi->hor.addY = 0; + + } + + if (pi->ver.len > 0) { + rot.SetRotLength(pi->ver.rot, pi->ver.len); + pi->ver.addX = rot.x() / pi->ver.len; + pi->ver.addY = rot.y() / pi->ver.len; + } + else { + pi->ver.addX = 0; + pi->ver.addY = 0; + } + if (pi->dia.len > 0) { + rot.SetRotLength(pi->dia.rot, pi->dia.len); + pi->dia.addX = rot.x() / pi->dia.len; + pi->dia.addY = rot.y() / pi->dia.len; + + rot.SetRotLength(pi->dia2.rot, pi->dia2.len); + pi->dia2.addX = rot.x() / pi->dia2.len; + pi->dia2.addY = rot.y() / pi->dia2.len; + } + else { + pi->dia.addX = 0; + pi->dia.addY = 0; + } + + return err; +} +//------------------------------------------------------------------------------------------------- +PF_Err StarExec32(CFsAE *ae, ParamInfo *infoP) +{ + PF_Err err = PF_Err_NONE; + + if (ae->out->Enabled() == FALSE) + { + return PF_Err_INVALID_CALLBACK; + } + ae->NewTmpWorld(); + ParamInfo32 pi; + + ToParam(ae, infoP, &pi); + pi.bufH = ae->NewHandle( (pi.hor.len + pi.ver.len + pi.dia.len)* sizeof(PF_PixelFloat)+ 1024); + if (pi.bufH == NULL) { + err = PF_Err_OUT_OF_MEMORY; + return err; + } + pi.horTable = *(PF_PixelFloat**)(pi.bufH); + pi.verTable = (pi.horTable + pi.hor.len); + pi.diaTable = (pi.verTable + pi.ver.len); + //ターゲットエリア + ERR(ae->iterate32((refconType)&pi, TargetPixel)); + ae->out->SetMatMode(MAT::blackMat); + if (pi.info.target_maskDraw==TRUE) { + ae->out->fromBlackMat32(); + return err; + } + else { + + CopyAtoTemp(&pi); + TempRev(&pi); + for (A_long i = 0; i < 3; i++) { + ERR(MaxHor( &pi)); + ERR(MaxVer( &pi)); + } + TempSub(&pi); + blurTempRed(&pi); + + switch (pi.info.color_kind) + { + case 3: + ae->out->clear(); + StarDrawRainbow(&pi); + break; + case 2: + ScreenTemp(&pi); + StarDrawScreen(&pi); + break; + case 1: + default: + ae->out->clear(); + StarDrawColor(&pi); + CenterDraw(&pi); + break; + } + blur(&pi); + switch (pi.info.blend) + { + case 4: + ERR(ae->iterate32((refconType)&pi, BlendNormal)); + break; + case 3: + ERR(ae->iterate32((refconType)&pi, BlendAdd)); + break; + case 2: + ERR(ae->iterate32((refconType)&pi, BlendScreen)); + break; + case 1: + default: + break; + } + + ae->out->fromBlackMat32(); + + } + + if (pi.bufH != NULL) { + ae->DisposeHandle(pi.bufH); + pi.bufH = NULL; + } + + return err; + +} \ No newline at end of file diff --git a/Star_Colorful/Star_ColorfulSub8.cpp b/Star_Colorful/Star_ColorfulSub8.cpp new file mode 100644 index 0000000..bc7241f --- /dev/null +++ b/Star_Colorful/Star_ColorfulSub8.cpp @@ -0,0 +1,1243 @@ +#include "Star_Colorful.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]; + +} + +//------------------------------------------------------------------------------------------------- +//スクリーン合成の基本部分 +inline A_u_char scr(A_u_char s, A_u_char d) +{ + A_long v = (A_long)d + (A_long)s - (A_long)s * (A_long)d / PF_MAX_CHAN8; + if (v < 0) v = 0; else if (v > PF_MAX_CHAN8) v = PF_MAX_CHAN8; + return (A_u_char)v; +} +//------------------------------------------------------------------------------------------------- +// ピクセルのスクリーン合成 +inline void AddPxL(GInfo *gi, A_long xL, A_long yL, PF_Pixel p) +{ + if ((xL < 0) || (xL >= gi->width) || (yL < 0) || (yL >= gi->height)) { + return; + } + + PF_Pixel *data = (PF_Pixel *)gi->data; + + A_long pos = xL + yL*gi->widthTrue; + data[pos].red = scr(data[pos].red ,p.red); + data[pos].green = scr(data[pos].green ,p.green); + data[pos].blue = scr(data[pos].blue, p.blue); + data[pos].alpha = scr(data[pos].alpha , p.alpha); + +} +//------------------------------------------------------------------------------------------------- +// ピクセルの濃度調整 +inline PF_Pixel PxPer(PF_Pixel p, PF_FpLong per) +{ + PF_Pixel r; + r.red = RoundByteFpLong( (PF_FpLong)p.red * per); + r.green = RoundByteFpLong((PF_FpLong)p.green * per); + r.blue = RoundByteFpLong((PF_FpLong)p.blue * per); + r.alpha = RoundByteFpLong((PF_FpLong)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; + + AddPxL(gi, x0, y0, PxPer(p, ax0 * ay0)); + AddPxL(gi, x0, y1, PxPer(p, ax0 * ay1)); + AddPxL(gi, x1, y0, PxPer(p, ax1 * ay0)); + AddPxL(gi, x1, y1, PxPer(p, ax1 * ay1)); + +} +//------------------------------------------------------------------------------------------------- +static PF_Err +BlendScreen( + refconType refcon, + A_long xL, + A_long yL, + PF_Pixel8 *inP, + PF_Pixel8 *outP) +{ + PF_Err err = PF_Err_NONE; + + outP->alpha = scr(outP->alpha, inP->alpha); + + PF_FpLong a = (PF_FpLong)inP->alpha/PF_MAX_CHAN8; + + outP->red = scr(outP->red, (A_u_char)((PF_FpLong)inP->red*a)); + outP->green = scr(outP->green, (A_u_char)((PF_FpLong)inP->green*a)); + outP->blue = scr(outP->blue, (A_u_char)((PF_FpLong)inP->blue*a)); + + return err; + +} +//------------------------------------------------------------------------------------------------- +static PF_Err +BlendAdd( + refconType refcon, + A_long xL, + A_long yL, + PF_Pixel8 *inP, + PF_Pixel8 *outP) +{ + PF_Err err = PF_Err_NONE; + + outP->alpha = scr(outP->alpha, inP->alpha); + + PF_FpLong a = (PF_FpLong)inP->alpha / PF_MAX_CHAN8; + + outP->red = RoundByteLong((A_long)outP->red + (A_long)((PF_FpLong)inP->red*a)); + outP->green = RoundByteLong((A_long)outP->green + (A_long)((PF_FpLong)inP->green*a)); + outP->blue = RoundByteLong((A_long)outP->blue + (A_long)((PF_FpLong)inP->blue*a)); + + return err; + +} +//------------------------------------------------------------------------------------------------- +static PF_Err +BlendNormal( + refconType refcon, + A_long xL, + A_long yL, + PF_Pixel8 *inP, + PF_Pixel8 *outP) +{ + PF_Err err = PF_Err_NONE; + + PF_FpLong ar = 1 - (PF_FpLong)outP->alpha/ PF_MAX_CHAN8; + outP->alpha = scr(outP->alpha, inP->alpha); + + PF_FpLong a = (PF_FpLong)inP->alpha / PF_MAX_CHAN8; + PF_FpLong r, g, b; + r = ((PF_FpLong)inP->red*a)*ar; + g = ((PF_FpLong)inP->green*a)*ar; + b = ((PF_FpLong)inP->blue*a)*ar; + + outP->red = RoundByteFpLong((PF_FpLong)outP->red + r ); + outP->green = RoundByteFpLong((PF_FpLong)outP->green + g); + outP->blue = RoundByteFpLong((PF_FpLong)outP->blue + b); + + return err; + +} +//------------------------------------------------------------------------------------------------- +static PF_Err +TargetPixel( + 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 }; + PF_FpShort r, g, b, a; + PF_FpLong v = 0; + a = (PF_FpShort)inP->alpha / PF_MAX_CHAN8; + r = (PF_FpShort)inP->red * a / PF_MAX_CHAN8; + g = (PF_FpShort)inP->green * a / PF_MAX_CHAN8; + b = (PF_FpShort)inP->blue * a / PF_MAX_CHAN8; + + + PF_InData *in_data = infoP->gout.in_data; + PF_PixelFloat pf; + + switch (infoP->info.target_kind) + { + case 2: + v = (r + g + b) / 3; + break; + case 3: + v = (0.29891 * r) + (0.58661 * g) + (0.11448 * b); + break; + case 4: + pf.red = r; + pf.green = g; + pf.blue = b; + pf.alpha = a; + + LABA lab = RgbToLab(pf); + //色の距離測定 + v = 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) + ); + break; + case 1: + default: + v = MAX(MAX(r, g), b); + break; + } + //------------ + if (infoP->target_softness == 0) { + if (v >= infoP->target_border) { + v = 1.0; + } + else { + v = 0; + } + } + else { + if (v <= infoP->target_start) { + v = 0; + } + else if (v >= infoP->target_border) { + v = 1.0; + } + else { + v = (v - infoP->target_start) / (infoP->target_softness); + } + + } + + a = (PF_FpShort)v; + if (a < 0)a = 0; else if (a > 1) a = 1; + + c.alpha = RoundByteLong((A_long)(a*PF_MAX_CHAN8 + 0.5)); + + c.red = RoundByteLong((A_long)((double)inP->red * a+0.5)); + c.green = RoundByteLong((A_long)((double)inP->green * a + 0.5)); + c.blue = RoundByteLong((A_long)((double)inP->blue * a + 0.5)); + + + *outP = c; + + return err; +} + +//------------------------------------------------------------------------------------------------- +static PF_Err +CopyAtoTemp(ParamInfo8 *infoP) +{ + PF_Err err = PF_Err_NONE; + + PF_Pixel * dataO = (PF_Pixel *)infoP->gout.data; + PF_Pixel * dataT = (PF_Pixel *)infoP->gtmp.data; + + A_long horO = 0; + A_long horT = 0; + for (A_long y = 0; y < infoP->gout.height; y++) + { + horO = y * infoP->gout.widthTrue; + horT = y * infoP->gtmp.widthTrue; + for (A_long x = 0; x < infoP->gout.width; x++) + { + A_u_char a = dataO[x + horO].alpha; + dataT[x + horT].alpha = PF_MAX_CHAN8; + dataT[x + horT].red = a; + dataT[x + horT].green = a; + dataT[x + horT].blue = a; + } + } + + + return err; +} +//------------------------------------------------------------------------------------------------- +static PF_Err +TempRev(ParamInfo8 *infoP) +{ + PF_Err err = PF_Err_NONE; + + GInfo gi = infoP->gtmp; + + PF_Pixel * data = (PF_Pixel *)gi.data; + + A_long hor = 0; + for (A_long y = 0; y < gi.height; y++) + { + for (A_long x = 0; x < gi.width; x++) + { + A_long pos = x + hor; + data[pos].red = PF_MAX_CHAN8 - data[pos].red; + data[pos].green = PF_MAX_CHAN8 - data[pos].green; + } + hor += gi.widthTrue; + } + + + return err; +} +//------------------------------------------------------------------------------------------------- + +//------------------------------------------------------------------------------------------------- +static PF_Err +TempSub(ParamInfo8 *infoP) +{ + PF_Err err = PF_Err_NONE; + GInfo gi = infoP->gtmp; + + PF_Pixel * data = (PF_Pixel *)gi.data; + + A_long hor = 0, pos = 0; + + for (A_long y = 0; y < gi.height; y++) + { + for (A_long x = 0; x < gi.width; x++) + { + pos = x + hor; + data[pos].green = PF_MAX_CHAN8 - data[pos].green; + data[pos].red = RoundByteLong(data[pos].blue - data[pos].green); + //data[pos].green = data[pos].red; + } + hor += gi.widthTrue; + } + + + return err; +} +//------------------------------------------------------------------------------------------------- +static PF_Err +MaxHor(ParamInfo8 *pi) +{ + PF_Err err = PF_Err_NONE; + + GInfo gi = pi->gtmp; + + PF_Pixel *data = (PF_Pixel *)gi.data; + A_long mx1 = 0; + A_long mx2 = 0; + + A_long org,pos; + A_long hor=0; + for (A_long y = 0; y < gi.height; y++) + { + for (A_long x = 0; x < gi.width; x++) + { + pos = x + hor; + org = data[pos].red; + mx1 = mx2 = 0; + if (x > 0) { + mx1 = data[pos -1].red; + } + if (x < gi.width-1) { + mx2 = data[pos + 1].red; + } + if (mx1 < mx2) { + mx1 = mx2; + } + if (org < mx1) { + org += mx1/2; + if (org > mx1) org = mx1; + data[pos].green = RoundByteLong(org); + } + + } + //redに戻す + for (A_long x = 0; x < gi.width; x++) + { + pos = x + hor; + data[pos].red = data[pos].green; + } + hor += gi.widthTrue; + } + + return err; +} +//------------------------------------------------------------------------------------------------- +//------------------------------------------------------------------------------------------------- +static PF_Err +MaxVer(ParamInfo8 *pi) +{ + PF_Err err = PF_Err_NONE; + + GInfo gi = pi->gtmp; + + PF_Pixel *data = (PF_Pixel *)gi.data; + A_long mx1 = 0; + A_long mx2 = 0; + + A_long org, pos; + A_long hor = 0; + for (A_long x = 0; x < gi.width; x++) + { + hor = 0; + for (A_long y = 0; y < gi.height; y++) + { + pos = x + hor; + org = data[pos].red; + mx1 = mx2 = 0; + if (y > 0) { + mx1 = data[pos - gi.widthTrue].red; + } + if (y < gi.height - 1) { + mx2 = data[pos + gi.widthTrue].red; + } + if (mx1 < mx2) { + mx1 = mx2; + } + if (org < mx1) { + org += mx1 / 2; + if (org > mx1) org = mx1; + data[pos].green = RoundByteLong(org); + } + hor += gi.widthTrue; + + } + //redに戻す + hor = 0; + for (A_long y = 0; y < gi.height; y++) + { + pos = x + hor; + data[pos].red = data[pos].green; + hor += gi.widthTrue; + } + } + return err; +} +//------------------------------------------------------------------------------------------------- +static void +MakePixelTable(PF_Pixel *tbl, A_long len, PF_Pixel col, PF_FpLong per, PF_FpLong br) +{ + + if ((len <= 0) || (per <= 0)) + { + return; + } + + + PF_FpLong p = per; + for (A_long i = 0; i < len; i++) + { + p = per * (1 - (PF_FpLong)i / (PF_FpLong)len)*0.5; + tbl[i] = PxPer(col, p); + } + + A_long len2 = len / 2; + if ((len2 <= 0) || (br <= 0)) return; + for (A_long i = 0; i < len2; i++) + { + A_long r, g, b; + r = PF_MAX_CHAN8 - tbl[i].red; + g = PF_MAX_CHAN8 - tbl[i].green; + b = PF_MAX_CHAN8 - tbl[i].blue; + + tbl[i].red = RoundByteLong(tbl[i].red + (A_long)((PF_FpLong)r * br * (len2 - i) / len2)); + tbl[i].green = RoundByteLong(tbl[i].green + (A_long)((PF_FpLong)g * br * (len2 - i) / len2)); + tbl[i].blue = RoundByteLong(tbl[i].blue + (A_long)((PF_FpLong)b * br * (len2 - i) / len2)); + + } + +} +//------------------------------------------------------------------------------------------------- +static PF_Err StarDrawColor(ParamInfo8 *pi) +{ + PF_Err err = PF_Err_NONE; + + GInfo gt = pi->gtmp; + GInfo go = pi->gout; + GInfo go2 = pi->gout; + GInfo go3 = pi->gout; + GInfo go4 = pi->gout; + + PF_Pixel *dataT = (PF_Pixel *)gt.data; + + MakePixelTable(pi->horTable, pi->hor.len, pi->color, pi->hor.opa, pi->info.brigthness); + MakePixelTable(pi->verTable, pi->ver.len, pi->color, pi->ver.opa, pi->info.brigthness); + MakePixelTable(pi->diaTable, pi->dia.len, pi->color, pi->dia.opa, pi->info.brigthness); + + + A_long posT = 0; + A_long lv = 0; + for (A_long y = 0; y < go.height; y++) + { + for (A_long x = 0; x < go.width; x++) + { + lv = dataT[posT].red; + posT++; + if (lv <= 0) continue; + + //垂直 + if ((pi->ver.len > 0) && (pi->ver.opa > 0)) + { + A_long vl = pi->ver.len * lv / PF_MAX_CHAN8; + if (vl > 0) + { + A_long d = pi->ver.len - vl; + go.xD = (PF_FpLong)x; + go.yD = (PF_FpLong)y; + go2.xD = (PF_FpLong)x; + go2.yD = (PF_FpLong)y; + for (A_long i = d; i < pi->ver.len; i++) + { + AddPxD(&go, pi->verTable[i]); + AddPxD(&go2, pi->verTable[i]); + go.xD += pi->ver.addX; + go.yD += pi->ver.addY; + go2.xD -= pi->ver.addX; + go2.yD -= pi->ver.addY; + } + } + + } + //水平 + if ((pi->hor.len > 0) && (pi->hor.opa > 0)) + { + A_long hl = pi->hor.len * lv / PF_MAX_CHAN8; + if (hl > 0) + { + A_long d = pi->hor.len - hl; + go.xD = (PF_FpLong)x; + go.yD = (PF_FpLong)y; + go2.xD = (PF_FpLong)x; + go2.yD = (PF_FpLong)y; + for (A_long i = d; i < pi->hor.len; i++) + { + AddPxD(&go, pi->horTable[i]); + AddPxD(&go2, pi->horTable[i]); + go.xD += pi->hor.addX; + go.yD += pi->hor.addY; + go2.xD -= pi->hor.addX; + go2.yD -= pi->hor.addY; + } + } + } + //斜め + if ((pi->dia.len > 0) && (pi->dia.opa > 0)) + { + A_long dl = pi->dia.len * lv / PF_MAX_CHAN8; + if (dl > 0) + { + A_long d = pi->dia.len - dl; + go.xD = (PF_FpLong)x; + go.yD = (PF_FpLong)y; + go2.xD = (PF_FpLong)x; + go2.yD = (PF_FpLong)y; + go3.xD = (PF_FpLong)x; + go3.yD = (PF_FpLong)y; + go4.xD = (PF_FpLong)x; + go4.yD = (PF_FpLong)y; + for (A_long i = d; i < pi->dia.len; i++) + { + AddPxD(&go, pi->diaTable[i]); + AddPxD(&go2, pi->diaTable[i]); + AddPxD(&go3, pi->diaTable[i]); + AddPxD(&go4, pi->diaTable[i]); + go.xD += pi->dia.addX; + go.yD += pi->dia.addY; + go2.xD -= pi->dia.addX; + go2.yD -= pi->dia.addY; + go3.xD += pi->dia2.addX; + go3.yD += pi->dia2.addY; + go4.xD -= pi->dia2.addX; + go4.yD -= pi->dia2.addY; + } + } + } + + } + posT += gt.offsetWidth; + } + + return err; +} +//------------------------------------------------------------------------------------------------- +static PF_Err CenterDraw(ParamInfo8 *pi) +{ + PF_Err err = PF_Err_NONE; + + GInfo gt = pi->gtmp; + GInfo go = pi->gout; + + PF_Pixel *dataO = (PF_Pixel *)go.data; + PF_Pixel *dataT = (PF_Pixel *)gt.data; + + + A_long posO = 0; + A_long posT = 0; + A_long lv = 0; + + PF_FpLong r = pi->color.red; + PF_FpLong g = pi->color.green; + PF_FpLong b = pi->color.blue; + r = (r + (PF_MAX_CHAN8 - r)*pi->info.brigthness); + g = (g + (PF_MAX_CHAN8 - g)*pi->info.brigthness); + b = (b + (PF_MAX_CHAN8 - b)*pi->info.brigthness); + for (A_long y = 0; y < go.height; y++) + { + for (A_long x = 0; x < go.width; x++) + { + PF_FpLong v = (PF_FpLong)dataT[posT].green / PF_MAX_CHAN8; + dataO[posO].red = RoundByteFpLong(dataO[posO].red + r * v); + dataO[posO].green = RoundByteFpLong(dataO[posO].green + g * v); + dataO[posO].blue = RoundByteFpLong(dataO[posO].blue + b * v); + dataO[posO].alpha = RoundByteLong( (A_long)dataO[posO].alpha + (A_long)dataT[posT].green); + + posO++; + posT++; + + } + posT += gt.offsetWidth; + posO += go.offsetWidth; + } + + return err; +} +//------------------------------------------------------------------------------------------------- +static PF_Err blur(ParamInfo8 *pi) +{ + PF_Err err = PF_Err_NONE; + + GInfo go = pi->gout; + + PF_Pixel *data = (PF_Pixel *)go.data; + + A_long pos = 0; + A_long lv = 0; + for (A_long y = 0; y < go.height; y++) + { + for (A_long x = 0; x < go.width; x++) + { + PF_FpLong r = 0, g = 0, b = 0, a = 0; + PF_Pixel c; + c = GetPX(&go, x - 1, y - 1); + r += (PF_FpLong)c.red /32; + g += (PF_FpLong)c.green/32; + b += (PF_FpLong)c.blue / 32; + a += (PF_FpLong)c.alpha / 32; + + c = GetPX(&go, x, y - 1); + r += (PF_FpLong)c.red / 8; + g += (PF_FpLong)c.green / 8; + b += (PF_FpLong)c.blue / 8; + a += (PF_FpLong)c.alpha / 8; + + c = GetPX(&go, x+1, y - 1); + r += (PF_FpLong)c.red / 32; + g += (PF_FpLong)c.green / 32; + b += (PF_FpLong)c.blue / 32; + a += (PF_FpLong)c.alpha / 32; + + c = GetPX(&go, x - 1, y); + r += (PF_FpLong)c.red / 8; + g += (PF_FpLong)c.green / 8; + b += (PF_FpLong)c.blue / 8; + a += (PF_FpLong)c.alpha / 8; + + //c = GetPX(&go, x, y); + c = data[pos]; + r += (PF_FpLong)c.red * 4 / 8; + g += (PF_FpLong)c.green * 4 / 8; + b += (PF_FpLong)c.blue * 4 / 8; + a += (PF_FpLong)c.alpha * 4 / 8; + /*r += (PF_FpLong)c.red * 3 / 8; + g += (PF_FpLong)c.green * 3 / 8; + b += (PF_FpLong)c.blue * 3 / 8; + a += (PF_FpLong)c.alpha * 3 / 8;*/ + + c = GetPX(&go, x+1, y); + r += (PF_FpLong)c.red / 8; + g += (PF_FpLong)c.green / 8; + b += (PF_FpLong)c.blue / 8; + a += (PF_FpLong)c.alpha / 8; + + c = GetPX(&go, x - 1, y+1); + r += (PF_FpLong)c.red / 32; + g += (PF_FpLong)c.green / 32; + b += (PF_FpLong)c.blue / 32; + a += (PF_FpLong)c.alpha / 32; + + c = GetPX(&go, x - 0, y + 1); + r += (PF_FpLong)c.red / 8; + g += (PF_FpLong)c.green / 8; + b += (PF_FpLong)c.blue / 8; + a += (PF_FpLong)c.alpha / 8; + + c = GetPX(&go, x + 1, y + 1); + r += (PF_FpLong)c.red / 32; + g += (PF_FpLong)c.green / 32; + b += (PF_FpLong)c.blue / 32; + a += (PF_FpLong)c.alpha / 32; + + c.red = RoundByteFpLong(r); + c.green = RoundByteFpLong(g); + c.blue = RoundByteFpLong(b); + c.alpha = RoundByteFpLong(a); + + data[pos] = c; + pos++; + + } + pos += go.offsetWidth; + } + + return err; +} +//------------------------------------------------------------------------------------------------- +static PF_Err blurTempRed(ParamInfo8 *pi) +{ +#define DEC1 16 +#define DEC2 32 + PF_Err err = PF_Err_NONE; + + GInfo gt = pi->gtmp; + + PF_Pixel *data = (PF_Pixel *)gt.data; + + A_long pos = 0; + A_long lv = 0; + for (A_long y = 0; y < gt.height; y++) + { + for (A_long x = 0; x < gt.width; x++) + { + PF_FpLong r = 0; + PF_Pixel c; + c = GetPX(>, x - 1, y - 1); + r += (PF_FpLong)c.red / DEC2; + + c = GetPX(>, x, y - 1); + r += (PF_FpLong)c.red / DEC1; + + c = GetPX(>, x + 1, y - 1); + r += (PF_FpLong)c.red / DEC2; + + c = GetPX(>, x - 1, y); + r += (PF_FpLong)c.red / DEC1; + + //c = GetPX(&go, x, y); + c = data[pos]; + r += (PF_FpLong)c.red*2/3; + + c = GetPX(>, x + 1, y); + r += (PF_FpLong)c.red / DEC1; + + c = GetPX(>, x - 1, y + 1); + r += (PF_FpLong)c.red / DEC2; + + c = GetPX(>, x - 0, y + 1); + r += (PF_FpLong)c.red / DEC1; + + c = GetPX(>, x + 1, y + 1); + r += (PF_FpLong)c.red / DEC2; + + + data[pos].red = RoundByteFpLong(r); + pos++; + + } + pos += gt.offsetWidth; + } + + return err; +}//------------------------------------------------------------------------------------------------- +static PF_Err ScreenTemp(ParamInfo8 *pi) +{ + PF_Err err = PF_Err_NONE; + + GInfo gi = pi->gin; + GInfo gt = pi->gtmp; + + PF_Pixel *dataI = (PF_Pixel *)gi.data; + PF_Pixel *dataT = (PF_Pixel *)gt.data; + + A_long posI = 0; + A_long posT = 0; + for (A_long y = 0; y < gt.height; y++) + { + for (A_long x = 0; x < gt.width; x++) + { + PF_Pixel pt = dataT[posT]; + + dataT[posT] = dataI[posI]; + dataT[posT].alpha = pt.red; + posI++; + posT++; + + } + posI += gi.offsetWidth; + posT += gt.offsetWidth; + } + + + return err; +} +//------------------------------------------------------------------------------------------------- +static PF_Err StarDrawScreen(ParamInfo8 *pi) +{ + PF_Err err = PF_Err_NONE; + + GInfo gt = pi->gtmp; + GInfo go = pi->gout; + GInfo go2 = pi->gout; + GInfo go3 = pi->gout; + GInfo go4 = pi->gout; + + PF_Pixel *dataT = (PF_Pixel *)gt.data; + + + + A_long posT = 0; + A_long lv = 0; + PF_FpLong lvb = 0; + for (A_long y = 0; y < go.height; y++) + { + for (A_long x = 0; x < go.width; x++) + { + PF_Pixel c = dataT[posT]; + lv = c.alpha; + lvb = (PF_FpLong)c.alpha / PF_MAX_CHAN8; + posT++; + if (lv <= 0) continue; + + //垂直 + if ((pi->ver.len > 0) && (pi->ver.opa > 0)) + { + A_long vl = pi->ver.len * lv / PF_MAX_CHAN8; + if (vl > 0) + { + MakePixelTable(pi->verTable, + pi->ver.len, + c, + pi->ver.opa*lvb, + pi->info.brigthness); + A_long d = pi->ver.len - vl; + go.xD = (PF_FpLong)x; + go.yD = (PF_FpLong)y; + go2.xD = (PF_FpLong)x; + go2.yD = (PF_FpLong)y; + for (A_long i = d; i < pi->ver.len; i++) + { + AddPxD(&go, pi->verTable[i]); + AddPxD(&go2, pi->verTable[i]); + go.xD += pi->ver.addX; + go.yD += pi->ver.addY; + go2.xD -= pi->ver.addX; + go2.yD -= pi->ver.addY; + } + } + + } + //水平 + if ((pi->hor.len > 0) && (pi->hor.opa > 0)) + { + A_long hl = pi->hor.len * lv / PF_MAX_CHAN8; + if (hl > 0) + { + MakePixelTable(pi->horTable, + pi->hor.len, + c, + pi->hor.opa*lvb, + pi->info.brigthness); + A_long d = pi->hor.len - hl; + go.xD = (PF_FpLong)x; + go.yD = (PF_FpLong)y; + go2.xD = (PF_FpLong)x; + go2.yD = (PF_FpLong)y; + for (A_long i = d; i < pi->hor.len; i++) + { + AddPxD(&go, pi->horTable[i]); + AddPxD(&go2, pi->horTable[i]); + go.xD += pi->hor.addX; + go.yD += pi->hor.addY; + go2.xD -= pi->hor.addX; + go2.yD -= pi->hor.addY; + } + } + } + //斜め + if ((pi->dia.len > 0) && (pi->dia.opa > 0)) + { + A_long dl = pi->dia.len * lv / PF_MAX_CHAN8; + if (dl > 0) + { + MakePixelTable(pi->diaTable, + pi->dia.len, + c, + pi->dia.opa*lvb, + pi->info.brigthness); + A_long d = pi->dia.len - dl; + go.xD = (PF_FpLong)x; + go.yD = (PF_FpLong)y; + go2.xD = (PF_FpLong)x; + go2.yD = (PF_FpLong)y; + go3.xD = (PF_FpLong)x; + go3.yD = (PF_FpLong)y; + go4.xD = (PF_FpLong)x; + go4.yD = (PF_FpLong)y; + for (A_long i = d; i < pi->dia.len; i++) + { + AddPxD(&go, pi->diaTable[i]); + AddPxD(&go2, pi->diaTable[i]); + AddPxD(&go3, pi->diaTable[i]); + AddPxD(&go4, pi->diaTable[i]); + go.xD += pi->dia.addX; + go.yD += pi->dia.addY; + go2.xD -= pi->dia.addX; + go2.yD -= pi->dia.addY; + go3.xD += pi->dia2.addX; + go3.yD += pi->dia2.addY; + go4.xD -= pi->dia2.addX; + go4.yD -= pi->dia2.addY; + } + } + } + + } + posT += gt.offsetWidth; + } + + return err; +} +//------------------------------------------------------------------------------------------------- +static void +MakeRainbowTable(PF_Pixel *tbl, A_long len, PF_FpLong ro, PF_FpLong rd, PF_FpLong per, PF_FpLong br) +{ + + if ((len <= 0) || (per <= 0)) + { + return; + } + + + PF_FpLong p = per; + HLSA hls; + for (A_long i = 0; i < len; i++) + { + p = per * (1 - (PF_FpLong)i / (PF_FpLong)len)*0.5; + A_long v = (A_long)((ro - rd * i) * 65536); + v %= 65536; + if (v < 0) v += 65536; + hls.H = (PF_FpLong)v/65536; + hls.S = 1; + hls.L = 0.5; + hls.A = 1.0; + PF_Pixel c = CONV32TO8(HLStoRGB(hls)); + tbl[i] = PxPer(c, p); + } + + A_long len2 = len / 2; + if ((len2 <= 0) || (br <= 0)) return; + for (A_long i = 0; i < len2; i++) + { + A_long r, g, b; + r = PF_MAX_CHAN8 - tbl[i].red; + g = PF_MAX_CHAN8 - tbl[i].green; + b = PF_MAX_CHAN8 - tbl[i].blue; + + tbl[i].red = RoundByteLong(tbl[i].red + (A_long)((PF_FpLong)r * br * (len2 - i) / len2)); + tbl[i].green = RoundByteLong(tbl[i].green + (A_long)((PF_FpLong)g * br * (len2 - i) / len2)); + tbl[i].blue = RoundByteLong(tbl[i].blue + (A_long)((PF_FpLong)b * br * (len2 - i) / len2)); + + } + +} +//------------------------------------------------------------------------------------------------- +static PF_Err StarDrawRainbow(ParamInfo8 *pi) +{ + PF_Err err = PF_Err_NONE; + + GInfo gt = pi->gtmp; + GInfo go = pi->gout; + GInfo go2 = pi->gout; + GInfo go3 = pi->gout; + GInfo go4 = pi->gout; + + PF_Pixel *dataT = (PF_Pixel *)gt.data; + + MakeRainbowTable(pi->verTable, pi->ver.len, pi->info.rainbowOffset, pi->info.rainbowDelta, pi->ver.opa, pi->info.brigthness); + MakeRainbowTable(pi->horTable, pi->hor.len, pi->info.rainbowOffset, pi->info.rainbowDelta, pi->hor.opa, pi->info.brigthness); + MakeRainbowTable(pi->diaTable, pi->dia.len, pi->info.rainbowOffset, pi->info.rainbowDelta, pi->dia.opa, pi->info.brigthness); + + + A_long posT = 0; + A_long lv = 0; + for (A_long y = 0; y < go.height; y++) + { + for (A_long x = 0; x < go.width; x++) + { + lv = dataT[posT].red; + posT++; + if (lv <= 0) continue; + + //垂直 + if ((pi->ver.len > 0) && (pi->ver.opa > 0)) + { + A_long vl = pi->ver.len * lv / PF_MAX_CHAN8; + if (vl > 0) + { + A_long d = pi->ver.len - vl; + go.xD = (PF_FpLong)x; + go.yD = (PF_FpLong)y; + go2.xD = (PF_FpLong)x; + go2.yD = (PF_FpLong)y; + for (A_long i = d; i < pi->ver.len; i++) + { + AddPxD(&go, pi->verTable[i]); + AddPxD(&go2, pi->verTable[i]); + go.xD += pi->ver.addX; + go.yD += pi->ver.addY; + go2.xD -= pi->ver.addX; + go2.yD -= pi->ver.addY; + } + } + + } + //水平 + if ((pi->hor.len > 0) && (pi->hor.opa > 0)) + { + A_long hl = pi->hor.len * lv / PF_MAX_CHAN8; + if (hl > 0) + { + A_long d = pi->hor.len - hl; + go.xD = (PF_FpLong)x; + go.yD = (PF_FpLong)y; + go2.xD = (PF_FpLong)x; + go2.yD = (PF_FpLong)y; + for (A_long i = d; i < pi->hor.len; i++) + { + AddPxD(&go, pi->horTable[i]); + AddPxD(&go2, pi->horTable[i]); + go.xD += pi->hor.addX; + go.yD += pi->hor.addY; + go2.xD -= pi->hor.addX; + go2.yD -= pi->hor.addY; + } + } + } + //斜め + if ((pi->dia.len > 0) && (pi->dia.opa > 0)) + { + A_long dl = pi->dia.len * lv / PF_MAX_CHAN8; + if (dl > 0) + { + A_long d = pi->dia.len - dl; + go.xD = (PF_FpLong)x; + go.yD = (PF_FpLong)y; + go2.xD = (PF_FpLong)x; + go2.yD = (PF_FpLong)y; + go3.xD = (PF_FpLong)x; + go3.yD = (PF_FpLong)y; + go4.xD = (PF_FpLong)x; + go4.yD = (PF_FpLong)y; + for (A_long i = d; i < pi->dia.len; i++) + { + AddPxD(&go, pi->diaTable[i]); + AddPxD(&go2, pi->diaTable[i]); + AddPxD(&go3, pi->diaTable[i]); + AddPxD(&go4, pi->diaTable[i]); + go.xD += pi->dia.addX; + go.yD += pi->dia.addY; + go2.xD -= pi->dia.addX; + go2.yD -= pi->dia.addY; + go3.xD += pi->dia2.addX; + go3.yD += pi->dia2.addY; + go4.xD -= pi->dia2.addX; + go4.yD -= pi->dia2.addY; + } + } + } + + } + posT += gt.offsetWidth; + } + + return err; +} +//------------------------------------------------------------------------------------------------- +static PF_Err ToParam8(CFsAE *ae, ParamInfo *infoP, ParamInfo8 *pi) +{ + PF_Err err = PF_Err_NONE; + + + ae->in->ToGInfo(&pi->gin); + ae->out->ToGInfo(&pi->gout); + ae->tmp->ToGInfo(&pi->gtmp); + + pi->info = *infoP; + + pi->color = infoP->color; + + PF_PixelFloat pf = CONV8TO32(pi->info.target_color); + pi->taget_lab = RgbToLab(pf); + + pi->target_border = infoP->target_border; + pi->target_softness =infoP->target_softness; + 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->hor.len = (A_long)((double)pi->info.horLength * pi->info.length + 0.5); + pi->ver.len = (A_long)((double)pi->info.verLength * pi->info.length + 0.5); + pi->dia.len = (A_long)((double)pi->info.diaLength * pi->info.length + 0.5); + pi->dia2.len = pi->dia.len; + + pi->hor.opa = pi->info.horOpacity * pi->info.opacity; + pi->ver.opa = pi->info.verOpacity * pi->info.opacity; + pi->dia.opa = pi->info.diaOpacity * pi->info.opacity; + pi->dia2.opa = pi->dia.opa; + + pi->rot = pi->info.rot; + if ((pi->info.autoRolling == TRUE) && (pi->info.rollingSpeed != 0)) + { + double time = ((double)ae->in_data->current_time / (double)ae->in_data->time_scale); + pi->rot += (pi->info.rollingSpeed*time); + + + } + + pi->hor.rot = pi->rot + pi->info.horRot; + pi->ver.rot = pi->rot + pi->info.verRot; + pi->dia.rot = pi->rot + pi->info.diaRot; + pi->dia2.rot = pi->rot + pi->info.diaRot2; + + pi->hor.rot = CRot::RoundRot(pi->hor.rot); + pi->ver.rot = CRot::RoundRot(pi->ver.rot); + pi->dia.rot = CRot::RoundRot(pi->dia.rot); + pi->dia2.rot = CRot::RoundRot(pi->dia2.rot); + + + CRot rot(ae->in_data); + if (pi->hor.len > 0) { + rot.SetRotLength(pi->hor.rot, pi->hor.len); + pi->hor.addX = rot.x() / pi->hor.len; + pi->hor.addY = rot.y() / pi->hor.len; + } + else + { + pi->hor.addX = 0; + pi->hor.addY = 0; + + } + + if (pi->ver.len > 0) { + rot.SetRotLength(pi->ver.rot, pi->ver.len); + pi->ver.addX = rot.x() / pi->ver.len; + pi->ver.addY = rot.y() / pi->ver.len; + } + else { + pi->ver.addX = 0; + pi->ver.addY = 0; + } + if (pi->dia.len > 0) { + rot.SetRotLength(pi->dia.rot, pi->dia.len); + pi->dia.addX = rot.x() / pi->dia.len; + pi->dia.addY = rot.y() / pi->dia.len; + + rot.SetRotLength(pi->dia2.rot, pi->dia2.len); + pi->dia2.addX = rot.x() / pi->dia2.len; + pi->dia2.addY = rot.y() / pi->dia2.len; + } + else { + pi->dia.addX = 0; + pi->dia.addY = 0; + } + + 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; + } + ae->NewTmpWorld(); + ParamInfo8 pi; + + ToParam8(ae, infoP, &pi); + pi.bufH = ae->NewHandle( (pi.hor.len + pi.ver.len + pi.dia.len)* sizeof(PF_Pixel)+ 1024); + if (pi.bufH == NULL) { + err = PF_Err_OUT_OF_MEMORY; + return err; + } + pi.horTable = *(PF_Pixel**)(pi.bufH); + pi.verTable = (pi.horTable + pi.hor.len); + pi.diaTable = (pi.verTable + pi.ver.len); + //ターゲットエリア + ERR(ae->iterate8((refconType)&pi, TargetPixel)); + ae->out->SetMatMode(MAT::blackMat); + if (pi.info.target_maskDraw==TRUE) { + ae->out->fromBlackMat8(); + return err; + } + else { + + CopyAtoTemp(&pi); + TempRev(&pi); + for (A_long i = 0; i < 3; i++) { + ERR(MaxHor( &pi)); + ERR(MaxVer( &pi)); + } + TempSub(&pi); + blurTempRed(&pi); + + switch (pi.info.color_kind) + { + case 3: + ae->out->clear(); + StarDrawRainbow(&pi); + break; + case 2: + ScreenTemp(&pi); + StarDrawScreen(&pi); + break; + case 1: + default: + ae->out->clear(); + StarDrawColor(&pi); + CenterDraw(&pi); + break; + } + blur(&pi); + switch (pi.info.blend) + { + case 4: + ERR(ae->iterate8((refconType)&pi, BlendNormal)); + break; + case 3: + ERR(ae->iterate8((refconType)&pi, BlendAdd)); + break; + case 2: + ERR(ae->iterate8((refconType)&pi, BlendScreen)); + break; + case 1: + default: + break; + } + + ae->out->fromBlackMat8(); + + } + + if (pi.bufH != NULL) { + ae->DisposeHandle(pi.bufH); + pi.bufH = NULL; + } + + return err; + +} \ No newline at end of file diff --git a/Star_Colorful/Win/Star_Colorful.sln b/Star_Colorful/Win/Star_Colorful.sln new file mode 100644 index 0000000..ab2d838 --- /dev/null +++ b/Star_Colorful/Win/Star_Colorful.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}") = "Star_Colorful", "Star_Colorful.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/Star_Colorful/Win/Star_Colorful.vcxproj b/Star_Colorful/Win/Star_Colorful.vcxproj new file mode 100644 index 0000000..08d0fd1 --- /dev/null +++ b/Star_Colorful/Win/Star_Colorful.vcxproj @@ -0,0 +1,595 @@ + + + + + Debug + Win32 + + + Debug + x64 + + + Release-MD + Win32 + + + Release-MD + x64 + + + Release + Win32 + + + Release + x64 + + + + {D29C628E-C486-467B-B09E-29206F95A625} + Star_Colorful + Star_Colorful + 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/Star_Colorful.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/Star_Colorful.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/Star_Colorful.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/Star_Colorful.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/Star_Colorful.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/Star_Colorful.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/Star_Colorful/Win/Star_Colorful.vcxproj.filters b/Star_Colorful/Win/Star_Colorful.vcxproj.filters new file mode 100644 index 0000000..4d40f13 --- /dev/null +++ b/Star_Colorful/Win/Star_Colorful.vcxproj.filters @@ -0,0 +1,190 @@ + + + + + {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/Star_Colorful/Win/Star_ColorfulPiPL.rc b/Star_Colorful/Win/Star_ColorfulPiPL.rc new file mode 100644 index 0000000..6cda26d --- /dev/null +++ b/Star_Colorful/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/Thin/Fs_Entry.h b/Thin/Fs_Entry.h new file mode 100644 index 0000000..2878342 --- /dev/null +++ b/Thin/Fs_Entry.h @@ -0,0 +1,227 @@ +//----------------------------------------------------------------------------------- +/* + Thin 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/Thin/Fs_Target.h b/Thin/Fs_Target.h new file mode 100644 index 0000000..91125d8 --- /dev/null +++ b/Thin/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 Thin" + +//----------------------------------------------------------------------------------- +//プラグインの説明に使われる文字 +#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/Thin/Thin.cpp b/Thin/Thin.cpp new file mode 100644 index 0000000..eb35c90 --- /dev/null +++ b/Thin/Thin.cpp @@ -0,0 +1,396 @@ +//----------------------------------------------------------------------------------- +/* + F's Plugins for VS2010/VS2012 +*/ +//----------------------------------------------------------------------------------- + + +#include "Thin.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_VALUE, //パラメータの名前 + 0, //数値入力する場合の最小値 + 16, //数値入力する場合の最大値 + 0, //スライダーの最小値 + 4, //スライダーの最大値 + 0, //デフォルトの値 + ID_VALUE + ); + //---------------------------------------------------------------- + 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, + 0x05, + 0x05, + 0x05, + ID_COLOR1 + ); + //---------------------------------------------------------------- + AEFX_CLR_STRUCT(def); + PF_ADD_CHECKBOX(STR_COLOR2_ON, + STR_ON, + FALSE, + 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, + FALSE, + 0, + ID_COLOR3_ON + ); + //---------------------------------------------------------------- + //色の指定 + AEFX_CLR_STRUCT(def); + PF_ADD_COLOR( STR_COLOR3, + 0xFF, + 0x00, + 0x00, + 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, + 0xFF, + 0x00, + ID_COLOR4 + ); + //---------------------------------------------------------------- + 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_WHITE, + STR_ON, + FALSE, + 0, + ID_WHITE + ); + //---------------------------------------------------------------- + AEFX_CLR_STRUCT(def); + PF_ADD_CHECKBOX(STR_ALPHAZERO, + STR_ON, + FALSE, + 0, + ID_ALPHAZERO + ); + + //---------------------------------------------------------------- + AEFX_CLR_STRUCT(def); + PF_ADD_CHECKBOX(STR_EDGE, + STR_ON, + FALSE, + 0, + ID_EDGE + ); + //---------------------------------------------------------------- + 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); + + + 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); + + + 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); + + 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_Err GetParams(CFsAE *ae, ParamInfo *infoP) +{ + PF_Err err = PF_Err_NONE; + + ERR(ae->GetADD(ID_VALUE,&infoP->value)); + + 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++; + } + } + infoP->colorMax = idx; + + ERR(ae->GetFLOAT(ID_LEVEL,&infoP->level)); + infoP->level/=100; + + ERR(ae->GetCHECKBOX(ID_WHITE,&infoP->white)); + ERR(ae->GetCHECKBOX(ID_ALPHAZERO,&infoP->alphaZero)); + ERR(ae->GetCHECKBOX(ID_EDGE,&infoP->edge)); + + return err; +} +//------------------------------------------------------------------------------------------------- +static PF_Err + Exec (CFsAE *ae , ParamInfo *infoP) +{ + PF_Err err = PF_Err_NONE; + + //画面をコピー + ERR(ae->CopyInToOut()); + + if ( (infoP->colorMax<=0)||(infoP->value<=0)) + { + return err; + } + switch(ae->pixelFormat()) + { + case PF_PixelFormat_ARGB128: + //ERR(ae->iterate32((refconType)infoP,FilterImage32)); + ERR(thinExec32(ae,infoP)); + break; + case PF_PixelFormat_ARGB64: + //ERR(ae->iterate16((refconType)infoP,FilterImage16)); + ERR(thinExec16(ae,infoP)); + break; + case PF_PixelFormat_ARGB32: + //ERR(ae->iterate8((refconType)infoP,FilterImage8)); + ERR(thinExec8(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/Thin/Thin.h b/Thin/Thin.h new file mode 100644 index 0000000..0a13c65 --- /dev/null +++ b/Thin/Thin.h @@ -0,0 +1,201 @@ +//----------------------------------------------------------------------------------- +/* + Thin for VS2010 +*/ +//----------------------------------------------------------------------------------- + +#pragma once +#ifndef Thin_H +#define Thin_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" + +//ユーザーインターフェースのID +//ParamsSetup関数とRender関数のparamsパラメータのIDになる +enum { + ID_INPUT = 0, // default input layer + + ID_VALUE, + + ID_COLOR1_ON, + ID_COLOR1, + ID_COLOR2_ON, + ID_COLOR2, + ID_COLOR3_ON, + ID_COLOR3, + ID_COLOR4_ON, + ID_COLOR4, + ID_LEVEL, + + ID_WHITE, + ID_ALPHAZERO, + ID_EDGE, + + ID_NUM_PARAMS +}; + +//UIの表示文字列 +#define STR_VALUE "ThinValue" +#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_COLOR1 "Color1" +#define STR_COLOR2 "Color2" +#define STR_COLOR3 "Color3" +#define STR_COLOR4 "Color4" + +#define STR_WHITE "NoWhite" +#define STR_ALPHAZERO "NoAlphaZero" +#define STR_EDGE "EdgeFilter" + +#define STR_LEVEL "level" + +#define COLOR_MAX 4 +//UIのパラメータ +typedef struct ParamInfo { + A_long value; + A_long colorMax; + PF_Pixel color[COLOR_MAX]; + + PF_Boolean white; + PF_Boolean alphaZero; + PF_Boolean edge; + + PF_FpLong level; +} ParamInfo, *ParamInfoP, **ParamInfoH; + +//------------------------------------------------------- +typedef struct thinInfo8 { + A_long w; + A_long wt; + A_long wt2; + A_long h; + A_long offset; + PF_Handle scanlineH; + PF_Pixel *scanline; + PF_Pixel *data; + + PF_Boolean white; + PF_Boolean alphaZero; + PF_Boolean edge; + + A_long colorMax; + PF_Pixel color[COLOR_MAX]; + A_long level; + A_long nowX; + A_long nowY; + +} thinInfo8; +typedef struct thinBak8 { + PF_Boolean drawFlag; + PF_Pixel color; + A_long dir; +} thinBak8; + +typedef struct thinInfo16 { + A_long w; + A_long wt; + A_long wt2; + A_long h; + A_long offset; + PF_Handle scanlineH; + PF_Pixel16 *scanline; + PF_Pixel16 *data; + + PF_Boolean white; + PF_Boolean alphaZero; + PF_Boolean edge; + + A_long colorMax; + PF_Pixel16 color[COLOR_MAX]; + PF_Pixel color8[COLOR_MAX]; + A_long level; + A_long nowX; + A_long nowY; + +} thinInfo16; + +typedef struct thinBak16 { + PF_Boolean drawFlag; + PF_Pixel16 color; + A_long dir; +} thinBak16; + +typedef struct thinInfo32 { + A_long w; + A_long wt; + A_long wt2; + A_long h; + A_long offset; + PF_Handle scanlineH; + PF_PixelFloat *scanline; + PF_PixelFloat *data; + + PF_Boolean white; + PF_Boolean alphaZero; + PF_Boolean edge; + + A_long colorMax; + PF_PixelFloat color[COLOR_MAX]; + PF_Pixel color8[COLOR_MAX]; + A_long level; + A_long nowX; + A_long nowY; + +} thinInfo32; +typedef struct thinBak32 { + PF_Boolean drawFlag; + PF_PixelFloat color; + A_long dir; +} thinBak32; + +//--------------------------------------------------------------------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 thinExec8(CFsAE *ae , ParamInfo *infoP); +PF_Err thinExec16(CFsAE *ae , ParamInfo *infoP); +PF_Err thinExec32(CFsAE *ae , ParamInfo *infoP); +#endif // Thin_H diff --git a/Thin/ThinPiPL.r b/Thin/ThinPiPL.r new file mode 100644 index 0000000..98b2313 --- /dev/null +++ b/Thin/ThinPiPL.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/Thin/ThinSub16.cpp b/Thin/ThinSub16.cpp new file mode 100644 index 0000000..1f53686 --- /dev/null +++ b/Thin/ThinSub16.cpp @@ -0,0 +1,1421 @@ +#include "Thin.h" + + +//***************************************************************************** +inline PF_Boolean CompPx(thinInfo16 *ti, PF_Pixel16 p) +{ + PF_Boolean ret = FALSE; + PF_Pixel p2 = CONV16TO8(p); + for (A_long i=0; icolorMax; i++){ + if ( ( F_ABS((A_long)ti->color8[i].red - (A_long)p2.red ) <= ti->level) + &&( F_ABS((A_long)ti->color8[i].green - (A_long)p2.green) <= ti->level) + &&( F_ABS((A_long)ti->color8[i].blue - (A_long)p2.blue ) <= ti->level)){ + ret = TRUE; + break; + } + } + return ret; +} +//***************************************************************************** +inline PF_Boolean CompPxs(thinInfo16 *ti, PF_Pixel16 p1,PF_Pixel16 p2,PF_Pixel16 p3) +{ + PF_Boolean ret = FALSE; + PF_Pixel pp1 = CONV16TO8(p1); + PF_Pixel pp2 = CONV16TO8(p2); + PF_Pixel pp3 = CONV16TO8(p2); + if ( ( F_ABS((A_long)pp1.red - (A_long)pp2.red ) <= ti->level) + &&( F_ABS((A_long)pp1.green - (A_long)pp2.green) <= ti->level) + &&( F_ABS((A_long)pp1.blue - (A_long)pp2.blue ) <= ti->level)){ + if ( ( F_ABS((A_long)pp1.red - (A_long)pp3.red ) <= ti->level) + &&( F_ABS((A_long)pp1.green - (A_long)pp3.green) <= ti->level) + &&( F_ABS((A_long)pp1.blue - (A_long)pp3.blue ) <= ti->level)){ + ret = TRUE; + } + } + return ret; +} +//***************************************************************************** +inline PF_Boolean CompPxs2(thinInfo16 *ti, PF_Pixel16 p1,PF_Pixel16 p2) +{ + PF_Boolean ret = FALSE; + PF_Pixel pp1 = CONV16TO8(p1); + PF_Pixel pp2 = CONV16TO8(p2); + if ( ( F_ABS((A_long)pp1.red - (A_long)pp2.red ) <= ti->level) + &&( F_ABS((A_long)pp1.green - (A_long)pp2.green) <= ti->level) + &&( F_ABS((A_long)pp1.blue - (A_long)pp2.blue ) <= ti->level)){ + ret = TRUE; + } + return ret; +} + + +//***************************************************************************** +inline void scanlineCopy(thinInfo16 *ti, A_long y) +{ + //スキャンラインへコピー + A_long v = 0; + if (y ==0) { + for ( int i=0; iw; i++ ){ + ti->scanline[i ] = ti->data[i ]; + ti->scanline[i + ti->wt ] = ti->data[i ]; + ti->scanline[i + ti->wt2] = ti->data[i + ti->wt]; + } + }else{ + for ( int i=0; iw; i++ ){ + ti->scanline[i ] = ti->scanline[i + ti->wt ]; + ti->scanline[i + ti->wt ] = ti->scanline[i + ti->wt2]; + } + if (yh-1 ){ + v = (y+1)*ti->wt; + for ( int i=0; iw; i++ ){ + ti->scanline[i + ti->wt2] = ti->data[i + v]; + } + } + } +} +//***************************************************************************** +inline void scanlineCopyB(thinInfo16 *ti, A_long y) +{ + //スキャンラインへコピー + A_long v0 = 0; + A_long v1 = 0; + A_long v2 = 0; + if (y ==0) { + v0 = 0; + v1 = 0; + v2 = ti->wt; + + }else if (y==ti->h-1 ){ + v0 = (y-1) * ti->wt; + v1 = y * ti->wt; + v2 = v1; + }else{ + v0 = (y-1) * ti->wt; + v1 = (y ) * ti->wt; + v2 = (y+1) * ti->wt; + } + for ( int i=0; iw; i++ ){ + ti->scanline[i ] = ti->data[i + v0]; + ti->scanline[i + ti->wt ] = ti->data[i + v1]; + ti->scanline[i + ti->wt2] = ti->data[i + v2]; + } +} +//***************************************************************************** +inline PF_Pixel16 getScanLine(thinInfo16 *ti, A_long offsetX, A_long offsetY) +{ + A_long xx = ti->nowX + offsetX; + A_long yy = 1 + offsetY; + if (xx<0) { + xx =0; + } else if (xx>=ti->w) { + xx = ti->w -1; + } + if (yy<0) { + yy =0; + } else if (yy>2) { + yy= 2; + } + + return ti->scanline[ xx + yy*ti->wt]; +} +//***************************************************************************** +inline PF_Boolean getData(thinInfo16 *ti, A_long offsetX, A_long offsetY) +{ + A_long xx = ti->nowX + offsetX; + A_long yy = ti->nowY + offsetY; + if (xx<0) { + xx =0; + } else if (xx>=ti->w) { + xx = ti->w -1; + } + if (yy<0) { + yy =0; + } else if (yy>=ti->h) { + yy= ti->h-1; + } + PF_Pixel16 p = ti->data[ xx + yy*ti->wt]; + + return CompPx(ti,p); +} +//***************************************************************************** +inline PF_Pixel16 getPx(thinInfo16 *ti, A_long offsetX, A_long offsetY) +{ + A_long xx = ti->nowX + offsetX; + A_long yy = ti->nowY + offsetY; + if (xx<0) { + xx =0; + } else if (xx>=ti->w) { + xx = ti->w -1; + } + if (yy<0) { + yy =0; + } else if (yy>=ti->h) { + yy= ti->h-1; + } + PF_Pixel16 p = ti->data[ xx + yy*ti->wt]; + + return p; +} +//***************************************************************************** +inline PF_Pixel16 minColor(PF_Pixel16 s,PF_Pixel16 d) +{ + A_long ss = (A_long)s.red + (A_long)s.green + (A_long)s.blue; + A_long dd = (A_long)d.red + (A_long)d.green + (A_long)d.blue; + if (ss7) { + return ret; + }else if (patCount<=0){ + ret.drawFlag = TRUE; + PF_Pixel16 c = minColor(table[1],table[3]); + c = minColor(c,table[4]); + c = minColor(c,table[6]); + ret.color = c; + return ret; + }else if (patCount==7){ + //****************************************** +//●○● +//●●● +//●●● +//0XBF(191) +//10111111 + if (pat==0xBF) { + if (getData(ti,0,1)==TRUE){ + ret.drawFlag = TRUE; + ret.color = table[1]; + } + return ret; + } +//●●● +//○●● +//●●● +//0XEF(239) +//11101111 + if (pat==0xEF) { + if (getData(ti,1,0)==TRUE){ + ret.drawFlag = TRUE; + ret.color = table[3]; + } + return ret; + } +//●●● +//●●● +//●○● +//0XFD(253) +//11111101 + if (pat==0xFD) { + if (getData(ti,0,-1)==TRUE){ + ret.drawFlag = TRUE; + ret.color = table[6]; + } + return ret; + } +//●●● +//●●○ +//●●● +//0XF7(247) +//11110111 + if (pat==0x7F) { + if (getData(ti,-1,0)==TRUE){ + ret.drawFlag = TRUE; + ret.color = table[4]; + } + return ret; + } + }else if (patCount==6){ + //****************************************** +//●◎○ +//●●● +//●●● +//0X9F(159) +//10011111 +//○◎● +//●●● +//●●● +//0X3F(63) +//00111111 + if ((pat==0x9F)||(pat==0x3F)) { + if (getData(ti,0,-1)==TRUE){ + ret.drawFlag = TRUE; + ret.color = table[1]; + } + return ret; + } + +//○●● +//◎●● +//●●● +//0X6F(111) +//01101111 +//●●● +//◎●● +//○●● +//0XEB(235) +//11101011 + else if ((pat==0x6F)||(pat==0xEB)) { + if (getData(ti,1,0)==TRUE){ + ret.drawFlag = TRUE; + ret.color = table[3]; + } + return ret; + } +//●●● +//●●● +//○◎● +//0XF9(249) +//11111001 +//●●● +//●●● +//●◎○ +//0XFC(252) +//11111100 + else if ((pat==0xF9)||(pat==0xFC)) { + if (getData(ti,0,-1)==TRUE){ + ret.drawFlag = TRUE; + ret.color = table[6]; + } + return ret; + } +//●●● +//●●◎ +//●●○ +//0XF6(246) +//11110110 +//●●○ +//●●◎ +//●●● +//0XD7(215) +//11010111 + else if ((pat==0xF6)||(pat==0xD7)) { + if (getData(ti,-1,0)==TRUE){ + ret.drawFlag = TRUE; + ret.color = table[4]; + } + return ret; + } + //****************************************** + }else if (patCount == 5){ +//●●● +//●●● +//○◎○ +//0XF8(248) +//11111000 + if (pat==0xF8) { + if (getData(ti,0,-1)==TRUE){ + ret.drawFlag = TRUE; + ret.color = table[6]; + } + return ret; + } +//○◎○ +//●●● +//●●● +//0X1F(31) +//00011111 + if (pat==0x1F) { + if (getData(ti,0,1)==TRUE){ + ret.drawFlag = TRUE; + ret.color = table[1]; + } + return ret; + } +//○●● +//◎●● +//○●● +//0X6B(107) +//01101011 + else if (pat==0x6B) { + if (getData(ti,1,0)==TRUE){ + ret.drawFlag = TRUE; + ret.color = table[3]; + } + return ret; + } +//●●○ +//●●◎ +//●●○ +//0XD6(214) +//11010110 + else if (pat==0xF8) { + if (getData(ti,-1,0)==TRUE){ + ret.drawFlag = TRUE; + ret.color = table[4]; + } + return ret; + } +//●○◎ +//●●○ +//●●● +//0X97(151) +//10010111 + else if (pat==0x97) { + ret.drawFlag = TRUE; + ret.color = minColor(table[1],table[4]); + return ret; + } +//◎○● +//○●● +//●●● +//0X2F(47) +//00101111 + else if (pat==0x2F) { + ret.drawFlag = TRUE; + ret.color = minColor(table[1],table[3]); + return ret; + } +//●●● +//○●● +//◎○● +//0XE9(233) +//11101001 + else if (pat==0xE9) { + ret.drawFlag = TRUE; + ret.color = minColor(table[3],table[6]); + return ret; + } +//●●● +//●●○ +//●○◎ +//0XF4(244) +//11110100 + else if (pat==0xF4) { + ret.drawFlag = TRUE; + ret.color = minColor(table[4],table[6]); + return ret; + } +//○●○ +//●●● +//●○● +//0X5D(93) +//01011101 + else if (pat==0x5D) { + if (getData(ti,0,-1)==TRUE){ + ret.drawFlag = TRUE; + ret.color = table[6]; + } + return ret; + } +//○●● +//●●○ +//○●● +//0X73(115) +//01110011 + else if (pat==0x73) { + if (getData(ti,-1,0)==TRUE){ + ret.drawFlag = TRUE; + ret.color = table[4]; + } + return ret; + } +//●○● +//●●● +//○●○ +//0XBA(186) +//10111010 + else if (pat==0xBA) { + if (getData(ti,0,-1)==TRUE){ + ret.drawFlag = TRUE; + ret.color = table[1]; + } + return ret; + } +//●●○ +//○●● +//●●○ +//0XCE(206) +//11001110 + else if (pat==0xCE) { + if (getData(ti,1,0)==TRUE){ + ret.drawFlag = TRUE; + ret.color = table[3]; + } + return ret; + } + //****************************************** + }else if (patCount == 4){ +//◎○○ +//○●● +//●●● +//0XF(15) +//00001111 +//◎○● +//○●● +//○●● +//0X2B(43) +//00101011 + if ((pat==0x0F)||(pat==0x2B)) { + ret.drawFlag = TRUE; + ret.color = minColor(table[1],table[3]); + return ret; + } +//○●● +//○●● +//◎○● +//0X69(105) +//01101001 +//●●● +//○●● +//◎○○ +//0XE8(232) +//11101000 + else if ((pat==0x69)||(pat==0xE8)) { + ret.drawFlag = TRUE; + ret.color = minColor(table[3],table[6]); + return ret; + } + +//●●● +//●●○ +//○○◎ +//0XF0(240) +//11110000 +//●●○ +//●●○ +//●○◎ +//0XD4(212) +//11010100 + else if ((pat==0xF0)||(pat==0xD4)) { + ret.drawFlag = TRUE; + ret.color = minColor(table[4],table[6]); + return ret; + } +//●○◎ +//●●○ +//●●○ +//0X96(150) +//10010110 +//○○◎ +//●●○ +//●●● +//0X17(23) +//00010111 + else if ((pat==0x96)||(pat==0x17)) { + ret.drawFlag = TRUE; + ret.color = minColor(table[1],table[4]); + return ret; + } +//●●○ +//○●● +//○○● +//0XC9(201) +//11001001 + else if (pat==0xC9) { + if ((getData(ti,0,-1)==TRUE)&&(getData(ti,1,0)==TRUE)){ + ret.drawFlag = TRUE; + ret.color = minColor(table[3],table[6]); + } + return ret; + } +//○●● +//●●○ +//●○○ +//0X74(116) +//01110100 + else if (pat==0x74) { + if ((getData(ti,0,-1)==TRUE)&&(getData(ti,-1,0)==TRUE)){ + ret.drawFlag = TRUE; + ret.color = minColor(table[4],table[6]); + } + return ret; + } +//●○○ +//●●○ +//○●● +//0X93(147) +//10010011 + else if (pat==0x93) { + if ((getData(ti,-1,0)==TRUE)&&(getData(ti,0,1)==TRUE)){ + ret.drawFlag = TRUE; + ret.color = minColor(table[1],table[4]); + } + return ret; + } +//○○● +//○●● +//●●○ +//0X2E(46) +//00101110 + else if (pat==0x2E) { + if ((getData(ti,1,0)==TRUE)&&(getData(ti,0,1)==TRUE)){ + ret.drawFlag = TRUE; + ret.color = minColor(table[1],table[3]); + } + return ret; + } + //****************************************** + }else if (patCount == 3){ +//●●● +//○●○ +//○◎○ +//0XE0(224) +//11100000 + if (pat==0xE0) { + if (getData(ti,0,-1)==TRUE){ + ret.drawFlag = TRUE; + ret.color = minColor(minColor(table[3],table[4]),table[6]); + } + return ret; + } +//●○○ +//●●◎ +//●○○ + else if (pat==0x94) { + if (getData(ti,-1,0)==TRUE){ + ret.drawFlag = TRUE; + ret.color = minColor(minColor(table[1],table[4]),table[6]); + } + return ret; + } +//○◎○ +//○●○ +//●●● + else if (pat==0x07) { + if (getData(ti,0,1)==TRUE){ + ret.drawFlag = TRUE; + ret.color = minColor(minColor(table[1],table[3]),table[4]); + } + return ret; + } +//○○● +//◎●● +//○○● + else if (pat==0x29) { + if (getData(ti,1,0)==TRUE){ + ret.drawFlag = TRUE; + ret.color = minColor(minColor(table[1],table[3]),table[6]); + } + return ret; + } +//○●● +//●●◎ +//○○○ +//0X70(112) +//01110000 + else if (pat==0x70) { + if (getData(ti,0,-1)==TRUE){ + ret.drawFlag = TRUE; + ret.color = minColor(table[4],table[6]); + } + return ret; + } +//○○○ +//●●◎ +//○●● +//0X13(19) +//00010011 + else if (pat==0x13) { + if (getData(ti,-1,0)==TRUE){ + ret.drawFlag = TRUE; + ret.color = minColor(table[4],table[1]); + } + return ret; + } +//○◎● +//○●● +//○●○ +//0X2A(42) +//00101010 + else if (pat==0x2A) { + if (getData(ti,1,0)==TRUE){ + ret.drawFlag = TRUE; + ret.color = minColor(table[1],table[3]); + } + return ret; + } +//●◎○ +//●●○ +//○●○ +//0X92(146) +//10010010 + else if (pat==0x92) { + if (getData(ti,-1,0)==TRUE){ + ret.drawFlag = TRUE; + ret.color = minColor(table[1],table[4]); + } + return ret; + } +//●●○ +//◎●● +//○○○ +//0XC8(200) +//11001000 + else if (pat==0x2A) { + if (getData(ti,0,-1)==TRUE){ + ret.drawFlag = TRUE; + ret.color = minColor(table[3],table[6]); + } + return ret; + } +//○○○ +//◎●● +//●●○ +//0XE(14) +//00001110 + else if (pat==0x0E) { + if (getData(ti,1,0)==TRUE){ + ret.drawFlag = TRUE; + ret.color = minColor(table[1],table[3]); + } + return ret; + } + +//●●○ +//●●○ +//○○○ +//0XD0(208) +//11010000 + if (pat==0xD0) { + if ((getData(ti,0,-1)==TRUE)&&(getData(ti,-1,0)==TRUE)){ + ret.drawFlag = TRUE; + ret.color = minColor(table[4],table[6]); + } + return ret; + } +//○○○ +//●●○ +//●●○ +//0X16(22) +//00010110 + if (pat==0x16) { + if ((getData(ti,-1,0)==TRUE)&&(getData(ti,0,1)==TRUE)){ + ret.drawFlag = TRUE; + ret.color = minColor(table[1],table[4]); + } + return ret; + } +//○○○ +//○●● +//○●● +//0XB(11) +//00001011 + if (pat==0x0B) { + if ((getData(ti,1,0)==TRUE)&&(getData(ti,0,1)==TRUE)){ + ret.drawFlag = TRUE; + ret.color = minColor(table[1],table[3]); + } + return ret; + } + //****************************************** + }else if (patCount == 2){ +//○●○ +//●●○ +//○○○ +//0X50(80) +//01010000 + if (pat==0x50) { + if ((getData(ti,0,-1)==TRUE)&&(getData(ti,-1,0)==TRUE)){ + ret.drawFlag = TRUE; + ret.color = minColor(table[4],table[6]); + } + return ret; + } +//○○○ +//●●○ +//○●○ +//0X12(18) +//00010010 + else if (pat==0x12) { + if ((getData(ti,-1,0)==TRUE)&&(getData(ti,0,1)==TRUE)){ + ret.drawFlag = TRUE; + ret.color = minColor(table[1],table[4]); + } + return ret; + } +//○○○ +//○●● +//○●○ +//0XA(10) +//00001010 + else if (pat==0x0A) { + if ((getData(ti,1,0)==TRUE)&&(getData(ti,0,1)==TRUE)){ + ret.drawFlag = TRUE; + ret.color = minColor(table[1],table[3]); + } + return ret; + } +//○●○ +//○●● +//○○○ +//0X48(72) +//01001000 + else if (pat==0x48) { + if ((getData(ti,0,-1)==TRUE)&&(getData(ti,1,0)==TRUE)){ + ret.drawFlag = TRUE; + ret.color = minColor(table[3],table[6]); + } + return ret; + } + } + return ret; +} +//***************************************************************************** +PF_Err thinExec16(CFsAE *ae , ParamInfo *infoP) +{ + PF_Err err = PF_Err_NONE; + thinInfo16 ti; + + + + ti.colorMax = infoP->colorMax; + if (ti.colorMax<=0) return err; + + for (A_long i=0; icolorMax; i++) { + ti.color[i] = CONV8TO16( infoP->color[i]); + ti.color8[i] = infoP->color[i]; + } + ti.level = (A_long)((double)PF_MAX_CHAN8 * infoP->level + 0.5); + + ti.w = ae->out->width(); + ti.wt = ae->out->widthTrue(); + ti.wt2 = ti.wt*2; + ti.h = ae->out->height(); + ti.offset = ti.wt - ti.w; + + //メモリの確保 + ti.scanlineH = ae->NewHandle(ti.wt * sizeof(PF_Pixel16) * 4);// 3Line分 と余裕 + if ( !ti.scanlineH ) return PF_Err_INTERNAL_STRUCT_DAMAGED; + + ti.scanline = *(PF_Pixel16**)ti.scanlineH; ; + ti.data = (PF_Pixel16 *)ae->out->data(); + ti.white = infoP->white; + ti.alphaZero = infoP->alphaZero; + ti.edge = infoP->edge; + + A_long now = 0; + //exec + for (A_long vv=0; vvvalue; vv++){ + now = 0; + if (ti.edge==TRUE){ + for (A_long j = 0; j0) { + now2 = now - ti.wt; + }else{ + tb.drawFlag = FALSE; + } + break; + case 1: + if (ti.nowX<(ti.w-1)) { + now2 = now + 1; + }else{ + tb.drawFlag = FALSE; + } + break; + case 2: + if (ti.nowY<(ti.h-1)) { + now2 = now + ti.wt; + }else{ + tb.drawFlag = FALSE; + } + break; + case 3: + if (ti.nowX>0) { + now2 = now - 1; + }else{ + tb.drawFlag = FALSE; + } + break; + } + } + if (tb.drawFlag ==TRUE) { + PF_Pixel16 p = ti.data[now2]; + if (ti.white == TRUE) { + if ((p.blue == PF_MAX_CHAN16) + &&(p.green == PF_MAX_CHAN16) + &&(p.red == PF_MAX_CHAN16) + &&(p.alpha == PF_MAX_CHAN16)) + { + tb.drawFlag = FALSE; + } + } + if (ti.alphaZero == TRUE) { + if (p.alpha ==0) + { + tb.drawFlag = FALSE; + } + } + if (tb.drawFlag ==TRUE) { + ti.data[now2] = tb.color; + } + } + } + now++; + + } + now += ti.offset; + + } + } + + if (ti.scanlineH != NULL){ + ae->DisposeHandle(ti.scanlineH); + ti.scanlineH = NULL; + } + + + return err; +} diff --git a/Thin/ThinSub32.cpp b/Thin/ThinSub32.cpp new file mode 100644 index 0000000..3c20dde --- /dev/null +++ b/Thin/ThinSub32.cpp @@ -0,0 +1,1418 @@ +#include "Thin.h" + + +//***************************************************************************** +inline PF_Boolean CompPx(thinInfo32 *ti, PF_PixelFloat p) +{ + PF_Boolean ret = FALSE; + PF_Pixel p2 = CONV32TO8(p); + for (A_long i=0; icolorMax; i++){ + if ( ( F_ABS((A_long)ti->color8[i].red - (A_long)p2.red ) <= ti->level) + &&( F_ABS((A_long)ti->color8[i].green - (A_long)p2.green) <= ti->level) + &&( F_ABS((A_long)ti->color8[i].blue - (A_long)p2.blue ) <= ti->level)){ + ret = TRUE; + break; + } + } + return ret; +} +//***************************************************************************** +inline PF_Boolean CompPxs(thinInfo32 *ti, PF_PixelFloat p1,PF_PixelFloat p2,PF_PixelFloat p3) +{ + PF_Boolean ret = FALSE; + PF_Pixel pp1 = CONV32TO8(p1); + PF_Pixel pp2 = CONV32TO8(p2); + PF_Pixel pp3 = CONV32TO8(p3); + if ( ( F_ABS((A_long)pp1.red - (A_long)pp2.red ) <= ti->level) + &&( F_ABS((A_long)pp1.green - (A_long)pp2.green) <= ti->level) + &&( F_ABS((A_long)pp1.blue - (A_long)pp2.blue ) <= ti->level)){ + if ( ( F_ABS((A_long)pp1.red - (A_long)pp3.red ) <= ti->level) + &&( F_ABS((A_long)pp1.green - (A_long)pp3.green) <= ti->level) + &&( F_ABS((A_long)pp1.blue - (A_long)pp3.blue ) <= ti->level)){ + ret = TRUE; + } + } + return ret; +} +//***************************************************************************** +inline PF_Boolean CompPxs2(thinInfo32 *ti, PF_PixelFloat p1,PF_PixelFloat p2) +{ + PF_Boolean ret = FALSE; + PF_Pixel pp1 = CONV32TO8(p1); + PF_Pixel pp2 = CONV32TO8(p2); + if ( ( F_ABS((A_long)pp1.red - (A_long)pp2.red ) <= ti->level) + &&( F_ABS((A_long)pp1.green - (A_long)pp2.green) <= ti->level) + &&( F_ABS((A_long)pp1.blue - (A_long)pp2.blue ) <= ti->level)){ + ret = TRUE; + } + return ret; +} + + +//***************************************************************************** +inline void scanlineCopy(thinInfo32 *ti, A_long y) +{ + //スキャンラインへコピー + A_long v = 0; + if (y ==0) { + for ( int i=0; iw; i++ ){ + ti->scanline[i ] = ti->data[i ]; + ti->scanline[i + ti->wt ] = ti->data[i ]; + ti->scanline[i + ti->wt2] = ti->data[i + ti->wt]; + } + }else{ + for ( int i=0; iw; i++ ){ + ti->scanline[i ] = ti->scanline[i + ti->wt ]; + ti->scanline[i + ti->wt ] = ti->scanline[i + ti->wt2]; + } + if (yh-1 ){ + v = (y+1)*ti->wt; + for ( int i=0; iw; i++ ){ + ti->scanline[i + ti->wt2] = ti->data[i + v]; + } + } + } +} +//***************************************************************************** +inline void scanlineCopyB(thinInfo32 *ti, A_long y) +{ + //スキャンラインへコピー + A_long v0 = 0; + A_long v1 = 0; + A_long v2 = 0; + if (y ==0) { + v0 = 0; + v1 = 0; + v2 = ti->wt; + + }else if (y==ti->h-1 ){ + v0 = (y-1) * ti->wt; + v1 = y * ti->wt; + v2 = v1; + }else{ + v0 = (y-1) * ti->wt; + v1 = (y ) * ti->wt; + v2 = (y+1) * ti->wt; + } + for ( int i=0; iw; i++ ){ + ti->scanline[i ] = ti->data[i + v0]; + ti->scanline[i + ti->wt ] = ti->data[i + v1]; + ti->scanline[i + ti->wt2] = ti->data[i + v2]; + } +} +//***************************************************************************** +inline PF_PixelFloat getScanLine(thinInfo32 *ti, A_long offsetX, A_long offsetY) +{ + A_long xx = ti->nowX + offsetX; + A_long yy = 1 + offsetY; + if (xx<0) { + xx =0; + } else if (xx>=ti->w) { + xx = ti->w -1; + } + if (yy<0) { + yy =0; + } else if (yy>2) { + yy= 2; + } + + return ti->scanline[ xx + yy*ti->wt]; +} +//***************************************************************************** +inline PF_Boolean getData(thinInfo32 *ti, A_long offsetX, A_long offsetY) +{ + A_long xx = ti->nowX + offsetX; + A_long yy = ti->nowY + offsetY; + if (xx<0) { + xx =0; + } else if (xx>=ti->w) { + xx = ti->w -1; + } + if (yy<0) { + yy =0; + } else if (yy>=ti->h) { + yy= ti->h-1; + } + PF_PixelFloat p = ti->data[ xx + yy*ti->wt]; + + return CompPx(ti,p); +} +//***************************************************************************** +inline PF_PixelFloat getPx(thinInfo32 *ti, A_long offsetX, A_long offsetY) +{ + A_long xx = ti->nowX + offsetX; + A_long yy = ti->nowY + offsetY; + if (xx<0) { + xx =0; + } else if (xx>=ti->w) { + xx = ti->w -1; + } + if (yy<0) { + yy =0; + } else if (yy>=ti->h) { + yy= ti->h-1; + } + PF_PixelFloat p = ti->data[ xx + yy*ti->wt]; + + return p; +} +//***************************************************************************** +inline PF_PixelFloat minColor(PF_PixelFloat s,PF_PixelFloat d) +{ + double ss = (double)s.red + (double)s.green + (double)s.blue; + double dd = (double)d.red + (double)d.green + (double)d.blue; + if (ss7) { + return ret; + }else if (patCount<=0){ + ret.drawFlag = TRUE; + PF_PixelFloat c = minColor(table[1],table[3]); + c = minColor(c,table[4]); + c = minColor(c,table[6]); + ret.color = c; + return ret; + }else if (patCount==7){ + //****************************************** +//●○● +//●●● +//●●● +//0XBF(191) +//10111111 + if (pat==0xBF) { + if (getData(ti,0,1)==TRUE){ + ret.drawFlag = TRUE; + ret.color = table[1]; + } + return ret; + } +//●●● +//○●● +//●●● +//0XEF(239) +//11101111 + if (pat==0xEF) { + if (getData(ti,1,0)==TRUE){ + ret.drawFlag = TRUE; + ret.color = table[3]; + } + return ret; + } +//●●● +//●●● +//●○● +//0XFD(253) +//11111101 + if (pat==0xFD) { + if (getData(ti,0,-1)==TRUE){ + ret.drawFlag = TRUE; + ret.color = table[6]; + } + return ret; + } +//●●● +//●●○ +//●●● +//0XF7(247) +//11110111 + if (pat==0x7F) { + if (getData(ti,-1,0)==TRUE){ + ret.drawFlag = TRUE; + ret.color = table[4]; + } + return ret; + } + }else if (patCount==6){ + //****************************************** +//●◎○ +//●●● +//●●● +//0X9F(159) +//10011111 +//○◎● +//●●● +//●●● +//0X3F(63) +//00111111 + if ((pat==0x9F)||(pat==0x3F)) { + if (getData(ti,0,-1)==TRUE){ + ret.drawFlag = TRUE; + ret.color = table[1]; + } + return ret; + } + +//○●● +//◎●● +//●●● +//0X6F(111) +//01101111 +//●●● +//◎●● +//○●● +//0XEB(235) +//11101011 + else if ((pat==0x6F)||(pat==0xEB)) { + if (getData(ti,1,0)==TRUE){ + ret.drawFlag = TRUE; + ret.color = table[3]; + } + return ret; + } +//●●● +//●●● +//○◎● +//0XF9(249) +//11111001 +//●●● +//●●● +//●◎○ +//0XFC(252) +//11111100 + else if ((pat==0xF9)||(pat==0xFC)) { + if (getData(ti,0,-1)==TRUE){ + ret.drawFlag = TRUE; + ret.color = table[6]; + } + return ret; + } +//●●● +//●●◎ +//●●○ +//0XF6(246) +//11110110 +//●●○ +//●●◎ +//●●● +//0XD7(215) +//11010111 + else if ((pat==0xF6)||(pat==0xD7)) { + if (getData(ti,-1,0)==TRUE){ + ret.drawFlag = TRUE; + ret.color = table[4]; + } + return ret; + } + //****************************************** + }else if (patCount == 5){ +//●●● +//●●● +//○◎○ +//0XF8(248) +//11111000 + if (pat==0xF8) { + if (getData(ti,0,-1)==TRUE){ + ret.drawFlag = TRUE; + ret.color = table[6]; + } + return ret; + } +//○◎○ +//●●● +//●●● +//0X1F(31) +//00011111 + if (pat==0x1F) { + if (getData(ti,0,1)==TRUE){ + ret.drawFlag = TRUE; + ret.color = table[1]; + } + return ret; + } +//○●● +//◎●● +//○●● +//0X6B(107) +//01101011 + else if (pat==0x6B) { + if (getData(ti,1,0)==TRUE){ + ret.drawFlag = TRUE; + ret.color = table[3]; + } + return ret; + } +//●●○ +//●●◎ +//●●○ +//0XD6(214) +//11010110 + else if (pat==0xF8) { + if (getData(ti,-1,0)==TRUE){ + ret.drawFlag = TRUE; + ret.color = table[4]; + } + return ret; + } +//●○◎ +//●●○ +//●●● +//0X97(151) +//10010111 + else if (pat==0x97) { + ret.drawFlag = TRUE; + ret.color = minColor(table[1],table[4]); + return ret; + } +//◎○● +//○●● +//●●● +//0X2F(47) +//00101111 + else if (pat==0x2F) { + ret.drawFlag = TRUE; + ret.color = minColor(table[1],table[3]); + return ret; + } +//●●● +//○●● +//◎○● +//0XE9(233) +//11101001 + else if (pat==0xE9) { + ret.drawFlag = TRUE; + ret.color = minColor(table[3],table[6]); + return ret; + } +//●●● +//●●○ +//●○◎ +//0XF4(244) +//11110100 + else if (pat==0xF4) { + ret.drawFlag = TRUE; + ret.color = minColor(table[4],table[6]); + return ret; + } +//○●○ +//●●● +//●○● +//0X5D(93) +//01011101 + else if (pat==0x5D) { + if (getData(ti,0,-1)==TRUE){ + ret.drawFlag = TRUE; + ret.color = table[6]; + } + return ret; + } +//○●● +//●●○ +//○●● +//0X73(115) +//01110011 + else if (pat==0x73) { + if (getData(ti,-1,0)==TRUE){ + ret.drawFlag = TRUE; + ret.color = table[4]; + } + return ret; + } +//●○● +//●●● +//○●○ +//0XBA(186) +//10111010 + else if (pat==0xBA) { + if (getData(ti,0,-1)==TRUE){ + ret.drawFlag = TRUE; + ret.color = table[1]; + } + return ret; + } +//●●○ +//○●● +//●●○ +//0XCE(206) +//11001110 + else if (pat==0xCE) { + if (getData(ti,1,0)==TRUE){ + ret.drawFlag = TRUE; + ret.color = table[3]; + } + return ret; + } + //****************************************** + }else if (patCount == 4){ +//◎○○ +//○●● +//●●● +//0XF(15) +//00001111 +//◎○● +//○●● +//○●● +//0X2B(43) +//00101011 + if ((pat==0x0F)||(pat==0x2B)) { + ret.drawFlag = TRUE; + ret.color = minColor(table[1],table[3]); + return ret; + } +//○●● +//○●● +//◎○● +//0X69(105) +//01101001 +//●●● +//○●● +//◎○○ +//0XE8(232) +//11101000 + else if ((pat==0x69)||(pat==0xE8)) { + ret.drawFlag = TRUE; + ret.color = minColor(table[3],table[6]); + return ret; + } + +//●●● +//●●○ +//○○◎ +//0XF0(240) +//11110000 +//●●○ +//●●○ +//●○◎ +//0XD4(212) +//11010100 + else if ((pat==0xF0)||(pat==0xD4)) { + ret.drawFlag = TRUE; + ret.color = minColor(table[4],table[6]); + return ret; + } +//●○◎ +//●●○ +//●●○ +//0X96(150) +//10010110 +//○○◎ +//●●○ +//●●● +//0X17(23) +//00010111 + else if ((pat==0x96)||(pat==0x17)) { + ret.drawFlag = TRUE; + ret.color = minColor(table[1],table[4]); + return ret; + } +//●●○ +//○●● +//○○● +//0XC9(201) +//11001001 + else if (pat==0xC9) { + if ((getData(ti,0,-1)==TRUE)&&(getData(ti,1,0)==TRUE)){ + ret.drawFlag = TRUE; + ret.color = minColor(table[3],table[6]); + } + return ret; + } +//○●● +//●●○ +//●○○ +//0X74(116) +//01110100 + else if (pat==0x74) { + if ((getData(ti,0,-1)==TRUE)&&(getData(ti,-1,0)==TRUE)){ + ret.drawFlag = TRUE; + ret.color = minColor(table[4],table[6]); + } + return ret; + } +//●○○ +//●●○ +//○●● +//0X93(147) +//10010011 + else if (pat==0x93) { + if ((getData(ti,-1,0)==TRUE)&&(getData(ti,0,1)==TRUE)){ + ret.drawFlag = TRUE; + ret.color = minColor(table[1],table[4]); + } + return ret; + } +//○○● +//○●● +//●●○ +//0X2E(46) +//00101110 + else if (pat==0x2E) { + if ((getData(ti,1,0)==TRUE)&&(getData(ti,0,1)==TRUE)){ + ret.drawFlag = TRUE; + ret.color = minColor(table[1],table[3]); + } + return ret; + } + //****************************************** + }else if (patCount == 3){ +//●●● +//○●○ +//○◎○ +//0XE0(224) +//11100000 + if (pat==0xE0) { + if (getData(ti,0,-1)==TRUE){ + ret.drawFlag = TRUE; + ret.color = minColor(minColor(table[3],table[4]),table[6]); + } + return ret; + } +//●○○ +//●●◎ +//●○○ + else if (pat==0x94) { + if (getData(ti,-1,0)==TRUE){ + ret.drawFlag = TRUE; + ret.color = minColor(minColor(table[1],table[4]),table[6]); + } + return ret; + } +//○◎○ +//○●○ +//●●● + else if (pat==0x07) { + if (getData(ti,0,1)==TRUE){ + ret.drawFlag = TRUE; + ret.color = minColor(minColor(table[1],table[3]),table[4]); + } + return ret; + } +//○○● +//◎●● +//○○● + else if (pat==0x29) { + if (getData(ti,1,0)==TRUE){ + ret.drawFlag = TRUE; + ret.color = minColor(minColor(table[1],table[3]),table[6]); + } + return ret; + } +//○●● +//●●◎ +//○○○ +//0X70(112) +//01110000 + else if (pat==0x70) { + if (getData(ti,0,-1)==TRUE){ + ret.drawFlag = TRUE; + ret.color = minColor(table[4],table[6]); + } + return ret; + } +//○○○ +//●●◎ +//○●● +//0X13(19) +//00010011 + else if (pat==0x13) { + if (getData(ti,-1,0)==TRUE){ + ret.drawFlag = TRUE; + ret.color = minColor(table[4],table[1]); + } + return ret; + } +//○◎● +//○●● +//○●○ +//0X2A(42) +//00101010 + else if (pat==0x2A) { + if (getData(ti,1,0)==TRUE){ + ret.drawFlag = TRUE; + ret.color = minColor(table[1],table[3]); + } + return ret; + } +//●◎○ +//●●○ +//○●○ +//0X92(146) +//10010010 + else if (pat==0x92) { + if (getData(ti,-1,0)==TRUE){ + ret.drawFlag = TRUE; + ret.color = minColor(table[1],table[4]); + } + return ret; + } +//●●○ +//◎●● +//○○○ +//0XC8(200) +//11001000 + else if (pat==0x2A) { + if (getData(ti,0,-1)==TRUE){ + ret.drawFlag = TRUE; + ret.color = minColor(table[3],table[6]); + } + return ret; + } +//○○○ +//◎●● +//●●○ +//0XE(14) +//00001110 + else if (pat==0x0E) { + if (getData(ti,1,0)==TRUE){ + ret.drawFlag = TRUE; + ret.color = minColor(table[1],table[3]); + } + return ret; + } + +//●●○ +//●●○ +//○○○ +//0XD0(208) +//11010000 + if (pat==0xD0) { + if ((getData(ti,0,-1)==TRUE)&&(getData(ti,-1,0)==TRUE)){ + ret.drawFlag = TRUE; + ret.color = minColor(table[4],table[6]); + } + return ret; + } +//○○○ +//●●○ +//●●○ +//0X16(22) +//00010110 + if (pat==0x16) { + if ((getData(ti,-1,0)==TRUE)&&(getData(ti,0,1)==TRUE)){ + ret.drawFlag = TRUE; + ret.color = minColor(table[1],table[4]); + } + return ret; + } +//○○○ +//○●● +//○●● +//0XB(11) +//00001011 + if (pat==0x0B) { + if ((getData(ti,1,0)==TRUE)&&(getData(ti,0,1)==TRUE)){ + ret.drawFlag = TRUE; + ret.color = minColor(table[1],table[3]); + } + return ret; + } + //****************************************** + }else if (patCount == 2){ +//○●○ +//●●○ +//○○○ +//0X50(80) +//01010000 + if (pat==0x50) { + if ((getData(ti,0,-1)==TRUE)&&(getData(ti,-1,0)==TRUE)){ + ret.drawFlag = TRUE; + ret.color = minColor(table[4],table[6]); + } + return ret; + } +//○○○ +//●●○ +//○●○ +//0X12(18) +//00010010 + else if (pat==0x12) { + if ((getData(ti,-1,0)==TRUE)&&(getData(ti,0,1)==TRUE)){ + ret.drawFlag = TRUE; + ret.color = minColor(table[1],table[4]); + } + return ret; + } +//○○○ +//○●● +//○●○ +//0XA(10) +//00001010 + else if (pat==0x0A) { + if ((getData(ti,1,0)==TRUE)&&(getData(ti,0,1)==TRUE)){ + ret.drawFlag = TRUE; + ret.color = minColor(table[1],table[3]); + } + return ret; + } +//○●○ +//○●● +//○○○ +//0X48(72) +//01001000 + else if (pat==0x48) { + if ((getData(ti,0,-1)==TRUE)&&(getData(ti,1,0)==TRUE)){ + ret.drawFlag = TRUE; + ret.color = minColor(table[3],table[6]); + } + return ret; + } + } + return ret; +} +//***************************************************************************** +PF_Err thinExec32(CFsAE *ae , ParamInfo *infoP) +{ + PF_Err err = PF_Err_NONE; + thinInfo32 ti; + + + + ti.colorMax = infoP->colorMax; + if (ti.colorMax<=0) return err; + + for (A_long i=0; icolorMax; i++) { + ti.color[i] = CONV8TO32( infoP->color[i]); + ti.color8[i] = infoP->color[i]; + } + ti.level = (A_long)((double)PF_MAX_CHAN8 * infoP->level + 0.5); + + ti.w = ae->out->width(); + ti.wt = ae->out->widthTrue(); + ti.wt2 = ti.wt*2; + ti.h = ae->out->height(); + ti.offset = ti.wt - ti.w; + + //メモリの確保 + ti.scanlineH = ae->NewHandle(ti.wt * sizeof(PF_PixelFloat) * 4);// 3Line分 と余裕 + if ( !ti.scanlineH ) return PF_Err_INTERNAL_STRUCT_DAMAGED; + + ti.scanline = *(PF_PixelFloat**)ti.scanlineH; ; + ti.data = (PF_PixelFloat *)ae->out->data(); + ti.white = infoP->white; + ti.alphaZero = infoP->alphaZero; + ti.edge = infoP->edge; + + A_long now = 0; + //exec + for (A_long vv=0; vvvalue; vv++){ + now = 0; + if (ti.edge==TRUE){ + for (A_long j = 0; j= 1.0) + &&(tb.color.green >= 1.0) + &&(tb.color.red >= 1.0) + &&(tb.color.alpha >= 1.0)) + { + tb.drawFlag = FALSE; + } + } + if (ti.alphaZero == TRUE){ + if (tb.color.alpha == 0) tb.drawFlag = FALSE; + } + if (tb.drawFlag ==TRUE) { + ti.data[now] = tb.color; + } + } + } + now++; + + } + now += ti.offset; + + } + } + now = 0; + for (A_long j = 0; j= 1.0) + &&(tb.color.green >= 1.0) + &&(tb.color.red >= 1.0) + &&(tb.color.alpha >= 1.0)) + { + tb.drawFlag = FALSE; + } + } + if (ti.alphaZero == TRUE){ + if (tb.color.alpha == 0) tb.drawFlag = FALSE; + } + if (tb.drawFlag ==TRUE) { + ti.data[now] = tb.color; + } + } + } + now++; + + } + now += ti.offset; + + } + //後処理 + now = 0; + for (A_long j = 0; j= 1.0) + &&(tb.color.green >= 1.0) + &&(tb.color.red >= 1.0) + &&(tb.color.alpha >= 1.0)) + { + tb.drawFlag = FALSE; + } + } + if (ti.alphaZero == TRUE){ + if (tb.color.alpha == 0) tb.drawFlag = FALSE; + } + if (tb.drawFlag ==TRUE) { + ti.data[now] = tb.color; + } + } + } + now++; + + } + now += ti.offset; + + } + now = 0; + for (A_long j = 0; j0) { + now2 = now - ti.wt; + }else{ + tb.drawFlag = FALSE; + } + break; + case 1: + if (ti.nowX<(ti.w-1)) { + now2 = now + 1; + }else{ + tb.drawFlag = FALSE; + } + break; + case 2: + if (ti.nowY<(ti.h-1)) { + now2 = now + ti.wt; + }else{ + tb.drawFlag = FALSE; + } + break; + case 3: + if (ti.nowX>0) { + now2 = now - 1; + }else{ + tb.drawFlag = FALSE; + } + break; + } + } + if (tb.drawFlag ==TRUE) { + PF_PixelFloat p = ti.data[now2]; + if (ti.white == TRUE) { + if ((p.blue >= 1.0) + &&(p.green >= 1.0) + &&(p.red >= 1.0) + &&(p.alpha >= 1.0)) + { + tb.drawFlag = FALSE; + } + } + if (ti.alphaZero == TRUE) { + if (p.alpha ==0) + { + tb.drawFlag = FALSE; + } + } + if (tb.drawFlag ==TRUE) { + ti.data[now2] = tb.color; + } + } + } + now++; + + } + now += ti.offset; + + } + } + + if (ti.scanlineH != NULL){ + ae->DisposeHandle(ti.scanlineH); + ti.scanlineH = NULL; + } + + + return err; +} diff --git a/Thin/ThinSub8.cpp b/Thin/ThinSub8.cpp new file mode 100644 index 0000000..7165eb1 --- /dev/null +++ b/Thin/ThinSub8.cpp @@ -0,0 +1,1418 @@ +#include "Thin.h" + + +//***************************************************************************** +inline PF_Boolean CompPx(thinInfo8 *ti, PF_Pixel p) +{ + PF_Boolean ret = FALSE; + for (A_long i=0; icolorMax; i++){ + if ( ( F_ABS((A_long)ti->color[i].red - (A_long)p.red ) <= ti->level) + &&( F_ABS((A_long)ti->color[i].green - (A_long)p.green) <= ti->level) + &&( F_ABS((A_long)ti->color[i].blue - (A_long)p.blue ) <= ti->level)){ + ret = TRUE; + break; + } + } + return ret; +} +//***************************************************************************** +inline PF_Boolean CompPxs(thinInfo8 *ti, PF_Pixel p1,PF_Pixel p2,PF_Pixel p3) +{ + PF_Boolean ret = FALSE; + if ( ( F_ABS((A_long)p1.red - (A_long)p2.red ) <= ti->level) + &&( F_ABS((A_long)p1.green - (A_long)p2.green) <= ti->level) + &&( F_ABS((A_long)p1.blue - (A_long)p2.blue ) <= ti->level)){ + if ( ( F_ABS((A_long)p1.red - (A_long)p3.red ) <= ti->level) + &&( F_ABS((A_long)p1.green - (A_long)p3.green) <= ti->level) + &&( F_ABS((A_long)p1.blue - (A_long)p3.blue ) <= ti->level)){ + ret = TRUE; + } + } + return ret; +} +//***************************************************************************** +inline PF_Boolean CompPxs2(thinInfo8 *ti, PF_Pixel p1,PF_Pixel p2) +{ + PF_Boolean ret = FALSE; + if ( ( F_ABS((A_long)p1.red - (A_long)p2.red ) <= ti->level) + &&( F_ABS((A_long)p1.green - (A_long)p2.green) <= ti->level) + &&( F_ABS((A_long)p1.blue - (A_long)p2.blue ) <= ti->level)){ + ret = TRUE; + } + return ret; +} + + +//***************************************************************************** +inline void scanlineCopy(thinInfo8 *ti, A_long y) +{ + //スキャンラインへコピー + A_long v = 0; + if (y ==0) { + for ( int i=0; iw; i++ ){ + ti->scanline[i ] = ti->data[i ]; + ti->scanline[i + ti->wt ] = ti->data[i ]; + ti->scanline[i + ti->wt2] = ti->data[i + ti->wt]; + } + }else{ + for ( int i=0; iw; i++ ){ + ti->scanline[i ] = ti->scanline[i + ti->wt ]; + ti->scanline[i + ti->wt ] = ti->scanline[i + ti->wt2]; + } + if (yh-1 ){ + v = (y+1)*ti->wt; + for ( int i=0; iw; i++ ){ + ti->scanline[i + ti->wt2] = ti->data[i + v]; + } + } + } +} +//***************************************************************************** +inline void scanlineCopyB(thinInfo8 *ti, A_long y) +{ + //スキャンラインへコピー + A_long v0 = 0; + A_long v1 = 0; + A_long v2 = 0; + if (y ==0) { + v0 = 0; + v1 = 0; + v2 = ti->wt; + + }else if (y==ti->h-1 ){ + v0 = (y-1) * ti->wt; + v1 = y * ti->wt; + v2 = v1; + }else{ + v0 = (y-1) * ti->wt; + v1 = (y ) * ti->wt; + v2 = (y+1) * ti->wt; + } + for ( int i=0; iw; i++ ){ + ti->scanline[i ] = ti->data[i + v0]; + ti->scanline[i + ti->wt ] = ti->data[i + v1]; + ti->scanline[i + ti->wt2] = ti->data[i + v2]; + } +} +//***************************************************************************** +inline PF_Pixel getScanLine(thinInfo8 *ti, A_long offsetX, A_long offsetY) +{ + A_long xx = ti->nowX + offsetX; + A_long yy = 1 + offsetY; + if (xx<0) { + xx =0; + } else if (xx>=ti->w) { + xx = ti->w -1; + } + if (yy<0) { + yy =0; + } else if (yy>2) { + yy= 2; + } + + return ti->scanline[ xx + yy*ti->wt]; +} +//***************************************************************************** +inline PF_Boolean getData(thinInfo8 *ti, A_long offsetX, A_long offsetY) +{ + A_long xx = ti->nowX + offsetX; + A_long yy = ti->nowY + offsetY; + if (xx<0) { + xx =0; + } else if (xx>=ti->w) { + xx = ti->w -1; + } + if (yy<0) { + yy =0; + } else if (yy>=ti->h) { + yy= ti->h-1; + } + PF_Pixel p = ti->data[ xx + yy*ti->wt]; + + return CompPx(ti,p); +} +//***************************************************************************** +inline PF_Pixel getPx(thinInfo8 *ti, A_long offsetX, A_long offsetY) +{ + A_long xx = ti->nowX + offsetX; + A_long yy = ti->nowY + offsetY; + if (xx<0) { + xx =0; + } else if (xx>=ti->w) { + xx = ti->w -1; + } + if (yy<0) { + yy =0; + } else if (yy>=ti->h) { + yy= ti->h-1; + } + PF_Pixel p = ti->data[ xx + yy*ti->wt]; + + return p; +} +//***************************************************************************** +inline PF_Pixel minColor(PF_Pixel s,PF_Pixel d) +{ + A_long ss = (A_long)s.red + (A_long)s.green + (A_long)s.blue; + A_long dd = (A_long)d.red + (A_long)d.green + (A_long)d.blue; + if (ss7) { + return ret; + }else if (patCount<=0){ + ret.drawFlag = TRUE; + PF_Pixel c = minColor(table[1],table[3]); + c = minColor(c,table[4]); + c = minColor(c,table[6]); + ret.color = c; + return ret; + }else if (patCount==7){ + //****************************************** +//●○● +//●●● +//●●● +//0XBF(191) +//10111111 + if (pat==0xBF) { + if (getData(ti,0,1)==TRUE){ + ret.drawFlag = TRUE; + ret.color = table[1]; + } + return ret; + } +//●●● +//○●● +//●●● +//0XEF(239) +//11101111 + if (pat==0xEF) { + if (getData(ti,1,0)==TRUE){ + ret.drawFlag = TRUE; + ret.color = table[3]; + } + return ret; + } +//●●● +//●●● +//●○● +//0XFD(253) +//11111101 + if (pat==0xFD) { + if (getData(ti,0,-1)==TRUE){ + ret.drawFlag = TRUE; + ret.color = table[6]; + } + return ret; + } +//●●● +//●●○ +//●●● +//0XF7(247) +//11110111 + if (pat==0x7F) { + if (getData(ti,-1,0)==TRUE){ + ret.drawFlag = TRUE; + ret.color = table[4]; + } + return ret; + } + }else if (patCount==6){ + //****************************************** +//●◎○ +//●●● +//●●● +//0X9F(159) +//10011111 +//○◎● +//●●● +//●●● +//0X3F(63) +//00111111 + if ((pat==0x9F)||(pat==0x3F)) { + if (getData(ti,0,-1)==TRUE){ + ret.drawFlag = TRUE; + ret.color = table[1]; + } + return ret; + } + +//○●● +//◎●● +//●●● +//0X6F(111) +//01101111 +//●●● +//◎●● +//○●● +//0XEB(235) +//11101011 + else if ((pat==0x6F)||(pat==0xEB)) { + if (getData(ti,1,0)==TRUE){ + ret.drawFlag = TRUE; + ret.color = table[3]; + } + return ret; + } +//●●● +//●●● +//○◎● +//0XF9(249) +//11111001 +//●●● +//●●● +//●◎○ +//0XFC(252) +//11111100 + else if ((pat==0xF9)||(pat==0xFC)) { + if (getData(ti,0,-1)==TRUE){ + ret.drawFlag = TRUE; + ret.color = table[6]; + } + return ret; + } +//●●● +//●●◎ +//●●○ +//0XF6(246) +//11110110 +//●●○ +//●●◎ +//●●● +//0XD7(215) +//11010111 + else if ((pat==0xF6)||(pat==0xD7)) { + if (getData(ti,-1,0)==TRUE){ + ret.drawFlag = TRUE; + ret.color = table[4]; + } + return ret; + } + //****************************************** + }else if (patCount == 5){ +//●●● +//●●● +//○◎○ +//0XF8(248) +//11111000 + if (pat==0xF8) { + if (getData(ti,0,-1)==TRUE){ + ret.drawFlag = TRUE; + ret.color = table[6]; + } + return ret; + } +//○◎○ +//●●● +//●●● +//0X1F(31) +//00011111 + if (pat==0x1F) { + if (getData(ti,0,1)==TRUE){ + ret.drawFlag = TRUE; + ret.color = table[1]; + } + return ret; + } +//○●● +//◎●● +//○●● +//0X6B(107) +//01101011 + else if (pat==0x6B) { + if (getData(ti,1,0)==TRUE){ + ret.drawFlag = TRUE; + ret.color = table[3]; + } + return ret; + } +//●●○ +//●●◎ +//●●○ +//0XD6(214) +//11010110 + else if (pat==0xF8) { + if (getData(ti,-1,0)==TRUE){ + ret.drawFlag = TRUE; + ret.color = table[4]; + } + return ret; + } +//●○◎ +//●●○ +//●●● +//0X97(151) +//10010111 + else if (pat==0x97) { + ret.drawFlag = TRUE; + ret.color = minColor(table[1],table[4]); + return ret; + } +//◎○● +//○●● +//●●● +//0X2F(47) +//00101111 + else if (pat==0x2F) { + ret.drawFlag = TRUE; + ret.color = minColor(table[1],table[3]); + return ret; + } +//●●● +//○●● +//◎○● +//0XE9(233) +//11101001 + else if (pat==0xE9) { + ret.drawFlag = TRUE; + ret.color = minColor(table[3],table[6]); + return ret; + } +//●●● +//●●○ +//●○◎ +//0XF4(244) +//11110100 + else if (pat==0xF4) { + ret.drawFlag = TRUE; + ret.color = minColor(table[4],table[6]); + return ret; + } +//○●○ +//●●● +//●○● +//0X5D(93) +//01011101 + else if (pat==0x5D) { + if (getData(ti,0,-1)==TRUE){ + ret.drawFlag = TRUE; + ret.color = table[6]; + } + return ret; + } +//○●● +//●●○ +//○●● +//0X73(115) +//01110011 + else if (pat==0x73) { + if (getData(ti,-1,0)==TRUE){ + ret.drawFlag = TRUE; + ret.color = table[4]; + } + return ret; + } +//●○● +//●●● +//○●○ +//0XBA(186) +//10111010 + else if (pat==0xBA) { + if (getData(ti,0,-1)==TRUE){ + ret.drawFlag = TRUE; + ret.color = table[1]; + } + return ret; + } +//●●○ +//○●● +//●●○ +//0XCE(206) +//11001110 + else if (pat==0xCE) { + if (getData(ti,1,0)==TRUE){ + ret.drawFlag = TRUE; + ret.color = table[3]; + } + return ret; + } + //****************************************** + }else if (patCount == 4){ +//◎○○ +//○●● +//●●● +//0XF(15) +//00001111 +//◎○● +//○●● +//○●● +//0X2B(43) +//00101011 + if ((pat==0x0F)||(pat==0x2B)) { + ret.drawFlag = TRUE; + ret.color = minColor(table[1],table[3]); + return ret; + } +//○●● +//○●● +//◎○● +//0X69(105) +//01101001 +//●●● +//○●● +//◎○○ +//0XE8(232) +//11101000 + else if ((pat==0x69)||(pat==0xE8)) { + ret.drawFlag = TRUE; + ret.color = minColor(table[3],table[6]); + return ret; + } + +//●●● +//●●○ +//○○◎ +//0XF0(240) +//11110000 +//●●○ +//●●○ +//●○◎ +//0XD4(212) +//11010100 + else if ((pat==0xF0)||(pat==0xD4)) { + ret.drawFlag = TRUE; + ret.color = minColor(table[4],table[6]); + return ret; + } +//●○◎ +//●●○ +//●●○ +//0X96(150) +//10010110 +//○○◎ +//●●○ +//●●● +//0X17(23) +//00010111 + else if ((pat==0x96)||(pat==0x17)) { + ret.drawFlag = TRUE; + ret.color = minColor(table[1],table[4]); + return ret; + } +//●●○ +//○●● +//○○● +//0XC9(201) +//11001001 + else if (pat==0xC9) { + if ((getData(ti,0,-1)==TRUE)&&(getData(ti,1,0)==TRUE)){ + ret.drawFlag = TRUE; + ret.color = minColor(table[3],table[6]); + } + return ret; + } +//○●● +//●●○ +//●○○ +//0X74(116) +//01110100 + else if (pat==0x74) { + if ((getData(ti,0,-1)==TRUE)&&(getData(ti,-1,0)==TRUE)){ + ret.drawFlag = TRUE; + ret.color = minColor(table[4],table[6]); + } + return ret; + } +//●○○ +//●●○ +//○●● +//0X93(147) +//10010011 + else if (pat==0x93) { + if ((getData(ti,-1,0)==TRUE)&&(getData(ti,0,1)==TRUE)){ + ret.drawFlag = TRUE; + ret.color = minColor(table[1],table[4]); + } + return ret; + } +//○○● +//○●● +//●●○ +//0X2E(46) +//00101110 + else if (pat==0x2E) { + if ((getData(ti,1,0)==TRUE)&&(getData(ti,0,1)==TRUE)){ + ret.drawFlag = TRUE; + ret.color = minColor(table[1],table[3]); + } + return ret; + } + //****************************************** + }else if (patCount == 3){ +//●●● +//○●○ +//○◎○ +//0XE0(224) +//11100000 + if (pat==0xE0) { + if (getData(ti,0,-1)==TRUE){ + ret.drawFlag = TRUE; + ret.color = minColor(minColor(table[3],table[4]),table[6]); + } + return ret; + } +//●○○ +//●●◎ +//●○○ + else if (pat==0x94) { + if (getData(ti,-1,0)==TRUE){ + ret.drawFlag = TRUE; + ret.color = minColor(minColor(table[1],table[4]),table[6]); + } + return ret; + } +//○◎○ +//○●○ +//●●● + else if (pat==0x07) { + if (getData(ti,0,1)==TRUE){ + ret.drawFlag = TRUE; + ret.color = minColor(minColor(table[1],table[3]),table[4]); + } + return ret; + } +//○○● +//◎●● +//○○● + else if (pat==0x29) { + if (getData(ti,1,0)==TRUE){ + ret.drawFlag = TRUE; + ret.color = minColor(minColor(table[1],table[3]),table[6]); + } + return ret; + } +//○●● +//●●◎ +//○○○ +//0X70(112) +//01110000 + else if (pat==0x70) { + if (getData(ti,0,-1)==TRUE){ + ret.drawFlag = TRUE; + ret.color = minColor(table[4],table[6]); + } + return ret; + } +//○○○ +//●●◎ +//○●● +//0X13(19) +//00010011 + else if (pat==0x13) { + if (getData(ti,-1,0)==TRUE){ + ret.drawFlag = TRUE; + ret.color = minColor(table[4],table[1]); + } + return ret; + } +//○◎● +//○●● +//○●○ +//0X2A(42) +//00101010 + else if (pat==0x2A) { + if (getData(ti,1,0)==TRUE){ + ret.drawFlag = TRUE; + ret.color = minColor(table[1],table[3]); + } + return ret; + } +//●◎○ +//●●○ +//○●○ +//0X92(146) +//10010010 + else if (pat==0x92) { + if (getData(ti,-1,0)==TRUE){ + ret.drawFlag = TRUE; + ret.color = minColor(table[1],table[4]); + } + return ret; + } +//●●○ +//◎●● +//○○○ +//0XC8(200) +//11001000 + else if (pat==0x2A) { + if (getData(ti,0,-1)==TRUE){ + ret.drawFlag = TRUE; + ret.color = minColor(table[3],table[6]); + } + return ret; + } +//○○○ +//◎●● +//●●○ +//0XE(14) +//00001110 + else if (pat==0x0E) { + if (getData(ti,1,0)==TRUE){ + ret.drawFlag = TRUE; + ret.color = minColor(table[1],table[3]); + } + return ret; + } + +//●●○ +//●●○ +//○○○ +//0XD0(208) +//11010000 + if (pat==0xD0) { + if ((getData(ti,0,-1)==TRUE)&&(getData(ti,-1,0)==TRUE)){ + ret.drawFlag = TRUE; + ret.color = minColor(table[4],table[6]); + } + return ret; + } +//○○○ +//●●○ +//●●○ +//0X16(22) +//00010110 + if (pat==0x16) { + if ((getData(ti,-1,0)==TRUE)&&(getData(ti,0,1)==TRUE)){ + ret.drawFlag = TRUE; + ret.color = minColor(table[1],table[4]); + } + return ret; + } +//○○○ +//○●● +//○●● +//0XB(11) +//00001011 + if (pat==0x0B) { + if ((getData(ti,1,0)==TRUE)&&(getData(ti,0,1)==TRUE)){ + ret.drawFlag = TRUE; + ret.color = minColor(table[1],table[3]); + } + return ret; + } + //****************************************** + }else if (patCount == 2){ +//○●○ +//●●○ +//○○○ +//0X50(80) +//01010000 + if (pat==0x50) { + if ((getData(ti,0,-1)==TRUE)&&(getData(ti,-1,0)==TRUE)){ + ret.drawFlag = TRUE; + ret.color = minColor(table[4],table[6]); + } + return ret; + } +//○○○ +//●●○ +//○●○ +//0X12(18) +//00010010 + else if (pat==0x12) { + if ((getData(ti,-1,0)==TRUE)&&(getData(ti,0,1)==TRUE)){ + ret.drawFlag = TRUE; + ret.color = minColor(table[1],table[4]); + } + return ret; + } +//○○○ +//○●● +//○●○ +//0XA(10) +//00001010 + else if (pat==0x0A) { + if ((getData(ti,1,0)==TRUE)&&(getData(ti,0,1)==TRUE)){ + ret.drawFlag = TRUE; + ret.color = minColor(table[1],table[3]); + } + return ret; + } +//○●○ +//○●● +//○○○ +//0X48(72) +//01001000 + else if (pat==0x48) { + if ((getData(ti,0,-1)==TRUE)&&(getData(ti,1,0)==TRUE)){ + ret.drawFlag = TRUE; + ret.color = minColor(table[3],table[6]); + } + return ret; + } + } + return ret; +} +//***************************************************************************** +PF_Err thinExec8(CFsAE *ae , ParamInfo *infoP) +{ + PF_Err err = PF_Err_NONE; + thinInfo8 ti; + + + + ti.colorMax = infoP->colorMax; + if (ti.colorMax<=0) return err; + for (A_long i=0; icolorMax; i++) { + ti.color[i] = infoP->color[i]; + } + ti.level = (A_long)((double)PF_MAX_CHAN8 * infoP->level + 0.5); + + ti.w = ae->out->width(); + ti.wt = ae->out->widthTrue(); + ti.wt2 = ti.wt*2; + ti.h = ae->out->height(); + ti.offset = ti.wt - ti.w; + + //メモリの確保 + ti.scanlineH = ae->NewHandle(ti.wt * sizeof(PF_Pixel) * 4);// 3Line分 と余裕 + if ( !ti.scanlineH ) return PF_Err_INTERNAL_STRUCT_DAMAGED; + + ti.scanline = *(PF_Pixel8**)ti.scanlineH; ; + ti.data = (PF_Pixel *)ae->out->data(); + ti.white = infoP->white; + ti.alphaZero = infoP->alphaZero; + ti.edge = infoP->edge; + + PF_Pixel kk = {0,0,0,0}; + PF_Pixel k = {128,128,128,128}; + PF_Pixel rd = {255,255,0,0}; + A_long now = 0; + //exec + for (A_long vv=0; vvvalue; vv++){ + now = 0; + if (ti.edge==TRUE){ + for (A_long j = 0; j0) { + now2 = now - ti.wt; + }else{ + tb.drawFlag = FALSE; + } + break; + case 1: + if (ti.nowX<(ti.w-1)) { + now2 = now + 1; + }else{ + tb.drawFlag = FALSE; + } + break; + case 2: + if (ti.nowY<(ti.h-1)) { + now2 = now + ti.wt; + }else{ + tb.drawFlag = FALSE; + } + break; + case 3: + if (ti.nowX>0) { + now2 = now - 1; + }else{ + tb.drawFlag = FALSE; + } + break; + } + } + if (tb.drawFlag ==TRUE) { + PF_Pixel p = ti.data[now2]; + if (ti.white == TRUE) { + if ((p.blue == PF_MAX_CHAN8) + &&(p.green == PF_MAX_CHAN8) + &&(p.red == PF_MAX_CHAN8) + &&(p.alpha == PF_MAX_CHAN8)) + { + tb.drawFlag = FALSE; + } + } + if (ti.alphaZero == TRUE) { + if (p.alpha ==0) + { + tb.drawFlag = FALSE; + } + } + if (tb.drawFlag ==TRUE) { + ti.data[now2] = tb.color; + } + } + } + now++; + + } + now += ti.offset; + + } + } + + if (ti.scanlineH != NULL){ + ae->DisposeHandle(ti.scanlineH); + ti.scanlineH = NULL; + } + + + return err; +} diff --git a/Thin/Win/PluginSkeletonPiPL.rc b/Thin/Win/PluginSkeletonPiPL.rc new file mode 100644 index 0000000..96a4b1d --- /dev/null +++ b/Thin/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/Thin/Win/Thin.sln b/Thin/Win/Thin.sln new file mode 100644 index 0000000..8d41761 --- /dev/null +++ b/Thin/Win/Thin.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}") = "Thin", "Thin.vcxproj", "{D0FDBB96-04C3-4085-869E-76DA167D012A}" +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 + {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|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 + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/Thin/Win/Thin.vcxproj b/Thin/Win/Thin.vcxproj new file mode 100644 index 0000000..3859b77 --- /dev/null +++ b/Thin/Win/Thin.vcxproj @@ -0,0 +1,595 @@ +サソ + + + + Debug + Win32 + + + Debug + x64 + + + Release-MD + Win32 + + + Release-MD + x64 + + + Release + Win32 + + + Release + x64 + + + + {D0FDBB96-04C3-4085-869E-76DA167D012A} + Thin + Thin + 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/Thin.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/Thin.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/Thin.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/Thin.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/Thin.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/Thin.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/Thin/Win/Thin.vcxproj.filters b/Thin/Win/Thin.vcxproj.filters new file mode 100644 index 0000000..2ca9bdc --- /dev/null +++ b/Thin/Win/Thin.vcxproj.filters @@ -0,0 +1,190 @@ +サソ + + + + {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/Thin/Win/ThinPiPL.rc b/Thin/Win/ThinPiPL.rc new file mode 100644 index 0000000..d22bb57 --- /dev/null +++ b/Thin/Win/ThinPiPL.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, + "\x08F's Thin\0\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, + 12, 0x0, + "\x08F's Thin\0\0\0", + + "MIB8", + 0x6165464CL, + 0L, + 4L + 0L, + + +END + diff --git a/Thin/thinPat.exe b/Thin/thinPat.exe new file mode 100644 index 0000000..fb81632 Binary files /dev/null and b/Thin/thinPat.exe differ diff --git a/ToGray/Fs_Target.h b/ToGray/Fs_Target.h new file mode 100644 index 0000000..68f0e3d --- /dev/null +++ b/ToGray/Fs_Target.h @@ -0,0 +1,79 @@ +//----------------------------------------------------------------------------------- +/* + F's Plugins for VS2010/VS2012 +*/ +//----------------------------------------------------------------------------------- + +#pragma once +#ifndef FS_TAGET_H +#define FS_TAGET_H + +//----------------------------------------------------------------------------------- +//プラグインの識別に使われる名前 +#define FS_NAME "F's ToGray" + +//----------------------------------------------------------------------------------- +//プラグインの説明に使われる文字 +#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/ToGray/ToGray.cpp b/ToGray/ToGray.cpp new file mode 100644 index 0000000..5cca77c --- /dev/null +++ b/ToGray/ToGray.cpp @@ -0,0 +1,897 @@ +//----------------------------------------------------------------------------------- +/* + F's Plugins for VS2010/VS2012 +*/ +//----------------------------------------------------------------------------------- + +#include "ToGray.h" + +static PF_Err (*ToGrayFunc8)( + refconType refcon, + A_long xL, + A_long yL, + PF_Pixel8 *inP, + PF_Pixel8 *outP); + +static PF_Err (*ToGrayFunc16)( + refconType refcon, + A_long xL, + A_long yL, + PF_Pixel16 *inP, + PF_Pixel16 *outP); + +static PF_Err (*ToGrayFunc32)( + refconType refcon, + A_long xL, + A_long yL, + PF_PixelFloat *inP, + PF_PixelFloat *outP); + +//----------------------------------------------------------------------------------- +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_POPUP( STR_GRAY_MODE_POP1, + STR_GRAY_MODE_COUNT, //メニューの数 + STR_GRAY_MODE_DEF, //デフォルト + STR_GRAY_MODE_POP2, + ID_GRAY_MODE + ); + + //---------------------------------------------------------------- + //固定小数のスライダーバー + AEFX_CLR_STRUCT(def); + PF_ADD_FIXED( STR_ORG_BLEND, //パラメータの名前 + 0, //数値入力する場合の最小値 + 100, //数値入力する場合の最大値 + 0, //スライダーの最小値 + 100, //スライダーの最大値 + 0, //デフォルトの値 + 2, //数値表示に関するフラグ + 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; + 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; +} + +//------------------------------------------------------------------------------------------------- +//********************************************************************************************** +inline PF_Pixel GMIX8(PF_Pixel *s, A_long v, PF_FpShort p) +{ + PF_Pixel r; + if ( v<0) v=0; + else if ( v> PF_MAX_CHAN8) v = PF_MAX_CHAN8; + if ( p <=0){ + r.alpha = s->alpha; + r.red = + r.green = + r.blue = (A_u_char)v; + }else{ + PF_FpShort d0 = p; + PF_FpShort d1 = 1 - p; + r.alpha = s->alpha; + r.red = RoundByteFpLong(((PF_FpShort)s->red * d0 + (PF_FpShort)v * d1)); + r.green = RoundByteFpLong(((PF_FpShort)s->green * d0 + (PF_FpShort)v * d1)); + r.blue = RoundByteFpLong(((PF_FpShort)s->blue * d0 + (PF_FpShort)v * d1)); + } + return r; +} +//------------------------------------------------------------------------------------------------- +static PF_Err +ToGrayFunc8_yuv ( + 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){ + A_long v = (A_long)( ( 0.29891 * (PF_FpLong)inP->red) + ( 0.58661 * (PF_FpLong)inP->green) + ( 0.11448 * (PF_FpLong)inP->blue)); + *outP = GMIX8(inP,v,niP->org_blend); + } + return err; +} +//------------------------------------------------------------------------------------------------- +static PF_Err +ToGrayFunc8_hls ( + 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){ + A_long v = (MAX( MAX(inP->red,inP->green), inP->blue ) + MIN( MIN(inP->red,inP->green), inP->blue )) >>1; + *outP = GMIX8(inP,v,niP->org_blend); + } + + return err; +} +//------------------------------------------------------------------------------------------------- +static PF_Err +ToGrayFunc8_rgb( + 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){ + A_long v = (inP->red + inP->green +inP->blue )/3; + *outP = GMIX8(inP,v,niP->org_blend); + } + return err; +} +//------------------------------------------------------------------------------------------------- +static PF_Err +ToGrayFunc8_r( + 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){ + A_long v = inP->red; + *outP = GMIX8(inP,v,niP->org_blend); + } + return err; +} +//------------------------------------------------------------------------------------------------- +static PF_Err +ToGrayFunc8_g( + 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){ + A_long v = inP->green; + *outP = GMIX8(inP,v,niP->org_blend); + } + return err; +} +//------------------------------------------------------------------------------------------------- +static PF_Err +ToGrayFunc8_b( + 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){ + A_long v = inP->blue; + *outP = GMIX8(inP,v,niP->org_blend); + } + return err; +} +//------------------------------------------------------------------------------------------------- +static PF_Err +ToGrayFunc8_rgbmax( + 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) { + A_long v = MAX(MAX(inP->red, inP->green), inP->blue); + *outP = GMIX8(inP, v, niP->org_blend); + } + return err; +} +//------------------------------------------------------------------------------------------------- +static PF_Err +ToGrayFunc8_lab( + 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 c = CONV8TO32(*outP); + LABA lab = RgbToLab(c); + + A_long v = (A_long)(lab.L * PF_MAX_CHAN8 +0.5); + *outP = GMIX8(inP, v, niP->org_blend); + } + return err; +} +//********************************************************************************************** +inline PF_Pixel16 GMIX16(PF_Pixel16 *s, A_long v, PF_FpShort p) +{ + PF_Pixel16 r; + if ( v<0) v=0; + else if ( v> PF_MAX_CHAN16) v = PF_MAX_CHAN16; + if ( p <=0){ + r.alpha = s->alpha; + r.red = + r.green = + r.blue = (A_u_short)v; + }else{ + PF_FpShort d0 = p; + PF_FpShort d1 = 1 - p; + r.alpha = s->alpha; + r.red = RoundShortFpLong(((PF_FpShort)s->red * d0 + (PF_FpShort)v * d1)); + r.green = RoundShortFpLong(((PF_FpShort)s->green *d0 + (PF_FpShort)v * d1)); + r.blue = RoundShortFpLong(((PF_FpShort)s->blue * d0 + (PF_FpShort)v * d1)); + } + return r; +} +//------------------------------------------------------------------------------------------------- +static PF_Err +ToGrayFunc16_yuv ( + 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){ + A_long v = (A_long)( ( 0.29891 * (PF_FpLong)inP->red) + ( 0.58661 * (PF_FpLong)inP->green) + ( 0.11448 * (PF_FpLong)inP->blue)); + *outP = GMIX16(inP,v,niP->org_blend); + } + return err; +} +//------------------------------------------------------------------------------------------------- +static PF_Err +ToGrayFunc16_hls ( + 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){ + A_long v = (MAX( MAX(inP->red,inP->green), inP->blue ) + MIN( MIN(inP->red,inP->green), inP->blue )) >>1; + *outP = GMIX16(inP,v,niP->org_blend); + } + + return err; +} +//------------------------------------------------------------------------------------------------- +static PF_Err +ToGrayFunc16_rgb( + 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){ + A_long v = (inP->red + inP->green +inP->blue )/3; + *outP = GMIX16(inP,v,niP->org_blend); + } + return err; +} +//------------------------------------------------------------------------------------------------- +static PF_Err +ToGrayFunc16_r( + 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){ + A_long v = inP->red; + *outP = GMIX16(inP,v,niP->org_blend); + } + return err; +} +//------------------------------------------------------------------------------------------------- +static PF_Err +ToGrayFunc16_g( + 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){ + A_long v = inP->green; + *outP = GMIX16(inP,v,niP->org_blend); + } + return err; +} +//------------------------------------------------------------------------------------------------- +static PF_Err +ToGrayFunc16_b( + 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){ + A_long v = inP->blue; + *outP = GMIX16(inP,v,niP->org_blend); + } + return err; +} +//------------------------------------------------------------------------------------------------- +static PF_Err +ToGrayFunc16_rgbmax( + 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) { + A_long v = MAX(MAX(inP->red, inP->green), inP->blue); + *outP = GMIX16(inP, v, niP->org_blend); + } + return err; +} +//------------------------------------------------------------------------------------------------- +static PF_Err +ToGrayFunc16_lab( + 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 c = CONV16TO32(*outP); + LABA lab = RgbToLab(c); + + A_long v = RoundShortFpLong(lab.L * PF_MAX_CHAN16 + 0.5); + *outP = GMIX16(inP, v, niP->org_blend); + } + return err; +} +//********************************************************************************************** +inline PF_Pixel32 GMIX32(PF_PixelFloat *s, PF_FpLong v, PF_FpShort p) +{ + PF_PixelFloat r; + if ( v<0) v=0; + else if ( v> 1) v = 1; + if ( p <=0){ + r.alpha = s->alpha; + r.red = + r.green = + r.blue = (PF_FpShort)v; + }else{ + PF_FpShort d0 = p; + PF_FpShort d1 = 1 - p; + r.alpha = s->alpha; + r.red = RoundFpShortDouble(((PF_FpShort)s->red * d0 + (PF_FpShort)v * d1)); + r.green = RoundFpShortDouble(((PF_FpShort)s->green *d0 + (PF_FpShort)v * d1)); + r.blue = RoundFpShortDouble(((PF_FpShort)s->blue * d0 + (PF_FpShort)v * d1)); + } + return r; +} +//------------------------------------------------------------------------------------------------- +static PF_Err +ToGrayFunc32_yuv ( + 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_FpShort v = (PF_FpShort)( ( 0.29891 * (PF_FpLong)inP->red) + ( 0.58661 * (PF_FpLong)inP->green) + ( 0.11448 * (PF_FpLong)inP->blue)); + *outP = GMIX32(inP,v,niP->org_blend); + } + return err; +} +//------------------------------------------------------------------------------------------------- +static PF_Err +ToGrayFunc32_hls ( + 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_FpShort v = (MAX( MAX(inP->red,inP->green), inP->blue ) + MIN( MIN(inP->red,inP->green), inP->blue )) /2; + *outP = GMIX32(inP,v,niP->org_blend); + } + + return err; +} +//------------------------------------------------------------------------------------------------- +static PF_Err +ToGrayFunc32_rgb( + 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_FpShort v = (inP->red + inP->green +inP->blue )/3; + *outP = GMIX32(inP,v,niP->org_blend); + } + return err; +} +//------------------------------------------------------------------------------------------------- +static PF_Err +ToGrayFunc32_r( + 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_FpShort v = inP->red; + *outP = GMIX32(inP,v,niP->org_blend); + } + return err; +} +//------------------------------------------------------------------------------------------------- +static PF_Err +ToGrayFunc32_g( + 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_FpShort v = inP->green; + *outP = GMIX32(inP,v,niP->org_blend); + } + return err; +} +//------------------------------------------------------------------------------------------------- +static PF_Err +ToGrayFunc32_b( + 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_FpShort v = inP->blue; + *outP = GMIX32(inP,v,niP->org_blend); + } + return err; +} +//------------------------------------------------------------------------------------------------- +static PF_Err +ToGrayFunc32_rgbmax( + 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_FpLong v = MAX(MAX(inP->red, inP->green), inP->blue); + *outP = GMIX32(inP, v, niP->org_blend); + } + return err; +} +//------------------------------------------------------------------------------------------------- +static PF_Err +ToGrayFunc32_lab( + 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) { + LABA lab = RgbToLab(*outP); + + PF_FpLong v = lab.L; + if (v > 1) v = 1; + *outP = GMIX32(inP, v, niP->org_blend); + } + return err; +} +//------------------------------------------------------------------------------------------------- +static PF_Err GetParams(CFsAE *ae, ParamInfo *infoP) +{ + PF_Err err = PF_Err_NONE; + + ERR(ae->GetPOPUP(ID_GRAY_MODE,&infoP->gray_mode)); + ERR(ae->GetFIXED2FpShort_P1(ID_ORG_BLEND,&infoP->org_blend)); + infoP->in_data = ae->in_data; + return err; +} +//------------------------------------------------------------------------------------------------- +static PF_Err + Exec (CFsAE *ae , ParamInfo *infoP) +{ + PF_Err err = PF_Err_NONE; + + //画面をコピー + + ae->CopyInToOut(); + if ( infoP->org_blend<1){ + switch(infoP->gray_mode) + {//#define STR_GRAY_MODE_POP2 "(Y)uv|h(L)s|(R+G+B)/3|(R)gb|r(G)b|rg(B)" + case 1: + ToGrayFunc8 = ToGrayFunc8_yuv; + ToGrayFunc16 = ToGrayFunc16_yuv; + ToGrayFunc32 = ToGrayFunc32_yuv; + break; + case 2: + ToGrayFunc8 = ToGrayFunc8_hls; + ToGrayFunc16 = ToGrayFunc16_hls; + ToGrayFunc32 = ToGrayFunc32_hls; + break; + case 3: + ToGrayFunc8 = ToGrayFunc8_rgb; + ToGrayFunc16 = ToGrayFunc16_rgb; + ToGrayFunc32 = ToGrayFunc32_rgb; + break; + case 4: + ToGrayFunc8 = ToGrayFunc8_r; + ToGrayFunc16 = ToGrayFunc16_r; + ToGrayFunc32 = ToGrayFunc32_r; + break; + case 5: + ToGrayFunc8 = ToGrayFunc8_g; + ToGrayFunc16 = ToGrayFunc16_g; + ToGrayFunc32 = ToGrayFunc32_g; + break; + case 6: + ToGrayFunc8 = ToGrayFunc8_b; + ToGrayFunc16 = ToGrayFunc16_b; + ToGrayFunc32 = ToGrayFunc32_b; + break; + case 7: + ToGrayFunc8 = ToGrayFunc8_rgbmax; + ToGrayFunc16 = ToGrayFunc16_rgbmax; + ToGrayFunc32 = ToGrayFunc32_rgbmax; + break; + case 8: + ToGrayFunc8 = ToGrayFunc8_lab; + ToGrayFunc16 = ToGrayFunc16_lab; + ToGrayFunc32 = ToGrayFunc32_lab; + break; + } + switch(ae->pixelFormat()) + { + case PF_PixelFormat_ARGB128: + ERR(ae->iterate32((refconType)infoP,ToGrayFunc32)); + break; + case PF_PixelFormat_ARGB64: + ERR(ae->iterate16((refconType)infoP,ToGrayFunc16)); + break; + case PF_PixelFormat_ARGB32: + ERR(ae->iterate8((refconType)infoP,ToGrayFunc8)); + 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){ + 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/ToGray/ToGray.h b/ToGray/ToGray.h new file mode 100644 index 0000000..210c6a2 --- /dev/null +++ b/ToGray/ToGray.h @@ -0,0 +1,77 @@ +//----------------------------------------------------------------------------------- +/* + F's Plugins for VS2010/VS2012 +*/ +//----------------------------------------------------------------------------------- + +#pragma once +#ifndef ToGray_H +#define ToGray_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" +//#include "FsAE.h" + + +#define STR_GRAY_MODE_POP1 "mode" +#define STR_GRAY_MODE_POP2 "(Y)uv|h(L)s|(R+G+B)/3|(R)gb|r(G)b|rg(B)|RGBMax|(L)ab" +#define STR_GRAY_MODE_COUNT 8 +#define STR_GRAY_MODE_DEF 1 +#define STR_ORG_BLEND "blend original(%)" + +//ユーザーインターフェースのID +//ParamsSetup関数とRender関数のparamsパラメータのIDになる +enum { + ID_INPUT = 0, // default input layer + ID_GRAY_MODE, //long 1.. + ID_ORG_BLEND, //PF_Fixed(long) + ID_NUM_PARAMS + }; + +//プラグイン独自のパラメータを集めた構造体 +typedef struct ParamsInfo{ + PF_InData *in_data; + A_long gray_mode; + PF_FpShort org_blend; +} 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 // ToGray_H diff --git a/ToGray/ToGrayPiPL.r b/ToGray/ToGrayPiPL.r new file mode 100644 index 0000000..34a840c --- /dev/null +++ b/ToGray/ToGrayPiPL.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/ToGray/Win/ToGray.vcxproj b/ToGray/Win/ToGray.vcxproj new file mode 100644 index 0000000..0d1481a --- /dev/null +++ b/ToGray/Win/ToGray.vcxproj @@ -0,0 +1,585 @@ +サソ + + + + Debug + Win32 + + + Debug + x64 + + + Release-MD + Win32 + + + Release-MD + x64 + + + Release + Win32 + + + Release + x64 + + + + {4F4C32EA-EED8-4E85-88E6-DEA7C85EDF6F} + ToGray + 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 + 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/ToGray.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/ToGray.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/ToGray.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)_CS4.aex + true + false + $(IntDir)$(ProjectName).pdb + Windows + false + + + $(IntDir)$(ProjectName).lib + MachineX86 + + + + + _DEBUG;%(PreprocessorDefinitions) + true + true + Win32 + .\Debug/ToGray.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)_CS4.aex + true + false + $(IntDir)$(ProjectName).pdb + Windows + false + + + $(IntDir)$(ProjectName).lib + MachineX86 + + + + + _DEBUG;%(PreprocessorDefinitions) + true + true + X64 + .\Debug/ToGray.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/ToGray.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 + 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/ToGray/Win/ToGray.vcxproj.filters b/ToGray/Win/ToGray.vcxproj.filters new file mode 100644 index 0000000..0465839 --- /dev/null +++ b/ToGray/Win/ToGray.vcxproj.filters @@ -0,0 +1,157 @@ + + + + + {21bcc783-438c-4d81-8325-fe521a68459d} + h;hpp;hxx;hm;inl;fi;fd + + + {0d067b33-f785-4843-b0b7-fe61fff9ec43} + + + {c99e0ece-da39-49e4-aa2e-79a271057ccd} + ico;cur;bmp;dlg;rc2;rct;bin;cnt;rtf;gif;jpg;jpeg;jpe + + + {1bfb9a31-a511-4740-ade5-dba2573cf412} + + + {7a8e4da5-1257-45bf-bd69-f6bf865f9edb} + + + {df88f88e-7be8-4ec1-8407-e92f9ce77eeb} + + + {2eed54ec-153b-4a26-bf6e-03104b0d9d89} + + + {d136ce3d-7dd9-4a58-8ba5-2ad14e7a582b} + + + + + 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\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/ToGray/Win/ToGrayPiPL.rc b/ToGray/Win/ToGrayPiPL.rc new file mode 100644 index 0000000..2e3d183 --- /dev/null +++ b/ToGray/Win/ToGrayPiPL.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 ToGray\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, + 12, 0x0, + "\x0AF's ToGray\0", + + "MIB8", + 0x6165464CL, + 0L, + 4L + 0L, + + +END + diff --git a/Tone/Fs_Target.h b/Tone/Fs_Target.h new file mode 100644 index 0000000..ab770ea --- /dev/null +++ b/Tone/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 Tone" + +//----------------------------------------------------------------------------------- +//プラグインの説明に使われる文字 +#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/Tone/Tone.cpp b/Tone/Tone.cpp new file mode 100644 index 0000000..1c9e9fa --- /dev/null +++ b/Tone/Tone.cpp @@ -0,0 +1,634 @@ +//----------------------------------------------------------------------------------- +/* + F's Plugins for VS2010/VS2012 +*/ +//----------------------------------------------------------------------------------- + +#include "Tone.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_COLOR( STR_Highlights_COLOR, + Highlights_def_red, + Highlights_def_green, + Highlights_def_blue, + ID_Highlights_COLOR + ); + + //---------------------------------------------------------------- + //色の指定 + AEFX_CLR_STRUCT(def); + PF_ADD_COLOR( STR_Midtones_COLOR, + Midtones_def_red, + Midtones_def_green, + Midtones_def_blue, + ID_Midtones_COLOR + ); + + //---------------------------------------------------------------- + //色の指定 + AEFX_CLR_STRUCT(def); + PF_ADD_COLOR( STR_Shadows_COLOR, + Shadows_def_red, + Shadows_def_green, + Shadows_def_blue, + ID_Shadows_COLOR + ); + + //---------------------------------------------------------------- + //固定小数のスライダーバー + AEFX_CLR_STRUCT(def); + PF_ADD_FIXED( STR_Midtones_OFFSET,//パラメータの名前 + -100, //数値入力する場合の最小値 + 100, //数値入力する場合の最大値 + -50, //スライダーの最小値 + 50, //スライダーの最大値 + Midtones_def_offset,//デフォルトの値 + 1, //数値表示に関するフラグ + 0, + 0, + ID_Midtones_OFFSET + ); + //---------------------------------------------------------------- + //固定小数のスライダーバー + AEFX_CLR_STRUCT(def); + PF_ADD_FIXED( STR_Blend_w_Original_FIXED, //パラメータの名前 + 0, //数値入力する場合の最小値 + 100, //数値入力する場合の最大値 + 0, //スライダーの最小値 + 100, //スライダーの最大値 + Blend_w_Original_def, //デフォルトの値 + 1, //数値表示に関するフラグ + 0, + 0, + ID_Blend_w_Original_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)&&(in_data->appl_id != 'PrMr')){ + //-------------------- + + ERR(ae.GetNewEffectStreamAll()); + if (!err){ + A_Boolean hide_themB[ID_NUM_PARAMS]; + for ( A_long i=1; iout_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_PixelFloat colcColor(ToneParam *prm) +{ + PF_PixelFloat ret= {0,0,0,0}; + PF_FpShort l = prm->level; + PF_FpShort b = prm->MidtonesBorder; + + if (l<=0) { + if ( b ==0) ret = prm->Midtones; + else ret = prm->Shadows; + }else if (l>=1.0) { + if ( b ==1) ret = prm->Midtones; + else ret = prm->Highlights; + }else if (l==b) { + ret = prm->Midtones; + }else{ + PF_FpShort v; + if ( lShadows.blue + ( prm->Midtones.blue - prm->Shadows.blue) * v; + ret.green = prm->Shadows.green + ( prm->Midtones.green - prm->Shadows.green) * v; + ret.red = prm->Shadows.red + ( prm->Midtones.red - prm->Shadows.red) * v; + }else{ + v = (PF_FpShort)((l- b)/(1.0 - b)); + ret.blue = (PF_FpShort)(prm->Midtones.blue + ( prm->Highlights.blue - prm->Midtones.blue ) * v); + ret.green = (PF_FpShort)(prm->Midtones.green + ( prm->Highlights.green - prm->Midtones.green) * v); + ret.red = (PF_FpShort)(prm->Midtones.red + ( prm->Highlights.red - prm->Midtones.red ) * v); + } + } + return ret; +} +//------------------------------------------------------------------------------------------------- +static PF_Err makeColorTbl8(ToneParam *infoP) +{ + + PF_Err err = PF_Err_NONE; + PF_Pixel *tbl; + tbl = (PF_Pixel *)infoP->colorTbl; + for ( A_long i=0; i<=PF_MAX_CHAN8; i++){ + infoP->level = (PF_FpShort)i / PF_MAX_CHAN8; + tbl[i] = CONV32TO8( colcColor(infoP) ); + } + return err; + +} +//------------------------------------------------------------------------------------------------- +static PF_Err makeColorTbl16(ToneParam *infoP) +{ + PF_Err err = PF_Err_NONE; + PF_Pixel16 *tbl; + tbl = (PF_Pixel16 *)infoP->colorTbl; + for ( A_long i=0; i<=PF_MAX_CHAN16; i++){ + infoP->level = (PF_FpShort)i / PF_MAX_CHAN16; + tbl[i] = CONV32TO16( colcColor(infoP) ); + } + 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; + ToneParam * niP = reinterpret_cast(refcon); + + PF_Pixel *tbl; + tbl = (PF_Pixel *)niP->colorTbl; + PF_Pixel col; + if (!tbl){ + err = PF_Err_BAD_CALLBACK_PARAM; + }else{ + A_long v =((outP->red*77)+(outP->green*151)+(outP->blue*28)) >>8; + if (v<0) v=0; + if (v>PF_MAX_CHAN8) v=PF_MAX_CHAN8; + col = tbl[v]; + + if ( niP->Blend_w_Original == 0){ + outP->red = col.red; + outP->green = col.green; + outP->blue = col.blue; + }else{ + PF_FpShort s = (PF_FpShort)1.0 - niP->Blend_w_Original; + outP->red = RoundByteFpLong(((PF_FpShort)outP->red * niP->Blend_w_Original) + ((PF_FpShort)col.red * s)); + outP->green = RoundByteFpLong(((PF_FpShort)outP->green * niP->Blend_w_Original) + ((PF_FpShort)col.green * s)); + outP->blue = RoundByteFpLong(((PF_FpShort)outP->blue * niP->Blend_w_Original) + ((PF_FpShort)col.blue * s)); + } + } + 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; + ToneParam * niP = reinterpret_cast(refcon); + + PF_Pixel16 *tbl; + tbl = (PF_Pixel16 *)niP->colorTbl; + PF_Pixel16 col; + if (!tbl){ + err = PF_Err_BAD_CALLBACK_PARAM; + }else{ + PF_FpShort v =(((PF_FpShort)outP->red*77/256)+((PF_FpShort)outP->green*151/256)+((PF_FpShort)outP->blue*28/256)); + if (v<0) v=0; + if (v>PF_MAX_CHAN16) v=PF_MAX_CHAN16; + + col = tbl[(A_long)v]; + + if ( niP->Blend_w_Original == 0){ + outP->red = col.red; + outP->green = col.green; + outP->blue = col.blue; + }else{ + PF_FpShort s = (PF_FpShort)1.0 - niP->Blend_w_Original; + outP->red = RoundShortFpLong(((PF_FpShort)outP->red * niP->Blend_w_Original) + ((PF_FpShort)col.red * s)); + outP->green = RoundShortFpLong(((PF_FpShort)outP->green * niP->Blend_w_Original) + ((PF_FpShort)col.green * s)); + outP->blue = RoundShortFpLong(((PF_FpShort)outP->blue * niP->Blend_w_Original) + ((PF_FpShort)col.blue * s)); + } + } + 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; + ToneParam * niP = reinterpret_cast(refcon); + PF_FpShort g; + + + g =(PF_FpShort)((outP->red*77/256)+(outP->green*151/256)+(outP->blue*28/256)); + if (g<0) g=0; + else if (g>1.0) g=1.0; + + PF_PixelFloat col; + ToneParam tp; + + tp.Highlights = niP->Highlights; + tp.Midtones = niP->Midtones; + tp.Shadows = niP->Shadows; + tp.MidtonesBorder = niP->MidtonesBorder; + tp.level = g; + col= colcColor(&tp); + + if ( niP->Blend_w_Original == 0){ + outP->red = col.red; + outP->green = col.green; + outP->blue = col.blue; + }else{ + PF_FpShort s = (PF_FpShort)1.0 - niP->Blend_w_Original; + outP->red = RoundFpShort((outP->red * niP->Blend_w_Original) + (col.red * s)); + outP->green = RoundFpShort((outP->green * niP->Blend_w_Original) + (col.green * s)); + outP->blue = RoundFpShort((outP->blue * niP->Blend_w_Original) + (col.blue * s)); + } + + return err; +} +//------------------------------------------------------------------------------------------------- +static PF_Err +GetParams (CFsAE *ae, ToneParam *infoP) +{ + PF_Err err = PF_Err_NONE; + + PF_Pixel p; + ERR( ae->GetCOLOR(ID_Highlights_COLOR,&p)); + if ( !err) infoP->Highlights = CONV8TO32(p); + ERR( ae->GetCOLOR(ID_Midtones_COLOR,&p)); + if ( !err) infoP->Midtones = CONV8TO32(p); + ERR( ae->GetCOLOR(ID_Shadows_COLOR,&p)); + if ( !err) infoP->Shadows = CONV8TO32(p); + PF_Fixed f; + ERR( ae->GetFIXED(ID_Midtones_OFFSET,&f)); + if ( !err) { + PF_FpShort s; + s = (PF_FpShort)f / (100L<<16); + if ( s<-1) s = -1; else if (s>1) s =1; + infoP->MidtonesBorder = (PF_FpShort)(0.5 * (s+1.0)); + } + ERR( ae->GetFIXED(ID_Blend_w_Original_FIXED,&f)); + if ( !err) infoP->Blend_w_Original = (PF_FpShort)f / (100L<<16); + infoP->level = 0; + return err; + +} +//------------------------------------------------------------------------------------------------- +static PF_Err +Exec (CFsAE *ae , ToneParam *tp) +{ + PF_Err err = PF_Err_NONE; + PF_Handle pixelTable = NULL; + if (tp->Blend_w_Original < 1.0) { + switch(ae->pixelFormat()) + { + case PF_PixelFormat_ARGB128: + ERR(ae->iterate32((refconType)tp,FilterImage32)); + break; + case PF_PixelFormat_ARGB64: + pixelTable = ae->NewHandle(COLOR_TABLE_SIZE16); + if(pixelTable){ + tp->colorTbl = *(PF_PixelPtr*)pixelTable; + makeColorTbl16(tp); + ERR(ae->iterate16((refconType)tp,FilterImage16)); + ae->DisposeHandle(pixelTable); + } + + break; + case PF_PixelFormat_ARGB32: + pixelTable = ae->NewHandle(COLOR_TABLE_SIZE8); + if(pixelTable){ + tp->colorTbl = *(PF_PixelPtr*)pixelTable; + makeColorTbl8(tp); + ERR(ae->iterate8((refconType)tp,FilterImage8)); + ae->DisposeHandle(pixelTable); + } + 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()); + ToneParam 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(ToneParam),ID_NUM_PARAMS); + err = ae.resultErr(); + if (!err){ + + ToneParam *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){ + ToneParam *infoP = reinterpret_cast(ae.LockPreRenderData()); + if (infoP){ + ERR(ae.CopyInToOut()); + 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/Tone/Tone.h b/Tone/Tone.h new file mode 100644 index 0000000..938db89 --- /dev/null +++ b/Tone/Tone.h @@ -0,0 +1,121 @@ +//----------------------------------------------------------------------------------- +/* + F's Plugins for VS2010/VS2012 +*/ +//----------------------------------------------------------------------------------- + +#pragma once +#ifndef Tone_H +#define Tone_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_Highlights_COLOR, //PF_Pixel + ID_Midtones_COLOR, //PF_Pixel + ID_Shadows_COLOR, //PF_Pixel + ID_Midtones_OFFSET, + ID_Blend_w_Original_FIXED, + + ID_NUM_PARAMS +}; + +//プラグイン独自のパラメータを集めた構造体 + +#define COLOR_TABLE_LENGTH8 256 +#define COLOR_TABLE_LENGTH16 (32768+1) + +#define COLOR_TABLE_SIZE8 ((COLOR_TABLE_LENGTH8) * sizeof(PF_Pixel)) +#define COLOR_TABLE_SIZE16 ((COLOR_TABLE_LENGTH16) * sizeof(PF_Pixel16)) + + +#define MID8 (COLOR_TABLE_LENGTH8 / 2 -1) +#define LAST8 (COLOR_TABLE_LENGTH8 -1) + +#define MID16 (COLOR_TABLE_LENGTH16 / 2-1) +#define LAST16 (COLOR_TABLE_LENGTH16-1) + + +#define STR_Highlights_COLOR "Highlights" +#define STR_Midtones_COLOR "Midtones" +#define STR_Shadows_COLOR "Shadows" +#define STR_Midtones_OFFSET "MidtonesOffset" +#define STR_Blend_w_Original_FIXED "Blend w. Original" + +//パラメータの初期値 +#define Highlights_def_red 0xFF +#define Highlights_def_green 0xFF +#define Highlights_def_blue 0xFF + +#define Midtones_def_red 0x7F +#define Midtones_def_green 0x64 +#define Midtones_def_blue 0x46 + +#define Midtones_def_offset 0x00 + +#define Shadows_def_red 0x00 +#define Shadows_def_green 0x00 +#define Shadows_def_blue 0x00 + +#define Blend_w_Original_def 0 + +typedef struct ToneParam { + PF_PixelPtr colorTbl; + PF_PixelFloat Highlights; + PF_PixelFloat Midtones; + PF_PixelFloat Shadows; + PF_FpShort MidtonesBorder; + PF_FpShort level; + PF_FpShort Blend_w_Original; +} ToneParam; + + +//------------------------------------------------------- +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 // Tone_H diff --git a/Tone/TonePiPL.r b/Tone/TonePiPL.r new file mode 100644 index 0000000..7073e33 --- /dev/null +++ b/Tone/TonePiPL.r @@ -0,0 +1,79 @@ +#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/Tone/Win/Tone.vcxproj b/Tone/Win/Tone.vcxproj new file mode 100644 index 0000000..54729cc --- /dev/null +++ b/Tone/Win/Tone.vcxproj @@ -0,0 +1,581 @@ +サソ + + + + Debug + Win32 + + + Debug + x64 + + + Release-MD + Win32 + + + Release-MD + x64 + + + Release + Win32 + + + Release + x64 + + + + {9857C05E-3174-42F6-AE20-A66113514946} + Tone + 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/Tone.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)_CS5_dbg.aex + true + true + $(IntDir)$(ProjectName).pdb + Windows + false + + + $(IntDir)$(ProjectName).lib + MachineX86 + + + + + _DEBUG;%(PreprocessorDefinitions) + true + true + X64 + .\Debug/Tone.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/Tone.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 + ..\..\outAEX\F%27s $(ProjectName)_CS5.aex + true + false + $(IntDir)$(ProjectName).pdb + Windows + false + + + $(IntDir)$(ProjectName).lib + MachineX86 + + + + + _DEBUG;%(PreprocessorDefinitions) + true + true + Win32 + .\Debug/Tone.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 + ..\..\outAEX\F%27s $(ProjectName)_CS5.aex + true + false + $(IntDir)$(ProjectName).pdb + Windows + false + + + $(IntDir)$(ProjectName).lib + MachineX86 + + + + + _DEBUG;%(PreprocessorDefinitions) + true + true + X64 + .\Debug/Tone.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/Tone.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/Tone/Win/Tone.vcxproj.filters b/Tone/Win/Tone.vcxproj.filters new file mode 100644 index 0000000..fbc4725 --- /dev/null +++ b/Tone/Win/Tone.vcxproj.filters @@ -0,0 +1,154 @@ + + + + + {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} + + + {bdade348-8dcc-4637-87f0-10b4c7be7034} + + + {1feda522-2b93-4ea8-9329-4a9de59bfd2b} + + + {baa1435e-4f1d-4956-a07e-10fc5493d997} + + + {d1987c4e-9635-41e2-a011-d185a7d2fff9} + + + + + 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/Tone/Win/TonePiPL.rc b/Tone/Win/TonePiPL.rc new file mode 100644 index 0000000..44e0fa3 --- /dev/null +++ b/Tone/Win/TonePiPL.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, + "\x08F's Tone\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, + 12, 0x0, + "\x08F's Tone\0\0\0", + + "MIB8", + 0x6165464CL, + 0L, + 4L + 0L, + + +END + diff --git a/Tone/Win/TonerPiPL.rc b/Tone/Win/TonerPiPL.rc new file mode 100644 index 0000000..9bd5550 --- /dev/null +++ b/Tone/Win/TonerPiPL.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, + "\x08F's Tone\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, 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, + "\x08F's Tone\0\0\0", + + "MIB8", + 0x6165464CL, + 0L, + 4L + 0L, + + +END + diff --git a/Toner/Fs_Target.h b/Toner/Fs_Target.h new file mode 100644 index 0000000..aa1ed06 --- /dev/null +++ b/Toner/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 Toner" + +//----------------------------------------------------------------------------------- +//プラグインの説明に使われる文字 +#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/Toner/Toner.cpp b/Toner/Toner.cpp new file mode 100644 index 0000000..6d287c4 --- /dev/null +++ b/Toner/Toner.cpp @@ -0,0 +1,634 @@ +//----------------------------------------------------------------------------------- +/* + F's Plugins for VS2010/VS2012 +*/ +//----------------------------------------------------------------------------------- + +#include "Toner.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_COLOR( STR_Highlights_COLOR, + Highlights_def_red, + Highlights_def_green, + Highlights_def_blue, + ID_Highlights_COLOR + ); + + //---------------------------------------------------------------- + //色の指定 + AEFX_CLR_STRUCT(def); + PF_ADD_COLOR( STR_Midtones_COLOR, + Midtones_def_red, + Midtones_def_green, + Midtones_def_blue, + ID_Midtones_COLOR + ); + + //---------------------------------------------------------------- + //色の指定 + AEFX_CLR_STRUCT(def); + PF_ADD_COLOR( STR_Shadows_COLOR, + Shadows_def_red, + Shadows_def_green, + Shadows_def_blue, + ID_Shadows_COLOR + ); + + //---------------------------------------------------------------- + //固定小数のスライダーバー + AEFX_CLR_STRUCT(def); + PF_ADD_FIXED( STR_Midtones_OFFSET,//パラメータの名前 + -100, //数値入力する場合の最小値 + 100, //数値入力する場合の最大値 + -50, //スライダーの最小値 + 50, //スライダーの最大値 + Midtones_def_offset,//デフォルトの値 + 1, //数値表示に関するフラグ + 0, + 0, + ID_Midtones_OFFSET + ); + //---------------------------------------------------------------- + //固定小数のスライダーバー + AEFX_CLR_STRUCT(def); + PF_ADD_FIXED( STR_Blend_w_Original_FIXED, //パラメータの名前 + 0, //数値入力する場合の最小値 + 100, //数値入力する場合の最大値 + 0, //スライダーの最小値 + 100, //スライダーの最大値 + Blend_w_Original_def, //デフォルトの値 + 1, //数値表示に関するフラグ + 0, + 0, + ID_Blend_w_Original_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)&&(in_data->appl_id != 'PrMr')){ + //-------------------- + + ERR(ae.GetNewEffectStreamAll()); + if (!err){ + A_Boolean hide_themB[ID_NUM_PARAMS]; + for ( A_long i=1; iout_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_PixelFloat colcColor(ToneParam *prm) +{ + PF_PixelFloat ret= {0,0,0,0}; + PF_FpShort l = prm->level; + PF_FpShort b = prm->MidtonesBorder; + + if (l<=0) { + if ( b ==0) ret = prm->Midtones; + else ret = prm->Shadows; + }else if (l>=1.0) { + if ( b ==1) ret = prm->Midtones; + else ret = prm->Highlights; + }else if (l==b) { + ret = prm->Midtones; + }else{ + PF_FpShort v; + if ( lShadows.blue + ( prm->Midtones.blue - prm->Shadows.blue) * v; + ret.green = prm->Shadows.green + ( prm->Midtones.green - prm->Shadows.green) * v; + ret.red = prm->Shadows.red + ( prm->Midtones.red - prm->Shadows.red) * v; + }else{ + v = (PF_FpShort)((l- b)/(1.0 - b)); + ret.blue = (PF_FpShort)(prm->Midtones.blue + ( prm->Highlights.blue - prm->Midtones.blue ) * v); + ret.green = (PF_FpShort)(prm->Midtones.green + ( prm->Highlights.green - prm->Midtones.green) * v); + ret.red = (PF_FpShort)(prm->Midtones.red + ( prm->Highlights.red - prm->Midtones.red ) * v); + } + } + return ret; +} +//------------------------------------------------------------------------------------------------- +static PF_Err makeColorTbl8(ToneParam *infoP) +{ + + PF_Err err = PF_Err_NONE; + PF_Pixel *tbl; + tbl = (PF_Pixel *)infoP->colorTbl; + for ( A_long i=0; i<=PF_MAX_CHAN8; i++){ + infoP->level = (PF_FpShort)i / PF_MAX_CHAN8; + tbl[i] = CONV32TO8( colcColor(infoP) ); + } + return err; + +} +//------------------------------------------------------------------------------------------------- +static PF_Err makeColorTbl16(ToneParam *infoP) +{ + PF_Err err = PF_Err_NONE; + PF_Pixel16 *tbl; + tbl = (PF_Pixel16 *)infoP->colorTbl; + for ( A_long i=0; i<=PF_MAX_CHAN16; i++){ + infoP->level = (PF_FpShort)i / PF_MAX_CHAN16; + tbl[i] = CONV32TO16( colcColor(infoP) ); + } + 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; + ToneParam * niP = reinterpret_cast(refcon); + + PF_Pixel *tbl; + tbl = (PF_Pixel *)niP->colorTbl; + PF_Pixel col; + if (!tbl){ + err = PF_Err_BAD_CALLBACK_PARAM; + }else{ + A_long v =((outP->red*77)+(outP->green*151)+(outP->blue*28)) >>8; + if (v<0) v=0; + if (v>PF_MAX_CHAN8) v=PF_MAX_CHAN8; + col = tbl[v]; + + if ( niP->Blend_w_Original == 0){ + outP->red = col.red; + outP->green = col.green; + outP->blue = col.blue; + }else{ + PF_FpShort s = (PF_FpShort)1.0 - niP->Blend_w_Original; + outP->red = RoundByteFpLong(((PF_FpShort)outP->red * niP->Blend_w_Original) + ((PF_FpShort)col.red * s)); + outP->green = RoundByteFpLong(((PF_FpShort)outP->green * niP->Blend_w_Original) + ((PF_FpShort)col.green * s)); + outP->blue = RoundByteFpLong(((PF_FpShort)outP->blue * niP->Blend_w_Original) + ((PF_FpShort)col.blue * s)); + } + } + 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; + ToneParam * niP = reinterpret_cast(refcon); + + PF_Pixel16 *tbl; + tbl = (PF_Pixel16 *)niP->colorTbl; + PF_Pixel16 col; + if (!tbl){ + err = PF_Err_BAD_CALLBACK_PARAM; + }else{ + PF_FpShort v =(((PF_FpShort)outP->red*77/256)+((PF_FpShort)outP->green*151/256)+((PF_FpShort)outP->blue*28/256)); + if (v<0) v=0; + if (v>PF_MAX_CHAN16) v=PF_MAX_CHAN16; + + col = tbl[(A_long)v]; + + if ( niP->Blend_w_Original == 0){ + outP->red = col.red; + outP->green = col.green; + outP->blue = col.blue; + }else{ + PF_FpShort s = (PF_FpShort)1.0 - niP->Blend_w_Original; + outP->red = RoundShortFpLong(((PF_FpShort)outP->red * niP->Blend_w_Original) + ((PF_FpShort)col.red * s)); + outP->green = RoundShortFpLong(((PF_FpShort)outP->green * niP->Blend_w_Original) + ((PF_FpShort)col.green * s)); + outP->blue = RoundShortFpLong(((PF_FpShort)outP->blue * niP->Blend_w_Original) + ((PF_FpShort)col.blue * s)); + } + } + 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; + ToneParam * niP = reinterpret_cast(refcon); + PF_FpShort g; + + + g =(PF_FpShort)((outP->red*77/256)+(outP->green*151/256)+(outP->blue*28/256)); + if (g<0) g=0; + else if (g>1.0) g=1.0; + + PF_PixelFloat col; + ToneParam tp; + + tp.Highlights = niP->Highlights; + tp.Midtones = niP->Midtones; + tp.Shadows = niP->Shadows; + tp.MidtonesBorder = niP->MidtonesBorder; + tp.level = g; + col= colcColor(&tp); + + if ( niP->Blend_w_Original == 0){ + outP->red = col.red; + outP->green = col.green; + outP->blue = col.blue; + }else{ + PF_FpShort s = (PF_FpShort)1.0 - niP->Blend_w_Original; + outP->red = RoundFpShort((outP->red * niP->Blend_w_Original) + (col.red * s)); + outP->green = RoundFpShort((outP->green * niP->Blend_w_Original) + (col.green * s)); + outP->blue = RoundFpShort((outP->blue * niP->Blend_w_Original) + (col.blue * s)); + } + + return err; +} +//------------------------------------------------------------------------------------------------- +static PF_Err +GetParams (CFsAE *ae, ToneParam *infoP) +{ + PF_Err err = PF_Err_NONE; + + PF_Pixel p; + ERR( ae->GetCOLOR(ID_Highlights_COLOR,&p)); + if ( !err) infoP->Highlights = CONV8TO32(p); + ERR( ae->GetCOLOR(ID_Midtones_COLOR,&p)); + if ( !err) infoP->Midtones = CONV8TO32(p); + ERR( ae->GetCOLOR(ID_Shadows_COLOR,&p)); + if ( !err) infoP->Shadows = CONV8TO32(p); + PF_Fixed f; + ERR( ae->GetFIXED(ID_Midtones_OFFSET,&f)); + if ( !err) { + PF_FpShort s; + s = (PF_FpShort)f / (100L<<16); + if ( s<-1) s = -1; else if (s>1) s =1; + infoP->MidtonesBorder = (PF_FpShort)(0.5 * (s+1.0)); + } + ERR( ae->GetFIXED(ID_Blend_w_Original_FIXED,&f)); + if ( !err) infoP->Blend_w_Original = (PF_FpShort)f / (100L<<16); + infoP->level = 0; + return err; + +} +//------------------------------------------------------------------------------------------------- +static PF_Err +Exec (CFsAE *ae , ToneParam *tp) +{ + PF_Err err = PF_Err_NONE; + PF_Handle pixelTable = NULL; + if (tp->Blend_w_Original < 1.0) { + switch(ae->pixelFormat()) + { + case PF_PixelFormat_ARGB128: + ERR(ae->iterate32((refconType)tp,FilterImage32)); + break; + case PF_PixelFormat_ARGB64: + pixelTable = ae->NewHandle(COLOR_TABLE_SIZE16); + if(pixelTable){ + tp->colorTbl = *(PF_PixelPtr*)pixelTable; + makeColorTbl16(tp); + ERR(ae->iterate16((refconType)tp,FilterImage16)); + ae->DisposeHandle(pixelTable); + } + + break; + case PF_PixelFormat_ARGB32: + pixelTable = ae->NewHandle(COLOR_TABLE_SIZE8); + if(pixelTable){ + tp->colorTbl = *(PF_PixelPtr*)pixelTable; + makeColorTbl8(tp); + ERR(ae->iterate8((refconType)tp,FilterImage8)); + ae->DisposeHandle(pixelTable); + } + 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()); + ToneParam 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(ToneParam),ID_NUM_PARAMS); + err = ae.resultErr(); + if (!err){ + + ToneParam *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){ + ToneParam *infoP = reinterpret_cast(ae.LockPreRenderData()); + if (infoP){ + ERR(ae.CopyInToOut()); + 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/Toner/Toner.h b/Toner/Toner.h new file mode 100644 index 0000000..fbba59e --- /dev/null +++ b/Toner/Toner.h @@ -0,0 +1,121 @@ +//----------------------------------------------------------------------------------- +/* + F's Plugins for VS2010/VS2012 +*/ +//----------------------------------------------------------------------------------- + +#pragma once +#ifndef Toner_H +#define Toner_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_Highlights_COLOR, //PF_Pixel + ID_Midtones_COLOR, //PF_Pixel + ID_Shadows_COLOR, //PF_Pixel + ID_Midtones_OFFSET, + ID_Blend_w_Original_FIXED, + + ID_NUM_PARAMS +}; + +//プラグイン独自のパラメータを集めた構造体 + +#define COLOR_TABLE_LENGTH8 256 +#define COLOR_TABLE_LENGTH16 (32768+1) + +#define COLOR_TABLE_SIZE8 ((COLOR_TABLE_LENGTH8) * sizeof(PF_Pixel)) +#define COLOR_TABLE_SIZE16 ((COLOR_TABLE_LENGTH16) * sizeof(PF_Pixel16)) + + +#define MID8 (COLOR_TABLE_LENGTH8 / 2 -1) +#define LAST8 (COLOR_TABLE_LENGTH8 -1) + +#define MID16 (COLOR_TABLE_LENGTH16 / 2-1) +#define LAST16 (COLOR_TABLE_LENGTH16-1) + + +#define STR_Highlights_COLOR "Highlights" +#define STR_Midtones_COLOR "Midtones" +#define STR_Shadows_COLOR "Shadows" +#define STR_Midtones_OFFSET "MidtonesOffset" +#define STR_Blend_w_Original_FIXED "Blend w. Original" + +//パラメータの初期値 +#define Highlights_def_red 0xFF +#define Highlights_def_green 0xFF +#define Highlights_def_blue 0xFF + +#define Midtones_def_red 0x7F +#define Midtones_def_green 0x64 +#define Midtones_def_blue 0x46 + +#define Midtones_def_offset 0x00 + +#define Shadows_def_red 0x00 +#define Shadows_def_green 0x00 +#define Shadows_def_blue 0x00 + +#define Blend_w_Original_def 0 + +typedef struct ToneParam { + PF_PixelPtr colorTbl; + PF_PixelFloat Highlights; + PF_PixelFloat Midtones; + PF_PixelFloat Shadows; + PF_FpShort MidtonesBorder; + PF_FpShort level; + PF_FpShort Blend_w_Original; +} ToneParam; + + +//------------------------------------------------------- +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 // Toner_H diff --git a/Toner/TonerPiPL.r b/Toner/TonerPiPL.r new file mode 100644 index 0000000..7073e33 --- /dev/null +++ b/Toner/TonerPiPL.r @@ -0,0 +1,79 @@ +#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/Toner/Win/Toner.vcxproj b/Toner/Win/Toner.vcxproj new file mode 100644 index 0000000..30bd401 --- /dev/null +++ b/Toner/Win/Toner.vcxproj @@ -0,0 +1,581 @@ +サソ + + + + Debug + Win32 + + + Debug + x64 + + + Release-MD + Win32 + + + Release-MD + x64 + + + Release + Win32 + + + Release + x64 + + + + {DF53575A-3898-40BE-BA28-D8BE0403127C} + Toner + 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/Toner.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)_CS5_dbg.aex + true + true + $(IntDir)$(ProjectName).pdb + Windows + false + + + $(IntDir)$(ProjectName).lib + MachineX86 + + + + + _DEBUG;%(PreprocessorDefinitions) + true + true + X64 + .\Debug/Toner.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/Toner.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 + ..\..\outAEX\F%27s $(ProjectName)_CS5.aex + true + false + $(IntDir)$(ProjectName).pdb + Windows + false + + + $(IntDir)$(ProjectName).lib + MachineX86 + + + + + _DEBUG;%(PreprocessorDefinitions) + true + true + Win32 + .\Debug/Toner.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 + ..\..\outAEX\F%27s $(ProjectName)_CS5.aex + true + false + $(IntDir)$(ProjectName).pdb + Windows + false + + + $(IntDir)$(ProjectName).lib + MachineX86 + + + + + _DEBUG;%(PreprocessorDefinitions) + true + true + X64 + .\Debug/Toner.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/Toner.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/Toner/Win/Toner.vcxproj.filters b/Toner/Win/Toner.vcxproj.filters new file mode 100644 index 0000000..74bae0b --- /dev/null +++ b/Toner/Win/Toner.vcxproj.filters @@ -0,0 +1,154 @@ + + + + + {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} + + + {bdade348-8dcc-4637-87f0-10b4c7be7034} + + + {1feda522-2b93-4ea8-9329-4a9de59bfd2b} + + + {baa1435e-4f1d-4956-a07e-10fc5493d997} + + + {d1987c4e-9635-41e2-a011-d185a7d2fff9} + + + + + 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/Toner/Win/TonerPiPL.rc b/Toner/Win/TonerPiPL.rc new file mode 100644 index 0000000..c729e29 --- /dev/null +++ b/Toner/Win/TonerPiPL.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 Toner\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, + 12, 0x0, + "\x09F's Toner\0\0", + + "MIB8", + 0x6165464CL, + 0L, + 4L + 0L, + + +END + diff --git a/TouchDraw/FsTDFindTarget.cpp b/TouchDraw/FsTDFindTarget.cpp new file mode 100644 index 0000000..e21843f --- /dev/null +++ b/TouchDraw/FsTDFindTarget.cpp @@ -0,0 +1,389 @@ +#include "TouchDraw.h" + + +//#define TARGET_COLOR green +#define TARGET_COLOR blue + + +typedef struct { + PF_Pixel targetColor; + A_u_char lv; + A_long count; +} FindTargetColorParam8; +typedef struct { + PF_Pixel targetColor; + A_u_short lv; + A_long count; +} FindTargetColorParam16; +typedef struct { + PF_Pixel targetColor; + PF_FpShort lv; + A_long count; +} FindTargetColorParam32; + + +typedef struct { + A_long table[10]; + A_long width; + A_long height; + A_long count; +} FindEdgeParam; + +//************************************************************************************************* +//ターゲットと同じ色を探してredにフラグを立てる +//************************************************************************************************* +//------------------------------------------------------------------------------------------------- +static PF_Err +FindTargetColorSub8 ( + refconType refcon, + A_long xL, + A_long yL, + PF_Pixel8 *inP, + PF_Pixel8 *outP) +{ + PF_Err err = PF_Err_NONE; + FindTargetColorParam8 * infoP = reinterpret_cast(refcon); + if ( compPix8Lv(*inP,infoP->targetColor,infoP->lv)==TRUE){ + outP->red = PF_MAX_CHAN8; + infoP->count++; + }else{ + outP->red = 0; + } + return err; +} +//------------------------------------------------------------------------------------------------- +static PF_Err +FindTargetColorSub16 ( + refconType refcon, + A_long xL, + A_long yL, + PF_Pixel16 *inP, + PF_Pixel16 *outP) +{ + PF_Err err = PF_Err_NONE; + FindTargetColorParam8 * infoP = reinterpret_cast(refcon); + if ( compPix8Lv(CONV16TO8( *inP),infoP->targetColor,infoP->lv)==TRUE){ + outP->red = PF_MAX_CHAN16; + infoP->count++; + }else{ + outP->red = 0; + } + + + return err; +} +//------------------------------------------------------------------------------------------------- +static PF_Err +FindTargetColorSub32 ( + refconType refcon, + A_long xL, + A_long yL, + PF_PixelFloat *inP, + PF_PixelFloat *outP) +{ + PF_Err err = PF_Err_NONE; + FindTargetColorParam8 * infoP = reinterpret_cast(refcon); + if ( compPix8Lv(CONV32TO8(*inP),infoP->targetColor,infoP->lv)==TRUE){ + outP->red = 1; + infoP->count++; + }else{ + outP->red = 0; + } + + + return err; +} +//------------------------------------------------------------------------------------------------- +PF_Err FindTargetColor8(CFsAE *ae , PF_Pixel target_color,A_long color_range ,A_long *count) +{ + PF_Err err = PF_Err_NONE; + FindTargetColorParam8 info; + info.count = 0; + info.targetColor = target_color; + info.lv = RoundByteLong( PF_MAX_CHAN8 * color_range >> 16); + err = ae->iterate8( (refconType)&info,FindTargetColorSub8); + if ( !err){ + *count = info.count; + }else{ + *count = 0; + } + return err; +} +//------------------------------------------------------------------------------------------------- +PF_Err FindTargetColor16(CFsAE *ae , PF_Pixel target_color,A_long color_range ,A_long *count) +{ + PF_Err err = PF_Err_NONE; + FindTargetColorParam8 info; + info.count = 0; + info.targetColor = target_color; + info.lv = RoundByteLong( PF_MAX_CHAN8 * color_range >> 16); + err = ae->iterate16((refconType)&info,FindTargetColorSub16); + if ( !err){ + *count = info.count; + }else{ + *count = 0; + } + return err; +} +//------------------------------------------------------------------------------------------------- +PF_Err FindTargetColor32(CFsAE *ae , PF_Pixel target_color,A_long color_range ,A_long *count) +{ + PF_Err err = PF_Err_NONE; + FindTargetColorParam8 info; + info.count = 0; + info.targetColor = target_color; + info.lv = RoundByteLong( PF_MAX_CHAN8 * color_range >> 16); + err = ae->iterate32( (refconType)&info,FindTargetColorSub32); + if ( !err){ + *count = info.count; + }else{ + *count = 0; + } + return err; +} +//************************************************************************************************* +//redを見てエッジを抽出 blueにフラグ +//************************************************************************************************* +//------------------------------------------------------------------------------------------------- +static PF_Err +FindEdgeSub8 ( + refconType refcon, + A_long xL, + A_long yL, + PF_Pixel8 *inP, + PF_Pixel8 *outP) +{ + PF_Err err = PF_Err_NONE; + FindEdgeParam * infoP = reinterpret_cast(refcon); + + A_u_char mx = PF_MAX_CHAN8; + if ( outP->red < mx){ + outP->alpha = 0; + }else{ + PF_Boolean r = TRUE; + if ((xL>=1)&&(yL>=1)) + if (outP[infoP->table[0]].red < mx) r = FALSE; + if (r==TRUE) if (yL>=1) + if (outP[infoP->table[1]].red < mx) r = FALSE; + if ( r == TRUE) if ((xL<=infoP->width)&&(yL>=1)) + if (outP[infoP->table[2]].red < mx) r = FALSE; + if ( r == TRUE) if (xL>=1) + if (outP[infoP->table[3]].red < mx) r = FALSE; + if ( r == TRUE) if (xL<=infoP->width) + if (outP[infoP->table[5]].red < mx) r = FALSE; + if ( r == TRUE) if ((xL>=1)&&(yL<=infoP->height)) + if (outP[infoP->table[6]].red < mx) r = FALSE; + if ( r == TRUE) if (yL<=infoP->height) + if (outP[infoP->table[7]].red != mx) r = FALSE; + if ( r == TRUE) if ((xL<=infoP->width)&&(yL<=infoP->height)) + if (outP[infoP->table[8]].red < mx) r = FALSE; + + if( r==TRUE) + outP->TARGET_COLOR = 0; + else { + outP->TARGET_COLOR = mx; + infoP->count++; + } + } + + return err; +} +//------------------------------------------------------------------------------------------------- +static PF_Err +FindEdgeSub16 ( + refconType refcon, + A_long xL, + A_long yL, + PF_Pixel16 *inP, + PF_Pixel16 *outP) +{ + PF_Err err = PF_Err_NONE; + FindEdgeParam * infoP = reinterpret_cast(refcon); + + A_u_short mx = PF_MAX_CHAN16; + if ( outP->red < mx){ + outP->alpha = 0; + }else{ + PF_Boolean r = TRUE; + if ((xL>=1)&&(yL>=1)) + if (outP[infoP->table[0]].red < mx) r = FALSE; + if (r==TRUE) if (yL>=1) + if (outP[infoP->table[1]].red < mx) r = FALSE; + if ( r == TRUE) if ((xL<=infoP->width)&&(yL>=1)) + if (outP[infoP->table[2]].red < mx) r = FALSE; + if ( r == TRUE) if (xL>=1) + if (outP[infoP->table[3]].red < mx) r = FALSE; + if ( r == TRUE) if (xL<=infoP->width) + if (outP[infoP->table[5]].red < mx) r = FALSE; + if ( r == TRUE) if ((xL>=1)&&(yL<=infoP->height)) + if (outP[infoP->table[6]].red < mx) r = FALSE; + if ( r == TRUE) if (yL<=infoP->height) + if (outP[infoP->table[7]].red < mx) r = FALSE; + if ( r == TRUE) if ((xL<=infoP->width)&&(yL<=infoP->height)) + if (outP[infoP->table[8]].red < mx) r = FALSE; + + if( r==TRUE) + outP->TARGET_COLOR = 0; + else { + outP->TARGET_COLOR = mx; + infoP->count++; + } + } + + return err; +} +//------------------------------------------------------------------------------------------------- +static PF_Err +FindEdgeSub32 ( + refconType refcon, + A_long xL, + A_long yL, + PF_PixelFloat *inP, + PF_PixelFloat *outP) +{ + PF_Err err = PF_Err_NONE; + FindEdgeParam * infoP = reinterpret_cast(refcon); + + PF_FpShort mx = 1; + if ( outP->red != mx){ + outP->alpha = 0; + }else{ + PF_Boolean r = TRUE; + if ((xL>=1)&&(yL>=1)) + if (outP[infoP->table[0]].red < mx) r = FALSE; + if (r==TRUE) if (yL>=1) + if (outP[infoP->table[1]].red < mx) r = FALSE; + if ( r == TRUE) if ((xL<=infoP->width)&&(yL>=1)) + if (outP[infoP->table[2]].red < mx) r = FALSE; + if ( r == TRUE) if (xL>=1) + if (outP[infoP->table[3]].red < mx) r = FALSE; + if ( r == TRUE) if (xL<=infoP->width) + if (outP[infoP->table[5]].red < mx) r = FALSE; + if ( r == TRUE) if ((xL>=1)&&(yL<=infoP->height)) + if (outP[infoP->table[6]].red < mx) r = FALSE; + if ( r == TRUE) if (yL<=infoP->height) + if (outP[infoP->table[7]].red < mx) r = FALSE; + if ( r == TRUE) if ((xL<=infoP->width)&&(yL<=infoP->height)) + if (outP[infoP->table[8]].red < mx) r = FALSE; + + if( r==TRUE) + outP->TARGET_COLOR = 0; + else { + outP->TARGET_COLOR = mx; + infoP->count++; + } + } + + return err; +} +//------------------------------------------------------------------------------------------------- +PF_Err FindEdge8(CFsAE *ae ,A_long *count) +{ + PF_Err err = PF_Err_NONE; + FindEdgeParam info; + info.width = ae->out->width()-2; + info.height = ae->out->height()-2; + info.count = 0; + + info.table[0] = -1 -ae->out->widthTrue(); + info.table[1] = 0 -ae->out->widthTrue(); + info.table[2] = 1 -ae->out->widthTrue(); + info.table[3] = -1 ; + info.table[4] = 0 ; + info.table[5] = 1 ; + info.table[6] = -1 +ae->out->widthTrue(); + info.table[7] = 0 +ae->out->widthTrue(); + info.table[8] = 1 +ae->out->widthTrue(); + err = ae->iterate8((refconType) &info,FindEdgeSub8); + if ( !err){ + *count = info.count; + }else{ + *count = 0; + } + return err; +} +//------------------------------------------------------------------------------------------------- +PF_Err FindEdge16(CFsAE *ae , A_long *count) +{ + PF_Err err = PF_Err_NONE; + FindEdgeParam info; + info.width = ae->out->width()-2; + info.height = ae->out->height()-2; + info.count = 0; + + info.table[0] = -1 -ae->out->widthTrue(); + info.table[1] = 0 -ae->out->widthTrue(); + info.table[2] = 1 -ae->out->widthTrue(); + info.table[3] = -1 ; + info.table[4] = 0 ; + info.table[5] = 1 ; + info.table[6] = -1 +ae->out->widthTrue(); + info.table[7] = 0 +ae->out->widthTrue(); + info.table[8] = 1 +ae->out->widthTrue(); + err = ae->iterate16((refconType)&info,FindEdgeSub16); + if ( !err){ + *count = info.count; + }else{ + *count = 0; + } + return err; +} +//------------------------------------------------------------------------------------------------- +PF_Err FindEdge32(CFsAE *ae ,A_long *count) +{ + PF_Err err = PF_Err_NONE; + FindEdgeParam info; + info.width = ae->out->width()-2; + info.height = ae->out->height()-2; + info.count = 0; + + info.table[0] = -1 -ae->out->widthTrue(); + info.table[1] = 0 -ae->out->widthTrue(); + info.table[2] = 1 -ae->out->widthTrue(); + info.table[3] = -1 ; + info.table[4] = 0 ; + info.table[5] = 1 ; + info.table[6] = -1 +ae->out->widthTrue(); + info.table[7] = 0 +ae->out->widthTrue(); + info.table[8] = 1 +ae->out->widthTrue(); + err = ae->iterate32((refconType)&info,FindEdgeSub32); + if ( !err){ + *count = info.count; + }else{ + *count = 0; + } + return err; +} +//------------------------------------------------------------------------------------------------- +//------------------------------------------------------------------------------------------------- +//------------------------------------------------------------------------------------------------- +PF_Err FindTarget(CFsAE *ae , PF_Pixel target_color, A_long color_range) +{ + PF_Err err = PF_Err_NONE; + A_long count = 0; + switch(ae->pixelFormat()) + { + case PF_PixelFormat_ARGB128: + FindTargetColor32(ae,target_color,color_range,&count); + if (count>0) + FindEdge32(ae,&count); + else + ae->out->clear(); + break; + case PF_PixelFormat_ARGB64: + FindTargetColor16(ae,target_color,color_range,&count); + if (count>0) + FindEdge16(ae,&count); + else + ae->out->clear(); + break; + case PF_PixelFormat_ARGB32: + FindTargetColor8(ae,target_color,color_range,&count); + if (count>0) + FindEdge8(ae,&count); + else + ae->out->clear(); + break; + } + return err; +} diff --git a/TouchDraw/FsTDFindTargetDelta.cpp b/TouchDraw/FsTDFindTargetDelta.cpp new file mode 100644 index 0000000..c4f85bf --- /dev/null +++ b/TouchDraw/FsTDFindTargetDelta.cpp @@ -0,0 +1,279 @@ +#include "TouchDraw.h" + + +typedef struct { + A_long widthTrue; + A_long width; + A_long height; + A_long lv; + PF_Boolean isAlpha; +} DeltaSubParam; + +//#define TARGET_DELTA green +#define TARGET_DELTA blue +//------------------------------------------------------------------------------------------------- +inline A_long SubtrucPixelAlpha8(PF_Pixel s, PF_Pixel d) +{ + return (A_long)F_ABS(s.alpha - d.alpha); +} +//------------------------------------------------------------------------------------------------- +inline A_long SubtrucPixelAlpha16(PF_Pixel16 s, PF_Pixel16 d) +{ + return (A_long)FS_CONVERT16TO8(F_ABS(s.alpha - d.alpha)); +} +//------------------------------------------------------------------------------------------------- +inline A_long SubtrucPixelAlpha32(PF_PixelFloat s, PF_PixelFloat d) +{ + return FS_CONVERT32TO8(PF_MAX_CHAN8 * F_ABS(s.alpha - d.alpha)); +} +//------------------------------------------------------------------------------------------------- +inline A_long SubtrucPixel8(PF_Pixel s, PF_Pixel d) +{ + A_long v =0; + /* + v += F_ABS(s.red *s.alpha/PF_MAX_CHAN8 - d.red *d.alpha/PF_MAX_CHAN8); + v += F_ABS(s.green*s.alpha/PF_MAX_CHAN8 - d.green*d.alpha/PF_MAX_CHAN8); + v += F_ABS(s.blue *s.alpha/PF_MAX_CHAN8 - d.blue *d.alpha/PF_MAX_CHAN8); + */ + v += F_ABS(s.red *s.alpha - d.red *d.alpha)/PF_MAX_CHAN8; + v += F_ABS(s.green*s.alpha - d.green*d.alpha)/PF_MAX_CHAN8; + v += F_ABS(s.blue *s.alpha - d.blue *d.alpha)/PF_MAX_CHAN8; + + v = v/3; + if ( v>PF_MAX_CHAN8) v = PF_MAX_CHAN8; + return (A_long)v; +} +//------------------------------------------------------------------------------------------------- +inline A_long SubtrucPixel16(PF_Pixel16 s, PF_Pixel16 d) +{ + A_long v =0; + v += F_ABS(s.red*s.alpha/PF_MAX_CHAN16 - d.red*d.alpha/PF_MAX_CHAN16); + v += F_ABS(s.green*s.alpha/PF_MAX_CHAN16 - d.green*d.alpha/PF_MAX_CHAN16); + v += F_ABS(s.blue*s.alpha/PF_MAX_CHAN16 - d.blue*d.alpha/PF_MAX_CHAN16); + + v = FS_CONVERT16TO8(v/3); + if ( v>PF_MAX_CHAN8) v = PF_MAX_CHAN8; + return (A_long)v; +} +//------------------------------------------------------------------------------------------------- +inline A_long SubtrucPixel32(PF_PixelFloat s, PF_PixelFloat d) +{ + PF_FpLong v =0; + PF_FpLong a =0; + + a = F_ABS(s.red*s.alpha - d.red*d.alpha); + if ( a>1) a = 1; + v +=a; + + a = F_ABS(s.green*s.alpha - d.green*d.alpha); + if ( a>1) a = 1; + v +=a; + + a = F_ABS(s.blue*s.alpha - d.blue*d.alpha); + if ( a>1) a = 1; + v +=a; + v = FS_CONVERT32TO8(v/3); + if ( v>PF_MAX_CHAN8) v = PF_MAX_CHAN8; + return (A_long)v; +} +//------------------------------------------------------------------------------------------------- +//------------------------------------------------------------------------------------------------- +static PF_Err +DeltaSub8 ( + refconType refcon, + A_long xL, + A_long yL, + PF_Pixel8 *inP, + PF_Pixel8 *outP) +{ + PF_Err err = PF_Err_NONE; + DeltaSubParam * infoP = reinterpret_cast(refcon); + + A_long v,mv,mx; + v =0; + mv =0; + mx = PF_MAX_CHAN8;//A_u_char で識別 + + if (mvwidth) { + if (infoP->isAlpha==TRUE){ + v = SubtrucPixelAlpha8(*inP, inP[1]); + }else{ + v = SubtrucPixel8(*inP, inP[1]); + } + if (mvheight) { + PF_Pixel *g = inP; + g += infoP->widthTrue; + if (infoP->isAlpha==TRUE){ + v = SubtrucPixelAlpha8(*inP, *g); + }else{ + v = SubtrucPixel8(*inP, *g); + } + if (mvblue = outP->green = outP->red = outP->alpha = 0; + if ( mv>infoP->lv){ + outP->TARGET_DELTA = PF_MAX_CHAN8; + } + return err; +} +//------------------------------------------------------------------------------------------------- +static PF_Err +DeltaSub16 ( + refconType refcon, + A_long xL, + A_long yL, + PF_Pixel16 *inP, + PF_Pixel16 *outP) +{ + PF_Err err = PF_Err_NONE; + DeltaSubParam * infoP = reinterpret_cast(refcon); + + A_long v,mv,mx; + v =0; + mv =0; + mx = PF_MAX_CHAN8;//A_u_char で識別 + + if (mvwidth) { + if (infoP->isAlpha==TRUE){ + v = SubtrucPixelAlpha16(*inP, inP[1]); + }else{ + v = SubtrucPixel16(*inP, inP[1]); + } + if (mvheight) { + if (infoP->isAlpha==TRUE){ + v = SubtrucPixelAlpha16(*inP, inP[infoP->widthTrue]); + }else{ + v = SubtrucPixel16(*inP, inP[infoP->widthTrue]); + } + if (mvinfoP->lv){ + outP->TARGET_DELTA = PF_MAX_CHAN16; + }else{ + outP->TARGET_DELTA = 0; + } + return err; +} + +//------------------------------------------------------------------------------------------------- +static PF_Err +DeltaSub32 ( + refconType refcon, + A_long xL, + A_long yL, + PF_PixelFloat *inP, + PF_PixelFloat *outP) +{ + PF_Err err = PF_Err_NONE; + DeltaSubParam * infoP = reinterpret_cast(refcon); + + A_long v,mv,mx; + v =0; + mv =0; + mx = PF_MAX_CHAN8;//A_u_char で識別 + if (mvwidth) { + if (infoP->isAlpha==TRUE){ + v = SubtrucPixelAlpha32(*inP, inP[1]); + }else{ + v = SubtrucPixel32(*inP, inP[1]); + } + if (mvheight) { + if (infoP->isAlpha==TRUE){ + v = SubtrucPixelAlpha32(*inP, inP[infoP->widthTrue]); + }else{ + v = SubtrucPixel32(*inP, inP[infoP->widthTrue]); + } + if (mvinfoP->lv){ + outP->TARGET_DELTA = 1; + }else{ + outP->TARGET_DELTA = 0; + } + return err; +} +//------------------------------------------------------------------------------------------------- +PF_Err TargetDelta_8(CFsAE *ae , A_long delta_range,PF_Boolean isMask) +{ + PF_Err err = PF_Err_NONE; + DeltaSubParam info; + info.width = ae->out->width()-2; + info.height = ae->out->height()-2; + info.lv = (A_long)(PF_MAX_CHAN8 * delta_range >> 16); + info.isAlpha = isMask; + info.widthTrue = ae->in->widthTrue(); + err = ae->iterate8((refconType)&info,DeltaSub8); + return err; +} +//------------------------------------------------------------------------------------------------- +PF_Err TargetDelta_16(CFsAE *ae , A_long delta_range,PF_Boolean isMask) +{ + PF_Err err = PF_Err_NONE; + DeltaSubParam info; + info.width = ae->out->width()-2; + info.height = ae->out->height()-2; + info.lv = (A_long)(PF_MAX_CHAN8 * delta_range >> 16); + info.isAlpha = isMask; + info.widthTrue = ae->in->widthTrue(); + err = ae->iterate16((refconType)&info,DeltaSub16); + return err; +} +//------------------------------------------------------------------------------------------------- +PF_Err TargetDelta_32(CFsAE *ae , A_long delta_range,PF_Boolean isMask) +{ + PF_Err err = PF_Err_NONE; + DeltaSubParam info; + info.width = ae->out->width()-2; + info.height = ae->out->height()-2; + info.lv = (A_long)(PF_MAX_CHAN8 * delta_range >> 16); + info.isAlpha = isMask; + info.widthTrue = ae->in->widthTrue(); + err = ae->iterate32((refconType)&info,DeltaSub32); + return err; +} +//------------------------------------------------------------------------------------------------- +PF_Err FindTargetDeltaBright(CFsAE *ae , A_long delta_range) +{ + PF_Err err = PF_Err_NONE; + switch(ae->pixelFormat()) + { + case PF_PixelFormat_ARGB128: + err = TargetDelta_32(ae,delta_range,FALSE); + break; + case PF_PixelFormat_ARGB64: + err = TargetDelta_16(ae,delta_range,FALSE); + break; + case PF_PixelFormat_ARGB32: + err = TargetDelta_8(ae,delta_range,FALSE); + break; + } + return err; +} +//------------------------------------------------------------------------------------------------- +PF_Err FindTargetDeltaAlpha(CFsAE *ae , A_long delta_range) +{ + PF_Err err = PF_Err_NONE; + switch(ae->pixelFormat()) + { + case PF_PixelFormat_ARGB128: + err = TargetDelta_32(ae,delta_range,TRUE); + break; + case PF_PixelFormat_ARGB64: + err = TargetDelta_16(ae,delta_range,TRUE); + break; + case PF_PixelFormat_ARGB32: + err = TargetDelta_8(ae,delta_range,TRUE); + break; + } + return err; +} diff --git a/TouchDraw/FsTDblockDraw.cpp b/TouchDraw/FsTDblockDraw.cpp new file mode 100644 index 0000000..b7f6701 --- /dev/null +++ b/TouchDraw/FsTDblockDraw.cpp @@ -0,0 +1,119 @@ +#include "TouchDraw.h" + +#define TARGET_CHNNEL blue + +//------------------------------------------------------------------------------- +void blockDraw8(CFsGraph *g,A_long bSize,A_long bCount) +{ + PF_Pixel *data; + data = (PF_Pixel *)g->data(); + A_long height = g->height(); + A_long width = g->width(); + A_long wt = g->widthTrue(); + A_long cnt = bCount; + A_long bs0 = bSize /2; + if (bs0<2) bs0 = 2; + A_long i,j,k; + + A_long w,h,x,y; + for (k=0; kdata(); + A_long height = g->height(); + A_long width = g->width(); + A_long wt = g->widthTrue(); + A_long cnt = bCount; + A_long bs0 = bSize /2; + if (bs0<2) bs0 = 2; + A_long i,j,k; + + A_long w,h,x,y; + for (k=0; kdata(); + A_long height = g->height(); + A_long width = g->width(); + A_long wt = g->widthTrue(); + A_long cnt = bCount; + A_long bs0 = bSize /2; + if (bs0<2) bs0 = 2; + A_long i,j,k; + + A_long w,h,x,y; + for (k=0; kpixelFormat()) + { + case PF_PixelFormat_ARGB128: + blockDraw32(ae->out,bSize,bCount); + break; + case PF_PixelFormat_ARGB64: + blockDraw16(ae->out,bSize,bCount); + break; + case PF_PixelFormat_ARGB32: + blockDraw8(ae->out,bSize,bCount); + break; + } + return err; +} diff --git a/TouchDraw/FsTDcopyAlpha.cpp b/TouchDraw/FsTDcopyAlpha.cpp new file mode 100644 index 0000000..e3d45a6 --- /dev/null +++ b/TouchDraw/FsTDcopyAlpha.cpp @@ -0,0 +1,112 @@ +#include "TouchDraw.h" + +typedef struct { + PF_Pixel color; + PF_Boolean org; +}copyAlpha8Param; +typedef struct { + PF_Pixel16 color; + PF_Boolean org; +}copyAlpha16Param; +typedef struct { + PF_PixelFloat color; + PF_Boolean org; +}copyAlpha32Param; + + +#define TARGET_CHANNEL green +//------------------------------------------------------------------------------------------------- +static PF_Err +copyAlphaSub8 ( + refconType refcon, + A_long xL, + A_long yL, + PF_Pixel8 *inP, + PF_Pixel8 *outP) +{ + PF_Err err = PF_Err_NONE; + copyAlpha8Param * infoP = reinterpret_cast(refcon); + + PF_Pixel p; + p = infoP->color; + p.alpha = outP->TARGET_CHANNEL; + if ( infoP->org){ + *outP = PixelBlend8(*inP,p); + }else{ + *outP = p; + } + + return err; +} +//------------------------------------------------------------------------------------------------- +static PF_Err +copyAlphaSub16 ( + refconType refcon, + A_long xL, + A_long yL, + PF_Pixel16 *inP, + PF_Pixel16 *outP) +{ + PF_Err err = PF_Err_NONE; + copyAlpha16Param * infoP = reinterpret_cast(refcon); + + PF_Pixel16 p; + p = infoP->color; + p.alpha = outP->TARGET_CHANNEL; + if ( infoP->org){ + *outP = PixelBlend16(*inP,p); + }else{ + *outP = p; + } + return err; +} +//------------------------------------------------------------------------------------------------- +static PF_Err +copyAlphaSub32 ( + refconType refcon, + A_long xL, + A_long yL, + PF_PixelFloat *inP, + PF_PixelFloat *outP) +{ + PF_Err err = PF_Err_NONE; + copyAlpha32Param * infoP = reinterpret_cast(refcon); + + PF_PixelFloat p; + p = infoP->color; + p.alpha = outP->TARGET_CHANNEL; + if ( infoP->org){ + *outP = PixelBlend32(*inP,p); + }else{ + *outP = p; + } + return err; +} +//------------------------------------------------------------------------------------------------- +PF_Err copyAlpha(CFsAE *ae , PF_Pixel color, PF_Boolean org) +{ + PF_Err err = PF_Err_NONE; + + switch(ae->pixelFormat()) + { + case PF_PixelFormat_ARGB128: + copyAlpha32Param cp32; + cp32.color = CONV8TO32(color); + cp32.org = org; + ERR(ae->iterate32((refconType)&cp32,copyAlphaSub32)); + break; + case PF_PixelFormat_ARGB64: + copyAlpha16Param cp16; + cp16.color = CONV8TO16(color); + cp16.org = org; + ERR(ae->iterate16((refconType)&cp16,copyAlphaSub16)); + break; + case PF_PixelFormat_ARGB32: + copyAlpha8Param cp8; + cp8.color = color; + cp8.org = org; + ERR(ae->iterate8((refconType)&cp8,copyAlphaSub8)); + break; + } + return err; +} diff --git a/TouchDraw/FsTDgreenBlur.cpp b/TouchDraw/FsTDgreenBlur.cpp new file mode 100644 index 0000000..1f1c879 --- /dev/null +++ b/TouchDraw/FsTDgreenBlur.cpp @@ -0,0 +1,548 @@ +#include "TouchDraw.h" + + +//------------------------------------------------------------------------------- +void greenBlur8(CFsGraph *g) +{ + PF_Pixel *data; + data = g->data(); + long wt = g->widthTrue(); + long ow = g->offsetWidth(); + long w = g->width(); + long h = g->height(); + + long x,y; + long v; + w = g->width()-1; + h = g->height()-1; + + //まず、真ん中 + A_long adr=wt+1; + A_long adr2; + for(y=1;y> 5; + data[adr].alpha = RoundByteLong(v); + + adr++; + } + adr+=(ow+2); + } + //上下 + adr = 1; + long adrH = h*wt+1; + for(x=1;xdata(); + long wt = g->widthTrue(); + long ow = g->offsetWidth(); + long w = g->width(); + long h = g->height(); + + long x,y; + long v; + w = g->width()-1; + h = g->height()-1; + + //まず、真ん中 + long adr=wt+1; + long adr2; + + for(y=1;y> 5; + data[adr].alpha = RoundShort(v); + + adr++; + } + adr+=(ow+2); + } + + //上下 + adr = 1; + long adrH = h*wt+1; + for(x=1;xdata(); + long wt = g->widthTrue(); + long ow = g->offsetWidth(); + long w = g->width(); + long h = g->height(); + + long x,y; + PF_FpLong v; + w = g->width()-1; + h = g->height()-1; + + //まず、真ん中 + long adr=wt+1; + long adr2; + + for(y=1;ypixelFormat()) + { + case PF_PixelFormat_ARGB128: + greenBlur32(ae->out); + break; + case PF_PixelFormat_ARGB64: + greenBlur16(ae->out); + break; + case PF_PixelFormat_ARGB32: + greenBlur8(ae->out); + break; + default: + err = PF_Err_BAD_CALLBACK_PARAM; + break; + } + return err; +} diff --git a/TouchDraw/FsTDpset.h b/TouchDraw/FsTDpset.h new file mode 100644 index 0000000..010308d --- /dev/null +++ b/TouchDraw/FsTDpset.h @@ -0,0 +1,293 @@ + +#pragma once + +#ifndef FSTDPSET_H +#define FSTDPSET_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/FsUtils.h" + + + +typedef struct { + PF_PixelPtr data; + A_long width; + A_long height; + A_long widthTrue; + A_long widthOffset; + PF_FixedPoint pos; + PF_Fixed opacity; +} PsetPrm; + + + +//------------------------------------------------------- +inline A_u_char mixCh8(A_long c0, A_long c1) +{ + return RoundByteLong(c0 + c1 - (c0 * c1 >>8)); +} +//------------------------------------------------------- +inline A_u_short mixCh16(A_long c0, A_long c1) +{ + A_long v = c0 + c1 - (c0 * c1 >>16); + if (v<0) { v=0; }else if(v>PF_MAX_CHAN16){v = PF_MAX_CHAN16;} + return (A_u_short)v; +} +//------------------------------------------------------- +inline PF_FpShort mixCh32(PF_FpShort c0, PF_FpShort c1) +{ + PF_FpShort v = c0 + c1 - (c0 * c1); + if (v<0) { v=0; } + return v; +} + +//------------------------------------------------------- +/* + アルファーへ書き込み +*/ +inline PF_Boolean PsetAlpha8(PsetPrm *prm) +{ + PF_Boolean ret = FALSE; + PF_Fixed opacity = prm->opacity; + if (opacity<=0) opacity = 0; + if (opacity>(1L<<16)) opacity = 1L<<16; + A_long v = PF_MAX_CHAN8 * opacity >> 16; + if (v<=0) return ret; + + PF_Pixel *data; + data = (PF_Pixel *)prm->data; + PF_FixedPoint pos = prm->pos; + A_long w = prm->width; + A_long wt = prm->widthTrue; + A_long h = prm->height; + A_long x1,y1,x2,y2; + + + x1 = prm->pos.x >> 16; + y1 = prm->pos.y >> 16; + x2 = x1+1; + y2 = y1+1; + + if ( (x1>=w)||(y1>=h)||(x2<0)||(y2<0) ) return ret; + + PF_FpShort xx2,yy2,xx1,yy1; + xx2 = (PF_FpShort)(prm->pos.x & 0xFFFF)/65536; + yy2 = (PF_FpShort)(prm->pos.y & 0xFFFF)/65536; + xx1 = (PF_FpShort)1 - xx2; + yy1 = (PF_FpShort)1 - yy2; + + A_long vv; + A_long target = x1 + (y1 * wt); + //まず、ぴったりの時 + if ( (xx2 == 0)&&(yy2 == 0) ) { + if ( (x1>=0)&&(y1>=0) ) { + data[target].green = mixCh8(data[target].green,v); + ret = TRUE; + } + }else{ + //まず左上 + if ( ((x1>=0)&&(y1>=0)) == TRUE){ + vv = (A_long)( (PF_FpShort)v * xx1 * yy1); + data[target].green = mixCh8(data[target].green,vv); + ret = TRUE; + } + //右上 + target++; + if ( ((x2=0)) == TRUE){ + vv = (A_long)( (PF_FpShort)v * xx2 * yy1); + data[target].green = mixCh8(data[target].green,vv); + ret = TRUE; + } + //右下 + target+= wt; + if ( ((x2=0)&&(y2opacity; + if (opacity<=0) opacity = 0; + if (opacity>(1L<<16)) opacity = 1L<<16; + A_long v = PF_MAX_CHAN16 * opacity >> 16; + if (v<=0) return ret; + + PF_Pixel16 *data; + data = (PF_Pixel16 *)prm->data; + PF_FixedPoint pos = prm->pos; + A_long w = prm->width; + A_long wt = prm->widthTrue; + A_long h = prm->height; + A_long x1,y1,x2,y2; + + + x1 = prm->pos.x >> 16; + y1 = prm->pos.y >> 16; + x2 = x1+1; + y2 = y1+1; + + if ( (x1>=w)||(y1>=h)||(x2<0)||(y2<0) ) return ret; + + PF_FpShort xx2,yy2,xx1,yy1; + xx2 = (PF_FpShort)(prm->pos.x & 0xFFFF)/65536; + yy2 = (PF_FpShort)(prm->pos.y & 0xFFFF)/65536; + xx1 = (PF_FpShort)1 - xx2; + yy1 = (PF_FpShort)1 - yy2; + + A_long vv; + A_long target = x1 + (y1 * wt); + //まず、ぴったりの時 + if ( (xx2 == 0)&&(yy2 == 0) ) { + if ( (x1>=0)&&(y1>=0) ) { + data[target].green = mixCh16(data[target].green,v); + ret = TRUE; + } + }else{ + //まず左上 + if ( ((x1>=0)&&(y1>=0)) == TRUE){ + vv = (A_long)( (PF_FpShort)v * xx1 * yy1); + data[target].green = mixCh16(data[target].green,vv); + ret = TRUE; + } + //右上 + target++; + if ( ((x2=0)) == TRUE){ + vv = (A_long)( (PF_FpShort)v * xx2 * yy1); + data[target].green = mixCh16(data[target].green,vv); + ret = TRUE; + } + //右下 + target+= wt; + if ( ((x2=0)&&(y2opacity/65536; + if (v<=0) v = 0; + if (v<=0) return ret; + + PF_PixelFloat *data; + data = (PF_PixelFloat *)prm->data; + PF_FixedPoint pos = prm->pos; + A_long w = prm->width; + A_long wt = prm->widthTrue; + A_long h = prm->height; + A_long x1,y1,x2,y2; + + PF_FpShort xx2,yy2,xx1,yy1; + + x1 = prm->pos.x >> 16; + y1 = prm->pos.y >> 16; + + + + x2 = x1+1; + y2 = y1+1; + xx2 = (PF_FpShort)(prm->pos.x & 0xFFFF)/65536; + yy2 = (PF_FpShort)(prm->pos.y & 0xFFFF)/65536; + xx1 = 1 - xx2; + yy1 = 1 - yy2; + + if ( (x1>=w)||(y1>=h)||(x2<0)||(y2<0) ) return ret; + + + PF_FpShort vv; + long target = x1 + (y1 * wt); + //まず、ぴったりの時 + if ( (xx2 == 0)&&(yy2 == 0) ) { + if ( (x1>=0)&&(y1>=0) ) { + data[target].green = mixCh32(data[target].green,v); + ret = TRUE; + } + }else{ + //まず左上 + if ( ((x1>=0)&&(y1>=0)) == TRUE){ + vv = v * xx1 * yy1; + data[target].green = mixCh32(data[target].green,vv); + ret = TRUE; + } + //右上 + target++; + if ( ((x2=0)) == TRUE){ + vv = v * xx2 * yy1; + data[target].green = mixCh32(data[target].green,vv); + ret = TRUE; + } + //右下 + target+= wt; + if ( ((x2=0)&&(y2 +#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, + 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 +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/TouchDraw/Fs_Target.h b/TouchDraw/Fs_Target.h new file mode 100644 index 0000000..c630412 --- /dev/null +++ b/TouchDraw/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 TouchDraw" + +//----------------------------------------------------------------------------------- +//プラグインの説明に使われる文字 +#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/TouchDraw/TouchDraw.cpp b/TouchDraw/TouchDraw.cpp new file mode 100644 index 0000000..b6f5bb0 --- /dev/null +++ b/TouchDraw/TouchDraw.cpp @@ -0,0 +1,434 @@ +//----------------------------------------------------------------------------------- +/* + F's Plugins for VS2010/VS2012 +*/ +//----------------------------------------------------------------------------------- + + +#include "TouchDraw.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_SEED, //パラメータの名前 + 0, //数値入力する場合の最小値 + 32000, //数値入力する場合の最大値 + 0, //スライダーの最小値 + 144, //スライダーの最大値 + 0, //デフォルトの値 + ID_SEED + ); + + //---------------------------------------------------------------- + //固定小数のスライダーバー + AEFX_CLR_STRUCT(def); + PF_ADD_FIXED( STR_TARGET_VALUE, //パラメータの名前 + 0, //数値入力する場合の最小値 + 100, //数値入力する場合の最大値 + 0, //スライダーの最小値 + 25, //スライダーの最大値 + 5, //デフォルトの値 + 1, //数値表示に関するフラグ + 0, + 0, + ID_TARGET_VALUE + ); + //---------------------------------------------------------------- + AEFX_CLR_STRUCT(def); + def.flags = PF_ParamFlag_START_COLLAPSED; + PF_ADD_TOPIC(STR_TARGET_TOPIC, ID_TARGRT_TOPIC); + //---------------------------------------------------------------- + //ポップアップメニュー + AEFX_CLR_STRUCT(def); + PF_ADD_POPUP( STR_TARGET_MODE1, + 3, //メニューの数 + 2, //デフォルト + STR_TARGET_MODE2, + ID_TARGET_MODE + ); + //---------------------------------------------------------------- + //色の指定 + AEFX_CLR_STRUCT(def); + PF_ADD_COLOR( STR_TARGET_COLOR, + 0x00, + 0x00, + 0x00, + ID_TARGET_COLOR + ); + //---------------------------------------------------------------- + //固定小数のスライダーバー + AEFX_CLR_STRUCT(def); + PF_ADD_FIXED( STR_COLOR_RANGE, //パラメータの名前 + 0, //数値入力する場合の最小値 + 100, //数値入力する場合の最大値 + 0, //スライダーの最小値 + 25, //スライダーの最大値 + 0, //デフォルトの値 + 1, //数値表示に関するフラグ + 0, + 0, + ID_COLOR_RANGE + ); + //---------------------------------------------------------------- + //固定小数のスライダーバー + AEFX_CLR_STRUCT(def); + PF_ADD_FIXED( STR_DELTA_RANGE, //パラメータの名前 + 0, //数値入力する場合の最小値 + 100, //数値入力する場合の最大値 + 0, //スライダーの最小値 + 90, //スライダーの最大値 + 50, //デフォルトの値 + 1, //数値表示に関するフラグ + 0, + 0, + ID_DELTA_RANGE + ); + //---------------------------------------------------------------- + AEFX_CLR_STRUCT(def); + PF_END_TOPIC(ID_TARGRT_TOPIC_END); + //---------------------------------------------------------------- + //位置の指定 + AEFX_CLR_STRUCT(def); + PF_ADD_POINT(STR_CENTER, /*"New Center"*/ + 50, // X + 50, // Y + 0, // Flag + ID_CENTER + ); + //---------------------------------------------------------------- + //固定小数のスライダーバー + AEFX_CLR_STRUCT(def); + PF_ADD_FIXED( STR_LENGTH_I_MAX, //パラメータの名前 + 0, //数値入力する場合の最小値 + 100, //数値入力する場合の最大値 + 0, //スライダーの最小値 + 100, //スライダーの最大値 + 50, //デフォルトの値 + 1, //数値表示に関するフラグ + 0, + 0, + ID_LENGTH_I_MAX + ); + //---------------------------------------------------------------- + //固定小数のスライダーバー + AEFX_CLR_STRUCT(def); + PF_ADD_FIXED( STR_LENGTH_I_RND, //パラメータの名前 + 0, //数値入力する場合の最小値 + 100, //数値入力する場合の最大値 + 0, //スライダーの最小値 + 100, //スライダーの最大値 + 50, //デフォルトの値 + 1, //数値表示に関するフラグ + 0, + 0, + ID_LENGTH_I_RND + ); + //---------------------------------------------------------------- + //固定小数のスライダーバー + AEFX_CLR_STRUCT(def); + PF_ADD_FIXED( STR_LENGTH_O_MAX, //パラメータの名前 + 0, //数値入力する場合の最小値 + 300, //数値入力する場合の最大値 + 0, //スライダーの最小値 + 100, //スライダーの最大値 + 10, //デフォルトの値 + 1, //数値表示に関するフラグ + 0, + 0, + ID_LENGTH_O_MAX + ); + //---------------------------------------------------------------- + //固定小数のスライダーバー + AEFX_CLR_STRUCT(def); + PF_ADD_FIXED( STR_LENGTH_O_RND, //パラメータの名前 + 0, //数値入力する場合の最小値 + 100, //数値入力する場合の最大値 + 0, //スライダーの最小値 + 100, //スライダーの最大値 + 50, //デフォルトの値 + 1, //数値表示に関するフラグ + 0, + 0, + ID_LENGTH_O_RND + ); + //---------------------------------------------------------------- + //色の指定 + AEFX_CLR_STRUCT(def); + PF_ADD_COLOR( STR_COLOR, + 0x00, + 0x00, + 0x00, + ID_COLOR + ); + //---------------------------------------------------------------- + //固定小数のスライダーバー + AEFX_CLR_STRUCT(def); + PF_ADD_FIXED( STR_OPACITY, //パラメータの名前 + 0, //数値入力する場合の最小値 + 100, //数値入力する場合の最大値 + 0, //スライダーの最小値 + 100, //スライダーの最大値 + 100, //デフォルトの値 + 1, //数値表示に関するフラグ + 0, + 0, + ID_OPACITY + ); + //---------------------------------------------------------------- + //固定小数のスライダーバー + AEFX_CLR_STRUCT(def); + PF_ADD_FIXED( STR_OPACITY_RND, //パラメータの名前 + 0, //数値入力する場合の最小値 + 100, //数値入力する場合の最大値 + 0, //スライダーの最小値 + 100, //スライダーの最大値 + 50, //デフォルトの値 + 1, //数値表示に関するフラグ + 0, + 0, + ID_OPACITY_RND + ); + //---------------------------------------------------------------- + //整数のスライダーバー + AEFX_CLR_STRUCT(def); + PF_ADD_SLIDER( STR_POINT_COUNT, //パラメータの名前 + 0, //数値入力する場合の最小値 + 100, //数値入力する場合の最大値 + 0, //スライダーの最小値 + 10, //スライダーの最大値 + 2, //デフォルトの値 + ID_POINT_COUNT + ); + //---------------------------------------------------------------- + //固定小数のスライダーバー + AEFX_CLR_STRUCT(def); + PF_ADD_FIXED( STR_POINT_LENGTH, //パラメータの名前 + 0, //数値入力する場合の最小値 + 300, //数値入力する場合の最大値 + 0, //スライダーの最小値 + 10, //スライダーの最大値 + 1, //デフォルトの値 + 1, //数値表示に関するフラグ + 0, + 0, + ID_POINT_LENGTH + ); + + //---------------------------------------------------------------- + //固定小数のスライダーバー + AEFX_CLR_STRUCT(def); + PF_ADD_FIXED( STR_BLOCK_VALUE, //パラメータの名前 + 0, //数値入力する場合の最小値 + 300, //数値入力する場合の最大値 + 0, //スライダーの最小値 + 100, //スライダーの最大値 + 50, //デフォルトの値 + 1, //数値表示に関するフラグ + 0, + 0, + ID_BLOCK_VALUE + ); + //---------------------------------------------------------------- + //整数のスライダーバー + AEFX_CLR_STRUCT(def); + PF_ADD_SLIDER( STR_BLOCK_SIZE, //パラメータの名前 + 8, //数値入力する場合の最小値 + 128, //数値入力する場合の最大値 + 8, //スライダーの最小値 + 64, //スライダーの最大値 + 2, //デフォルトの値 + ID_BLOCK_SIZE + ); + + //---------------------------------------------------------------- + //チェックボックス + AEFX_CLR_STRUCT(def); + PF_ADD_CHECKBOX(STR_ORG_CB1, + STR_ORG_CB2, + TRUE, + 0, + ID_ORG + ); + //---------------------------------------------------------------- + out_data->num_params = ID_NUM_PARAMS; + + return err; +} +//------------------------------------------------------------------------------------------------- +static PF_Err GetParams(CFsAE *ae, ParamInfo *infoP) +{ + PF_Err err = PF_Err_NONE; + + ERR(ae->GetADD(ID_SEED,&infoP->seed)); + ERR(ae->GetFIXED2FpShort_P1(ID_TARGET_VALUE,&infoP->target_value)); + ERR(ae->GetPOPUP(ID_TARGET_MODE,&infoP->target_mode)); + ERR(ae->GetCOLOR(ID_TARGET_COLOR,&infoP->target_color)); + ERR(ae->GetFIXED_PER2ONE(ID_COLOR_RANGE,&infoP->color_range)); + ERR(ae->GetFIXED_PER2ONE(ID_DELTA_RANGE,&infoP->delta_range)); + ERR(ae->GetFIXEDPOINT(ID_CENTER,&infoP->center)); + ERR(ae->GetFIXED_PER2ONE(ID_LENGTH_I_MAX,&infoP->length_i_max)); + ERR(ae->GetFIXED_PER2ONE(ID_LENGTH_I_RND,&infoP->length_i_rnd)); + ERR(ae->GetFIXED_PER2ONE(ID_LENGTH_O_MAX,&infoP->length_o_max)); + ERR(ae->GetFIXED_PER2ONE(ID_LENGTH_O_RND,&infoP->length_o_rnd)); + + ERR(ae->GetCOLOR(ID_COLOR,&infoP->color)); + ERR(ae->GetFIXED_PER2ONE(ID_OPACITY,&infoP->opacity)); + ERR(ae->GetFIXED_PER2ONE(ID_OPACITY_RND,&infoP->opacity_rnd)); + + ERR(ae->GetADD(ID_POINT_COUNT,&infoP->point_count)); + ERR(ae->GetFIXED(ID_POINT_LENGTH,&infoP->point_length)); + if (!err) { + infoP->point_length = ae->downScaleNoClip(infoP->point_length); + infoP->point_length += (1L<<16); + } + infoP->target_count = 0; + ERR(ae->GetFIXED_PER2ONE(ID_BLOCK_VALUE,&infoP->block_value)); + ERR(ae->GetADD(ID_BLOCK_SIZE,&infoP->block_size)); + if (!err) { + infoP->block_size = ae->downScaleNoClip(infoP->block_size); + if ( infoP->block_size<2) infoP->block_size = 2; + } + A_long pW = ae->in_data->width; + A_long pH = ae->in_data->height; + if ((pW % infoP->block_size)!=0) { pW = pW/infoP->block_size +1;}else{pW = pW/infoP->block_size;} + if ((pH % infoP->block_size)!=0) { pH = pH/infoP->block_size +1;}else{pH = pH/infoP->block_size;} + infoP->block_count = pW * pH * infoP->block_value >> 16; + + ERR(ae->GetCHECKBOX(ID_ORG,&infoP->org)); + + return err; +} +//------------------------------------------------------------------------------------------------- +static PF_Err + Exec (CFsAE *ae , ParamInfo *infoP) +{ + PF_Err err = PF_Err_NONE; + + ae->out->clear(); + switch (infoP->target_mode) + { + case 1: + FindTarget(ae,infoP->target_color,infoP->color_range); + break; + case 2: + FindTargetDeltaBright(ae,infoP->delta_range); + break; + case 3: + FindTargetDeltaAlpha(ae,infoP->delta_range); + break; + } + + F_SRAND(infoP->seed); + blockDraw(ae,infoP->block_size,infoP->block_count); + + F_SRAND(infoP->seed); + switch(ae->pixelFormat()){ + case PF_PixelFormat_ARGB128: + drawTouch32(ae->out,infoP); + break; + case PF_PixelFormat_ARGB64: + drawTouch16(ae->out,infoP); + break; + case PF_PixelFormat_ARGB32: + drawTouch8(ae->out,infoP); + break; + } + greenBlur(ae); + + copyAlpha(ae,infoP->color,infoP->org); + + 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/TouchDraw/TouchDraw.h b/TouchDraw/TouchDraw.h new file mode 100644 index 0000000..72292d0 --- /dev/null +++ b/TouchDraw/TouchDraw.h @@ -0,0 +1,196 @@ +//----------------------------------------------------------------------------------- +/* + PluginSkeleton for VS2010 +*/ +//----------------------------------------------------------------------------------- + +#pragma once + +#ifndef TouchDraw_H +#define TouchDraw_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 "FsTDpset.h" + +#include + + +#define STR_SEED "RandomSeed" +#define STR_TARGET_VALUE "Value" +#define STR_TARGET_TOPIC "Target" +#define STR_TARGET_MODE1 "Mode" +#define STR_TARGET_MODE2 "Color|BrightnessDelta|AlphaDelta" +#define STR_TARGET_COLOR "Color" +#define STR_COLOR_RANGE "Color_Range" +#define STR_DELTA_RANGE "Delta_Range" +#define STR_CENTER "Center" +#define STR_LENGTH_I_MAX "Inside_Length" +#define STR_LENGTH_I_RND "Inside_Length_Random" +#define STR_LENGTH_O_MAX "Outside_Length" +#define STR_LENGTH_O_RND "Outside_Length_Random" +#define STR_COLOR "Color" +#define STR_OPACITY "Opacity" +#define STR_OPACITY_RND "Opacity_Random" + +#define STR_POINT_COUNT "Point_Count" +#define STR_POINT_LENGTH "Point_Length" + +#define STR_BLOCK_VALUE "Block_Value" +#define STR_BLOCK_SIZE "Block_Size" + +#define STR_ORG_CB1 "Original_Blend" +#define STR_ORG_CB2 "ON" +//ユーザーインターフェースのID +//ParamsSetup関数とRender関数のparamsパラメータのIDになる +enum { + MY_INPUT = 0, // default input layer + + ID_SEED, //ランダムの基点 + ID_TARGET_VALUE, //タッチが発生する確率 + ID_TARGRT_TOPIC, + ID_TARGET_MODE, // 1:差分 2:color + ID_TARGET_COLOR, //ターゲットの色 + ID_COLOR_RANGE, //色の範囲 + ID_DELTA_RANGE, //差分の範囲 + ID_TARGRT_TOPIC_END, + + ID_CENTER, //タッチ線の方向 + ID_LENGTH_I_MAX, //タッチ線の長さin方向 + ID_LENGTH_I_RND, //タッチ線の長さin方向のランダムさ + ID_LENGTH_O_MAX, //タッチ線の長さout方向 + ID_LENGTH_O_RND, //タッチ線の長さout方向のランダムさ + + ID_COLOR, //タッチ線の色 + ID_OPACITY, //タッチ線の不透明度 + ID_OPACITY_RND, //タッチ線の不透明度のランダム + + ID_POINT_COUNT, //タッチが発生する数 + ID_POINT_LENGTH, //タッチが発生する範囲 + + ID_BLOCK_VALUE, + ID_BLOCK_SIZE, + + ID_ORG, + ID_NUM_PARAMS + }; + + + + +//プラグイン独自のパラメータを集めた構造体 +typedef struct{ + A_long seed; + PF_FpShort target_value; + A_long target_mode; + PF_Pixel target_color; + PF_Fixed color_range; + PF_Fixed delta_range; + PF_FixedPoint center; + PF_Fixed length_i_max; + PF_Fixed length_i_rnd; + PF_Fixed length_o_max; + PF_Fixed length_o_rnd; + + PF_Pixel color; + PF_Fixed opacity; + PF_Fixed opacity_rnd; + A_long point_count; + PF_Fixed point_length; + A_long target_count; + PF_Fixed block_value; + A_long block_count; + A_long block_size; + PF_Boolean org; + +} ParamInfo; + + +typedef struct { + PsetPrm pp; + PF_FixedPoint start; + PF_FixedPoint center; + PF_Fixed length_i; + PF_Fixed length_o; + PF_Fixed opacity; + + PF_Fixed value; +} TouchDrawInfo; + + +//------------------------------------------------------- +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); +} + +//------------------------------------------------------- + + +//blue +PF_Err FindTarget(CFsAE *ae , PF_Pixel target_color, A_long color_range); +PF_Err FindTargetDeltaBright(CFsAE *ae , A_long delta_range); +PF_Err FindTargetDeltaAlpha(CFsAE *ae , A_long delta_range); + +//blue +PF_Err blockDraw(CFsAE *ae , A_long bSize, A_long bCount); + + +PF_Err greenBlur(CFsAE *ae); + +//green -> RGB +PF_Err copyAlpha(CFsAE *ae , PF_Pixel color, PF_Boolean org); + + +//blue -> green +void drawTouchSub8(TouchDrawInfo *p); +void drawTouchSub16(TouchDrawInfo *p); +void drawTouchSub32(TouchDrawInfo *p); + +void drawTouch8(CFsGraph *g,ParamInfo *infoP); +void drawTouch16(CFsGraph *g,ParamInfo *infoP); +void drawTouch32(CFsGraph *g,ParamInfo *infoP); + + + + +#endif // TouchDraw_H diff --git a/TouchDraw/TouchDrawPiPL.r b/TouchDraw/TouchDrawPiPL.r new file mode 100644 index 0000000..a01fb79 --- /dev/null +++ b/TouchDraw/TouchDrawPiPL.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 + }, + +#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 { + 8 + } + } +}; + diff --git a/TouchDraw/ToutchDraw16.cpp b/TouchDraw/ToutchDraw16.cpp new file mode 100644 index 0000000..7d1c909 --- /dev/null +++ b/TouchDraw/ToutchDraw16.cpp @@ -0,0 +1,157 @@ +#include "TouchDraw.h" + +//------------------------------------------------------- +inline long lineLen(PF_Fixed a,PF_Fixed b) +{ + double tx,ty,tl; + tx = FIX_2_FLOAT(a); + ty = FIX_2_FLOAT(b); + tl = sqrt(tx*tx + ty*ty); + return (long)tl; +} +//------------------------------------------------------- +void drawTouchSub16(TouchDrawInfo *p) +{ + if (p->opacity<=0) return; + + PF_Fixed rndi = p->length_i; + if(rndi<=0) { rndi=0;} + else if (rndi>(1L<<16)) {rndi = (1L<<16);} + + PF_Fixed rndo = p->length_o; + if(rndo<=0) { rndo=0;} + if ( (rndi<=0)&&(rndo<=0) ) return; + + PF_Fixed x,y,dx,dy,dl,ix,iy; + + long len; + long xF =1; + long yF =1; + x = (p->center.x - p->start.x); + if (x<0) { + xF = -1; + x = ABS(x); + } + y = (p->center.y - p->start.y); + if (y<0) { + yF = -1; + y = ABS(y); + } + //if (rndi>0) { + ix = (x>>16) * rndi; + iy = (y>>16) * rndi; + + p->pp.pos = p->start; + p->pp.opacity = p->opacity; + len = lineLen(ix,iy); + if (len>0) { + dx = ix / len; dx *=xF; + dy = iy / len; dy *=yF; + dl = p->pp.opacity /len; + + long i; + for ( i=0; ipp))==FALSE) break; + //PsetAlphaB(&(p->pp)); + p->pp.pos.x += dx; + p->pp.pos.y += dy; + p->pp.opacity -= dl; + } + } + //} + //if (rndo>0) { + ix = (x>>16) * rndo; + iy = (y>>16) * rndo; + + p->pp.pos = p->start; + p->pp.opacity = p->opacity; + len = lineLen(ix,iy); + if (len>0) { + dx = ix / len; dx *= xF; + dy = iy / len; dy *= yF; + dl = p->pp.opacity /len; + + long i; + for ( i=0; ipp))==FALSE) break; + //PsetAlphaB(&(p->pp)); + p->pp.pos.x -= dx; + p->pp.pos.y -= dy; + p->pp.opacity -= dl; + } + } + //} +} +//------------------------------------------------------- +void drawTouch16(CFsGraph *g,ParamInfo *prm) +{ + + A_long w = g->width(); + A_long h = g->height(); + A_long ow = g->offsetWidth(); + + TouchDrawInfo td; + td.pp.data = g->data(); + td.pp.height = g->height(); + td.pp.width = g->width(); + td.pp.widthTrue = g->widthTrue(); + td.center = prm->center; + + PF_Pixel16 *oD; + oD = (PF_Pixel16 *)g->data(); + + //ターゲットランダム + F_SRAND(prm->seed); + A_long t0; + t0 = (A_long)(F_RAND_MAX * prm->target_value); + //長さランダム + PF_Fixed ir0,ir1; + ir1 = (prm->length_i_max >>8) * (prm->length_i_rnd >>8); + ir0 = prm->length_i_max - ir1; + if (ir0<0) ir0=0; + + PF_Fixed or0,or1; + or1 = (prm->length_o_max >>8) * (prm->length_o_rnd >>8); + or0 = prm->length_o_max - or1; + if (or0<0) or0=0; + + //不透明度ランダム + PF_Fixed p0,p1; + p1 = (prm->opacity >>8) * (prm->opacity_rnd >>8); + p0 = prm->opacity -p1; + if (p0<0) p0=0; + + PF_Fixed xx,yy; + long ln0 = prm->point_length * -1; + long ln1 = prm->point_length * 2; + long i,j; + long k; + long targetOut = 0; + for (j=0;jpoint_count;k++){ + td.start.x = xx + ln0 + (long)(F_RAND() *(ln1 +1.0f)/(F_RAND_MAX+1.0f)); + td.start.y = yy + ln0 + (long)(F_RAND() *(ln1 +1.0f)/(F_RAND_MAX+1.0f)); + + td.length_i = ir0 + (long)(F_RAND() *(ir1 +1.0f) /(1.0f +F_RAND_MAX)); + td.length_o = or0 + (long)(F_RAND() *(or1 +1.0f) /(1.0f +F_RAND_MAX)); + td.opacity = p0 + (long)(F_RAND() *(p1 +1.0f) /(1.0f +F_RAND_MAX));; + + drawTouchSub16(&td); + } + + //oD[targetOut].green = PF_MAX_CHAN8; + } + }else{ + F_RAND(); + } + targetOut++; + } + targetOut += ow; + } + +} \ No newline at end of file diff --git a/TouchDraw/ToutchDraw32.cpp b/TouchDraw/ToutchDraw32.cpp new file mode 100644 index 0000000..19bc657 --- /dev/null +++ b/TouchDraw/ToutchDraw32.cpp @@ -0,0 +1,157 @@ +#include "TouchDraw.h" + +//------------------------------------------------------- +inline long lineLen(PF_Fixed a,PF_Fixed b) +{ + double tx,ty,tl; + tx = FIX_2_FLOAT(a); + ty = FIX_2_FLOAT(b); + tl = sqrt(tx*tx + ty*ty); + return (long)tl; +} +//------------------------------------------------------- +void drawTouchSub32(TouchDrawInfo *p) +{ + if (p->opacity<=0) return; + + PF_Fixed rndi = p->length_i; + if(rndi<=0) { rndi=0;} + else if (rndi>(1L<<16)) {rndi = (1L<<16);} + + PF_Fixed rndo = p->length_o; + if(rndo<=0) { rndo=0;} + if ( (rndi<=0)&&(rndo<=0) ) return; + + PF_Fixed x,y,dx,dy,dl,ix,iy; + + long len; + long xF =1; + long yF =1; + x = (p->center.x - p->start.x); + if (x<0) { + xF = -1; + x = ABS(x); + } + y = (p->center.y - p->start.y); + if (y<0) { + yF = -1; + y = ABS(y); + } + //if (rndi>0) { + ix = (x>>16) * rndi; + iy = (y>>16) * rndi; + + p->pp.pos = p->start; + p->pp.opacity = p->opacity; + len = lineLen(ix,iy); + if (len>0) { + dx = ix / len; dx *=xF; + dy = iy / len; dy *=yF; + dl = p->pp.opacity /len; + + long i; + for ( i=0; ipp))==FALSE) break; + //PsetAlphaB(&(p->pp)); + p->pp.pos.x += dx; + p->pp.pos.y += dy; + p->pp.opacity -= dl; + } + } + //} + //if (rndo>0) { + ix = (x>>16) * rndo; + iy = (y>>16) * rndo; + + p->pp.pos = p->start; + p->pp.opacity = p->opacity; + len = lineLen(ix,iy); + if (len>0) { + dx = ix / len; dx *= xF; + dy = iy / len; dy *= yF; + dl = p->pp.opacity /len; + + long i; + for ( i=0; ipp))==FALSE) break; + //PsetAlphaB(&(p->pp)); + p->pp.pos.x -= dx; + p->pp.pos.y -= dy; + p->pp.opacity -= dl; + } + } + //} +} +//------------------------------------------------------- +void drawTouch32(CFsGraph *g,ParamInfo *prm) +{ + + A_long w = g->width(); + A_long h = g->height(); + A_long ow = g->offsetWidth(); + + TouchDrawInfo td; + td.pp.data = g->data(); + td.pp.height = g->height(); + td.pp.width = g->width(); + td.pp.widthTrue = g->widthTrue(); + td.center = prm->center; + + PF_PixelFloat *oD; + oD = (PF_PixelFloat *)g->data(); + + //ターゲットランダム + F_SRAND(prm->seed); + A_long t0; + t0 = (A_long)(F_RAND_MAX * prm->target_value); + //長さランダム + PF_Fixed ir0,ir1; + ir1 = (prm->length_i_max >>8) * (prm->length_i_rnd >>8); + ir0 = prm->length_i_max - ir1; + if (ir0<0) ir0=0; + + PF_Fixed or0,or1; + or1 = (prm->length_o_max >>8) * (prm->length_o_rnd >>8); + or0 = prm->length_o_max - or1; + if (or0<0) or0=0; + + //不透明度ランダム + PF_Fixed p0,p1; + p1 = (prm->opacity >>8) * (prm->opacity_rnd >>8); + p0 = prm->opacity -p1; + if (p0<0) p0=0; + + PF_Fixed xx,yy; + long ln0 = prm->point_length * -1; + long ln1 = prm->point_length * 2; + long i,j; + long k; + long targetOut = 0; + for (j=0;jpoint_count;k++){ + td.start.x = xx + ln0 + (long)(F_RAND() *(ln1 +1.0f)/(F_RAND_MAX+1.0f)); + td.start.y = yy + ln0 + (long)(F_RAND() *(ln1 +1.0f)/(F_RAND_MAX+1.0f)); + + td.length_i = ir0 + (long)(F_RAND() *(ir1 +1.0f) /(1.0f +F_RAND_MAX)); + td.length_o = or0 + (long)(F_RAND() *(or1 +1.0f) /(1.0f +F_RAND_MAX)); + td.opacity = p0 + (long)(F_RAND() *(p1 +1.0f) /(1.0f +F_RAND_MAX));; + + drawTouchSub32(&td); + } + + //oD[targetOut].green = PF_MAX_CHAN8; + } + }else{ + F_RAND(); + } + targetOut++; + } + targetOut += ow; + } + +} \ No newline at end of file diff --git a/TouchDraw/ToutchDraw8.cpp b/TouchDraw/ToutchDraw8.cpp new file mode 100644 index 0000000..26b4760 --- /dev/null +++ b/TouchDraw/ToutchDraw8.cpp @@ -0,0 +1,158 @@ +#include "TouchDraw.h" + +//------------------------------------------------------- +inline A_long lineLen(PF_Fixed a,PF_Fixed b) +{ + double tx,ty,tl; + tx = FIX2FLT(a); + ty = FIX2FLT(b); + tl = sqrt(tx*tx + ty*ty); + return (A_long)tl; +} +//------------------------------------------------------- +void drawTouchSub8(TouchDrawInfo *p) +{ + if (p->opacity<=0) return; + + PF_Fixed rndi = p->length_i; + if(rndi<=0) { rndi=0;} + else if (rndi>(1L<<16)) {rndi = (1L<<16);} + + PF_Fixed rndo = p->length_o; + if(rndo<=0) { rndo=0;} + if ( (rndi<=0)&&(rndo<=0) ) return; + + PF_Fixed x,y,dx,dy,dl,ix,iy; + + A_long len; + A_long xF =1; + A_long yF =1; + x = (p->center.x - p->start.x); + if (x<0) { + xF = -1; + x = ABS(x); + } + y = (p->center.y - p->start.y); + if (y<0) { + yF = -1; + y = ABS(y); + } + //if (rndi>0) { + ix = (x>>16) * rndi; + iy = (y>>16) * rndi; + + p->pp.pos = p->start; + p->pp.opacity = p->opacity; + len = lineLen(ix,iy); + if (len>0) { + dx = ix / len; dx *=xF; + dy = iy / len; dy *=yF; + dl = p->pp.opacity /len; + + A_long i; + for ( i=0; ipp))==FALSE) break; + //PsetAlphaB(&(p->pp)); + p->pp.pos.x += dx; + p->pp.pos.y += dy; + p->pp.opacity -= dl; + } + } + //} + //if (rndo>0) { + ix = (x>>16) * rndo; + iy = (y>>16) * rndo; + + p->pp.pos = p->start; + p->pp.opacity = p->opacity; + len = lineLen(ix,iy); + if (len>0) { + dx = ix / len; dx *= xF; + dy = iy / len; dy *= yF; + dl = p->pp.opacity /len; + + long i; + for ( i=0; ipp))==FALSE) break; + //PsetAlphaB(&(p->pp)); + p->pp.pos.x -= dx; + p->pp.pos.y -= dy; + p->pp.opacity -= dl; + } + } + //} +} +//------------------------------------------------------- +void drawTouch8(CFsGraph *g,ParamInfo *prm) +{ + A_long w = g->width(); + A_long h = g->height(); + A_long ow = g->offsetWidth(); + + TouchDrawInfo td; + td.pp.data = g->data(); + td.pp.height = g->height(); + td.pp.width = g->width(); + td.pp.widthTrue = g->widthTrue(); + td.center = prm->center; + + PF_Pixel *oD; + oD = (PF_Pixel *)g->data(); + + //ターゲットランダム + F_SRAND(prm->seed); + A_long t0; + t0 = (A_long)(F_RAND_MAX * prm->target_value); + //td.value = F_RAND_MAX * prm->target_value >> 16; + //長さランダム + PF_Fixed ir0,ir1; + ir1 = (prm->length_i_max >>8) * (prm->length_i_rnd >>8); + ir0 = prm->length_i_max - ir1; + if (ir0<0) ir0=0; + + PF_Fixed or0,or1; + or1 = (prm->length_o_max >>8) * (prm->length_o_rnd >>8); + or0 = prm->length_o_max - or1; + if (or0<0) or0=0; + + //不透明度ランダム + PF_Fixed p0,p1; + p1 = (prm->opacity >>8) * (prm->opacity_rnd >>8); + p0 = prm->opacity -p1; + if (p0<0) p0=0; + + PF_Fixed xx,yy; + long ln0 = prm->point_length * -1; + long ln1 = prm->point_length * 2; + long i,j; + long k; + long targetOut = 0; + for (j=0;jpoint_count;k++){ + td.start.x = xx + ln0 + (long)(F_RAND() *(ln1 +1.0f)/(F_RAND_MAX+1.0f)); + td.start.y = yy + ln0 + (long)(F_RAND() *(ln1 +1.0f)/(F_RAND_MAX+1.0f)); + + td.length_i = ir0 + (long)(F_RAND() *(ir1 +1.0f) /(1.0f +F_RAND_MAX)); + td.length_o = or0 + (long)(F_RAND() *(or1 +1.0f) /(1.0f +F_RAND_MAX)); + td.opacity = p0 + (long)(F_RAND() *(p1 +1.0f) /(1.0f +F_RAND_MAX));; + + drawTouchSub8(&td); + } + + //oD[targetOut].green = PF_MAX_CHAN8; + } + }else{ + F_RAND(); + } + targetOut++; + } + targetOut += ow; + } + +} \ No newline at end of file diff --git a/TouchDraw/Win/TouchDraw.vcxproj b/TouchDraw/Win/TouchDraw.vcxproj new file mode 100644 index 0000000..6c48169 --- /dev/null +++ b/TouchDraw/Win/TouchDraw.vcxproj @@ -0,0 +1,594 @@ +サソ + + + + Debug + Win32 + + + Debug + x64 + + + Release-MD + Win32 + + + Release-MD + x64 + + + Release + Win32 + + + Release + x64 + + + + {EA8D46EC-2DB0-44B9-B6A5-F75536BA2BDE} + TouchDraw + TouchDraw + 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/TouchDraw.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/TouchDraw.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/TouchDraw.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/TouchDraw.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/TouchDraw.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/TouchDraw.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/TouchDraw/Win/TouchDraw.vcxproj.filters b/TouchDraw/Win/TouchDraw.vcxproj.filters new file mode 100644 index 0000000..c75b8c2 --- /dev/null +++ b/TouchDraw/Win/TouchDraw.vcxproj.filters @@ -0,0 +1,165 @@ +サソ + + + + {03ae86d8-f27b-4fa2-ae61-5773846f6da8} + h;hpp;hxx;hm;inl;fi;fd + + + {e5f027ea-b985-4d0a-a56f-1d3bbc08266c} + + + {88b31712-ad3b-419a-a7dc-33d3d7b990d8} + ico;cur;bmp;dlg;rc2;rct;bin;cnt;rtf;gif;jpg;jpeg;jpe + + + {7d2683b5-943e-467b-af18-d6989c293ca7} + + + {6e4526e0-b347-443a-abb8-0dc101dabbdd} + + + {0d22f229-c94a-4713-8d85-36415318ed3a} + + + {39a26433-10cc-4f30-9044-d752e65da08f} + + + {13126cdb-3b6b-4475-b206-98350d7995b1} + + + + + 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/TouchDraw/Win/TouchDrawPiPL.rc b/TouchDraw/Win/TouchDrawPiPL.rc new file mode 100644 index 0000000..7624ce8 --- /dev/null +++ b/TouchDraw/Win/TouchDrawPiPL.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 TouchDraw\0\0", + + "MIB8", + "gtac", + 0, 0x0, + 20, 0x0, + "\x10F's Plugins-Draw\0\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 TouchDraw\0\0", + + "MIB8", + 0x6165464CL, + 0L, + 4L + 8L, + + +END + diff --git a/TouchDrawCenter/Fs_Entry.h b/TouchDrawCenter/Fs_Entry.h new file mode 100644 index 0000000..fe53faa --- /dev/null +++ b/TouchDrawCenter/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/TouchDrawCenter/Fs_Target.h b/TouchDrawCenter/Fs_Target.h new file mode 100644 index 0000000..6b19e7d --- /dev/null +++ b/TouchDrawCenter/Fs_Target.h @@ -0,0 +1,108 @@ +//----------------------------------------------------------------------------------- +/* + F's Plugins for VS2010/VS2012 +*/ +//----------------------------------------------------------------------------------- + +#pragma once +#ifndef FS_TARGET_H +#define FS_TARGET_H + +//----------------------------------------------------------------------------------- +//プラグインの識別に使われる名前 +#define FS_NAME "F's TouchDrawCenter" + +//----------------------------------------------------------------------------------- +//プラグインの説明に使われる文字 +#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 + + +/* +out_data->out_flags = + PF_OutFlag_PIX_INDEPENDENT // 1024 + | PF_OutFlag_NON_PARAM_VARY // 4(フレーム毎にレンダリングをp個なう) + | PF_OutFlag_DEEP_COLOR_AWARE // 33554432(16bit対応プラグインになる) + | PF_OutFlag_USE_OUTPUT_EXTENT // 64 + | PF_OutFlag_I_EXPAND_BUFFER; // 512 + //--------- + //合計= 33556032 + //合計= 33556036 +PF_OutFlag_NON_PARAM_VARY + +// プラグインの出力設定2(PiPL.rのAE_Effect_Global_OutFlags2と関連) + +out_data->out_flags2 = PF_OutFlag2_FLOAT_COLOR_AWARE // 4096(32bit対応プラグインになる) + | PF_OutFlag2_PARAM_GROUP_START_COLLAPSED_FLAG // 8 + | PF_OutFlag2_SUPPORTS_SMART_RENDER // 1024(SmartRenderを使う) + | PF_OutFlag2_SUPPORTS_QUERY_DYNAMIC_FLAGS // 1 + | PF_OutFlag2_DOESNT_NEED_EMPTY_PIXELS; // 64 + //----- + 5193 +#define FS_OUTFLAGS 33556034 +#define FS_OUTFLAGS2 5193 + + +#endif +*/ diff --git a/TouchDrawCenter/TouchDrawCenter.cpp b/TouchDrawCenter/TouchDrawCenter.cpp new file mode 100644 index 0000000..fc455af --- /dev/null +++ b/TouchDrawCenter/TouchDrawCenter.cpp @@ -0,0 +1,424 @@ + +//----------------------------------------------------------------------------------- +/* + F's Plugins for VS2010/VS2012 +*/ +//----------------------------------------------------------------------------------- + +#include "TouchDrawCenter.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_SEED, //パラメータの名前 + 0, //数値入力する場合の最小値 + 32000, //数値入力する場合の最大値 + 0, //スライダーの最小値 + 144, //スライダーの最大値 + 0, //デフォルトの値 + ID_SEED + ); + + //---------------------------------------------------------------- + //位置の指定 + AEFX_CLR_STRUCT(def); + PF_ADD_POINT(STR_CENTER, /*"New Center"*/ + 50, // X + 50, // Y + 0, // Flag + ID_CENTER + ); + //---------------------------------------------------------------- + //固定小数のスライダーバー + AEFX_CLR_STRUCT(def); + PF_ADD_FIXED( STR_LENGTH_MAX, //パラメータの名前 + 0, //数値入力する場合の最小値 + 200, //数値入力する場合の最大値 + 0, //スライダーの最小値 + 100, //スライダーの最大値 + 100, //デフォルトの値 + 1, //数値表示に関するフラグ + 0, + 0, + ID_LENGTH_MAX + ); + //---------------------------------------------------------------- + //固定小数のスライダーバー + AEFX_CLR_STRUCT(def); + PF_ADD_FIXED( STR_LENGTH_RND, //パラメータの名前 + 0, //数値入力する場合の最小値 + 200, //数値入力する場合の最大値 + 0, //スライダーの最小値 + 100, //スライダーの最大値 + 50, //デフォルトの値 + 1, //数値表示に関するフラグ + 0, + 0, + ID_LENGTH_RND + ); + //---------------------------------------------------------------- + //整数のスライダーバー + AEFX_CLR_STRUCT(def); + PF_ADD_SLIDER( STR_VALUE, //パラメータの名前 + 0, //数値入力する場合の最小値 + 3000, //数値入力する場合の最大値 + 0, //スライダーの最小値 + 100, //スライダーの最大値 + 30, //デフォルトの値 + ID_VALUE + ); + + //---------------------------------------------------------------- + //色の指定 + AEFX_CLR_STRUCT(def); + PF_ADD_COLOR( STR_COLOR, + 0x00, + 0x00, + 0x00, + ID_COLOR + ); + //---------------------------------------------------------------- + //固定小数のスライダーバー + AEFX_CLR_STRUCT(def); + PF_ADD_FIXED( STR_OPACITY, //パラメータの名前 + 0, //数値入力する場合の最小値 + 200, //数値入力する場合の最大値 + 0, //スライダーの最小値 + 100, //スライダーの最大値 + 100, //デフォルトの値 + 1, //数値表示に関するフラグ + 0, + 0, + ID_OPACITY + ); + //---------------------------------------------------------------- + //固定小数のスライダーバー + AEFX_CLR_STRUCT(def); + PF_ADD_FIXED( STR_OPACITY_RND, //パラメータの名前 + 0, //数値入力する場合の最小値 + 200, //数値入力する場合の最大値 + 0, //スライダーの最小値 + 100, //スライダーの最大値 + 50, //デフォルトの値 + 1, //数値表示に関するフラグ + 0, + 0, + ID_OPACITY_RND + ); + //---------------------------------------------------------------- + //整数のスライダーバー + AEFX_CLR_STRUCT(def); + PF_ADD_SLIDER( STR_POINT_COUNT, //パラメータの名前 + 0, //数値入力する場合の最小値 + 100, //数値入力する場合の最大値 + 0, //スライダーの最小値 + 10, //スライダーの最大値 + 5, //デフォルトの値 + ID_POINT_COUNT + ); + //---------------------------------------------------------------- + //固定小数のスライダーバー + AEFX_CLR_STRUCT(def); + PF_ADD_FIXED( STR_POINT_LENGTH, //パラメータの名前 + 0, //数値入力する場合の最小値 + 300, //数値入力する場合の最大値 + 0, //スライダーの最小値 + 30, //スライダーの最大値 + 10, //デフォルトの値 + 1, //数値表示に関するフラグ + 0, + 0, + ID_POINT_LENGTH + ); + + + //---------------------------------------------------------------- + //チェックボックス + AEFX_CLR_STRUCT(def); + PF_ADD_CHECKBOX(STR_ORG_CB1, + STR_ORG_CB2, + TRUE, + 0, + ID_ORG + ); + //---------------------------------------------------------------- + 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 CalcParams(CFsAE *ae, ParamInfo *infoP) +{ + PF_Err err = PF_Err_NONE; + //タッチ線の上下左右の発生回数を計算 + infoP->value_left = + infoP->value_right = + infoP->value_top = + infoP->value_bottom = infoP->value; + if (infoP->value>0){ + //まず上下から + A_long c = ae->out->height()/2; //2分の一にしておく + A_long p = (A_long)infoP->centeY; + A_long vv=0; + if ( (c/2)==(p/2)){ + //大体同じなら数を一緒とする。 + }else if (p<=0){ + infoP->value_bottom += infoP->value_top; + infoP->value_top = 0; + }else if ( p>=ae->out->height()-1){ + infoP->value_top += infoP->value_bottom; + infoP->value_bottom = 0; + }else if (p>c){ + vv = infoP->value_bottom * (p-c) /(ae->out->height() - c); + infoP->value_bottom -= vv; + infoP->value_top += vv; + }else{ + vv = infoP->value_top * (c-p) /c; + infoP->value_top -= vv; + infoP->value_bottom += vv; + } + //まず左右から + c = ae->out->width()/2; //2分の一にしておく + p = (A_long)infoP->centeX; + vv=0; + if ( (c/2)==(p/2)){ + //大体同じなら数を一緒とする。 + }else if (p<=0){ + infoP->value_right += infoP->value_left; + infoP->value_left = 0; + }else if ( p>=ae->out->width()-1){ + infoP->value_left += infoP->value_right; + infoP->value_right = 0; + }else if (p>c){ + vv = infoP->value_right * (p-c) /(ae->out->width() - c); + infoP->value_right -= vv; + infoP->value_left += vv; + }else{ + vv = infoP->value_left * (c-p) /c; + infoP->value_left -= vv; + infoP->value_right += vv; + } + } + return err; +} +//------------------------------------------------------------------------------------------------- +static PF_Err GetParams(CFsAE *ae, ParamInfo *infoP) +{ + PF_Err err = PF_Err_NONE; + + ERR(ae->GetADD(ID_SEED,&infoP->seed)); + if (!err) if (infoP->seed<0) infoP->seed =0; + PF_FixedPoint pt; + ERR(ae->GetFIXEDPOINT(ID_CENTER,&pt)); + if (!err){ + infoP->centeX = (PF_FpShort)pt.x/(1L<<16); + infoP->centeY = (PF_FpShort)pt.y/(1L<<16); + } + PF_FpShort s; + ERR(ae->GetFIXED2FpShort(ID_LENGTH_MAX,&s)); + if (!err) { + infoP->length_max = s/100; + if (infoP->length_max<0) infoP->length_max=0; + } + ERR(ae->GetFIXED2FpShort(ID_LENGTH_RND,&s)); + if (!err) { + infoP->length_rnd = s/100; + if (infoP->length_rnd<0) infoP->length_rnd=0; + } + + ERR(ae->GetADD(ID_VALUE,&infoP->value)); + if (!err) if (infoP->value<0) infoP->value=0; + + ERR(ae->GetCOLOR(ID_COLOR,&infoP->color)); + + ERR(ae->GetFIXED2FpShort(ID_OPACITY,&s)); + if (!err) { + infoP->opacity = s/100; + if (infoP->opacity<0) infoP->opacity=0; + } + ERR(ae->GetFIXED2FpShort(ID_OPACITY_RND,&s)); + if (!err) { + infoP->opacity_rnd = s/100; + if (infoP->opacity_rnd<0) infoP->opacity_rnd=0; + } + ERR(ae->GetADD(ID_POINT_COUNT,&infoP->point_count)); + if (!err) if (infoP->point_count<0) infoP->point_count=0; + + ERR(ae->GetFIXED2FpShort(ID_POINT_LENGTH,&s)); + if (!err) { + infoP->point_length = s * ae->in_data->downsample_x.num /ae->in_data->downsample_x.den; + if (infoP->point_length<0) infoP->point_length=0; + } + ERR(ae->GetCHECKBOX(ID_ORG,&infoP->org)); + + return err; +} +//------------------------------------------------------------------------------------------------- +static PF_Err + Exec (CFsAE *ae, ParamInfo *infoP) +{ + PF_Err err = PF_Err_NONE; + + ERR(ae->out->clear()); + if ( (infoP->length_max <=0)||(infoP->value<=0)||(infoP->opacity<=0)){ + if ( infoP->org) ERR(ae->CopyInToOut()); + return err; + } + /* + infoP->centeX -= ae->output->origin_x; + infoP->centeY -= ae->output->origin_y; + */ + + switch(ae->pixelFormat()) + { + case PF_PixelFormat_ARGB128: + drawTouch32(ae->out,infoP); + AlphaBlur32(ae->out); + copyImageInfo32 ci32; + ci32.col = CONV8TO32( infoP->color); + ci32.org = infoP->org; + ERR(ae->iterate32((refconType)&ci32,CopyImage32)); + break; + case PF_PixelFormat_ARGB64: + drawTouch16(ae->out,infoP); + AlphaBlur16(ae->out); + copyImageInfo16 ci16; + ci16.col = CONV8TO16( infoP->color); + ci16.org = infoP->org; + ERR(ae->iterate16((refconType)&ci16,CopyImage16)); + break; + case PF_PixelFormat_ARGB32: + drawTouch8(ae->out,infoP); + AlphaBlur8(ae->out); + copyImageInfo8 ci8; + ci8.col = infoP->color; + ci8.org = infoP->org; + ERR(ae->iterate8((refconType)&ci8,CopyImage8)); + 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)); + CalcParams(&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){ + CalcParams(&ae,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/TouchDrawCenter/TouchDrawCenter.h b/TouchDrawCenter/TouchDrawCenter.h new file mode 100644 index 0000000..5472e8f --- /dev/null +++ b/TouchDrawCenter/TouchDrawCenter.h @@ -0,0 +1,177 @@ +//----------------------------------------------------------------------------------- +/* + PluginSkeleton for VS2010 +*/ +//----------------------------------------------------------------------------------- + +#pragma once +#ifndef TouchDrawCenter_H +#define TouchDrawCenter_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_SEED "RandomSeed" +#define STR_CENTER "Center" +#define STR_LENGTH_MAX "Length" +#define STR_LENGTH_RND "Length_Random" +#define STR_VALUE "Value" +#define STR_COLOR "Color" +#define STR_OPACITY "Opacity" +#define STR_OPACITY_RND "Opacity_Random" + +#define STR_POINT_COUNT "Point_Count" +#define STR_POINT_LENGTH "Point_Length" +#define STR_ORG_CB1 "Original_Blend" +#define STR_ORG_CB2 "ON" + + +//ユーザーインターフェースのID +//ParamsSetup関数とRender関数のparamsパラメータのIDになる +enum { + ID_INPUT = 0, // default input layer + + ID_SEED, //ランダムの基点 + ID_CENTER, + ID_LENGTH_MAX, //タッチ線の長さ + ID_LENGTH_RND, //長さのランダムさ + + ID_VALUE, //タッチが発生する数 + ID_COLOR, //タッチ線の色 + ID_OPACITY, //タッチ線の色 + ID_OPACITY_RND, //タッチ線の色 + + ID_POINT_COUNT, //タッチが発生する数 + ID_POINT_LENGTH, //タッチが発生する範囲 + ID_ORG, + + ID_NUM_PARAMS + }; + +//プラグイン独自のパラメータを集めた構造体 +#define GSeedLength 4 + +typedef struct ParamInfo{ + A_long seed; + PF_FpShort centeX; + PF_FpShort centeY; + PF_FpShort length_max; + PF_FpShort length_rnd; + A_long value; + A_long value_left; + A_long value_right; + A_long value_top; + A_long value_bottom; + + PF_Pixel color; + PF_FpShort opacity; + PF_FpShort opacity_rnd; + A_long point_count; + PF_FpShort point_length; + PF_Boolean org; +} ParamInfo; + +typedef struct PsetAlphaPrm{ + PF_FpShort x; + PF_FpShort y; + PF_FpShort opacity; +} PsetAlphaPrm; + +typedef struct TouchDrawCenterInfo{ + PF_FpShort startX; + PF_FpShort startY; + PF_FpShort centerX; + PF_FpShort centerY; + PF_FpShort length; + PF_FpShort opacity; + +} TouchDrawCenterInfo; + +typedef struct copyImageInfo8{ + PF_Pixel col; + PF_Boolean org; +} copyImageInfo8; + +typedef struct copyImageInfo16{ + PF_Pixel16 col; + PF_Boolean org; +} copyImageInfo16; + +typedef struct copyImageInfo32{ + PF_PixelFloat col; + PF_Boolean org; +} copyImageInfo32; + + + +//------------------------------------------------------- +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); +} + +//------------------------------------------------------- +void drawTouch8(CFsGraph *g, ParamInfo *info); +void AlphaBlur8(CFsGraph *g); +PF_Err CopyImage8 ( + refconType refcon, + A_long xL, + A_long yL, + PF_Pixel8 *inP, + PF_Pixel8 *outP); + +void drawTouch16(CFsGraph *g, ParamInfo *info); +void AlphaBlur16(CFsGraph *g); +PF_Err CopyImage16 ( + refconType refcon, + A_long xL, + A_long yL, + PF_Pixel16 *inP, + PF_Pixel16 *outP); + +void drawTouch32(CFsGraph *g, ParamInfo *info); +void AlphaBlur32(CFsGraph *g); +PF_Err CopyImage32 ( + refconType refcon, + A_long xL, + A_long yL, + PF_PixelFloat *inP, + PF_PixelFloat *outP); + +#endif // TouchDrawCenter_H diff --git a/TouchDrawCenter/TouchDrawCenterPiPL.r b/TouchDrawCenter/TouchDrawCenterPiPL.r new file mode 100644 index 0000000..20cd373 --- /dev/null +++ b/TouchDrawCenter/TouchDrawCenterPiPL.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 { + 0 + } + } +}; + diff --git a/TouchDrawCenter/ToutchDraw16.cpp b/TouchDrawCenter/ToutchDraw16.cpp new file mode 100644 index 0000000..36a003a --- /dev/null +++ b/TouchDrawCenter/ToutchDraw16.cpp @@ -0,0 +1,220 @@ +#include "TouchDrawCenter.h" + +//------------------------------------------------------- +inline A_u_short mixCh16(A_long c0, A_long c1) +{ + A_long v = c0 + c1 - (c0 * c1 >>15); + if (v<0) { v=0; }else if(v>PF_MAX_CHAN16){v = PF_MAX_CHAN16;} + return (A_u_short)v; +} +//------------------------------------------------------- +/* + アルファーへ書き込み +*/ +inline void PsetAlpha16(CFsGraph *g, PsetAlphaPrm *prm) +{ + PF_FpShort opacity = prm->opacity; + if (opacity<=0) return; + if (opacity>1) opacity = 1; + + PF_Pixel16 *data; + data = (PF_Pixel16 *)g->data(); + A_long w = g->width(); + A_long wt = g->widthTrue(); + A_long h = g->height(); + A_long x1,y1,x2,y2; + + PF_FpLong xx2,yy2,xx1,yy1; + + x1 = (A_long)prm->x; + y1 = (A_long)prm->y; + x2 = x1+1; + y2 = y1+1; + if ( (x1>=w)||(y1>=h)||(x2<0)||(y2<0) ) return; + + + + xx2 = prm->x - (PF_FpLong)x1; + yy2 = prm->y - (PF_FpLong)y1; + xx1 = 1 - xx2; + yy1 = 1 - yy2; + + A_long v = (A_long)(PF_MAX_CHAN16 * opacity); + A_long target = x1 + (y1 * wt); + + //まず、ぴったりの時 + if ( (xx2 == 0)&&(yy2 == 0) ) { + data[target].alpha = mixCh16(data[target].alpha,v); + data[target].red = data[target].alpha; + }else{ + //まず左上 + if ( ((x1>=0)&&(y1>=0)) == TRUE){ + data[target].alpha = mixCh16(data[target].alpha,(A_long)(v * xx1 * yy1)); + data[target].red = data[target].alpha; + } + //右上 + target++; + if ( ((x2=0)) == TRUE){ + data[target].alpha = mixCh16(data[target].alpha,(A_long)(v * xx2 *yy1)); + data[target].red = data[target].alpha; + } + //右下 + target+= wt; + if ( ((x2=0)&&(y2opacity <=0) return; + + PsetAlphaPrm pprm; + PF_FpShort rnd = p->length; + if(rnd<=0) {return;} + else if (rnd>1) {rnd = 1;} + + PF_FpShort x,y,dx,dy,dl; + A_long len; + PF_FpShort xF =1; + PF_FpShort yF =1; + x = (p->centerX - p->startX); + if (x<0) { + xF = -1; + x *= -1; + } + y = (p->centerY - p->startY); + if (y<0) { + yF = -1; + y *= -1; + } + x *= rnd; + y *= rnd; + + if ( (x==0)&&(y==0) ) return; + + pprm.x = p->startX; + pprm.y = p->startY; + pprm.opacity = p->opacity; + A_long i; + + if (x>=y){ + len = (A_long)x; + }else{ + len = (A_long)y; + } + dx = x / (PF_FpShort)len; dx *=xF; + dy = y / (PF_FpShort)len; dy *=yF; + dl = pprm.opacity /(PF_FpShort)len; + + for ( i=0; iseed); + A_long w = g->width(); + A_long h = g->height(); + + + TouchDrawCenterInfo ti; + ti.centerX = info->centeX; + ti.centerY = info->centeY; + + //不透明度ランダム + PF_FpShort p0,p1; + p0 = info->opacity * (1 - info->opacity_rnd); + p1 = info->opacity - p0; + + //長さランダム + PF_FpShort r0,r1; + r0 = info->length_max * (1 - info->length_rnd); + r1 = info->length_max - r0; + + + //横ランダム + PF_FpShort w0 = (PF_FpShort)w / -5; + PF_FpShort w1 = (PF_FpShort)w + ((PF_FpShort)w/5)-w0; + //縦ランダム + PF_FpShort h0 = (PF_FpShort)h / -5; + PF_FpShort h1 = (PF_FpShort)h + ((PF_FpShort)h/5)-h0; + + // + PF_FpShort lr0 = -info->point_length; + PF_FpShort lr1 = info->point_length * 2; + + A_long i,j; + PF_FpShort xx,yy; + //先ずtop + if (info->value_top>0){ + ti.startY = (PF_FpShort)((PF_FpShort)h/-20); + for(i=0;ivalue_top;i++){ + xx = (PF_FpShort)(w0 + F_RAND_D()*w1); + for (j=0; j<=info->point_count;j++) + { + ti.opacity = (PF_FpShort)(p0 + F_RAND_D()*p1); + ti.length = (PF_FpShort)(r0 + F_RAND_D()*r1); + ti.startX = (PF_FpShort)(xx + lr0 + F_RAND_D()*lr1); + drawTouchSub16(g,&ti); + } + } + } + if (info->value_bottom>0){ + ti.startY = (PF_FpShort)((PF_FpShort)h-1 + (PF_FpShort)h/20); + for(i=0;ivalue_bottom;i++){ + xx = (PF_FpShort)(w0 + F_RAND_D()*w1); + for (j=0; j<=info->point_count;j++) + { + ti.opacity = (PF_FpShort)(p0 + F_RAND_D()*p1); + ti.length = (PF_FpShort)(r0 + F_RAND_D()*r1); + ti.startX = (PF_FpShort)(xx + lr0 + F_RAND_D()*lr1); + drawTouchSub16(g,&ti); + } + } + } + if (info->value_left>0){ + ti.startX = (PF_FpShort)((PF_FpShort)w/-20); + for(i=0;ivalue_left;i++){ + yy = (PF_FpShort)(h0 + F_RAND_D()*h1); + for (j=0; j<=info->point_count;j++) + { + ti.opacity = (PF_FpShort)(p0 + F_RAND_D()*p1); + ti.length = (PF_FpShort)(r0 + F_RAND_D()*r1); + ti.startY = (PF_FpShort)(yy + lr0 + F_RAND_D()*lr0); + drawTouchSub16(g,&ti); + } + } + } + + if (info->value_right>0){ + ti.startX = (PF_FpShort)((PF_FpShort)w -1 + (PF_FpShort)w/20); + for(i=0;i< info->value_right;i++){ + yy = (PF_FpShort)(h0 + F_RAND_D()*h1); + for (j=0; j<=info->point_count;j++) + { + ti.opacity = (PF_FpShort)(p0 + F_RAND_D()*p1); + ti.length = (PF_FpShort)(r0 + F_RAND_D()*r1); + ti.startY = (PF_FpShort)(yy + lr0 + F_RAND_D()*lr0); + drawTouchSub16(g,&ti); + } + } + } +} +//------------------------------------------------------------------------------- diff --git a/TouchDrawCenter/ToutchDraw32.cpp b/TouchDrawCenter/ToutchDraw32.cpp new file mode 100644 index 0000000..54dffe3 --- /dev/null +++ b/TouchDrawCenter/ToutchDraw32.cpp @@ -0,0 +1,221 @@ +#include "TouchDrawCenter.h" + +//------------------------------------------------------- +inline PF_FpShort mixCh32(PF_FpLong c0, PF_FpLong c1) +{ + PF_FpLong v = c0 + c1 - (c0 * c1); + if (v<0) { v=0; }else if(v>1){v = 1;} + return (PF_FpShort)v; +} + +//------------------------------------------------------- +/* + アルファーへ書き込み +*/ +inline void PsetAlpha32(CFsGraph *g, PsetAlphaPrm *prm) +{ + PF_FpShort opacity = prm->opacity; + if (opacity<=0) return; + if (opacity>1) opacity = 1; + + PF_PixelFloat *data; + data = (PF_PixelFloat *)g->data(); + A_long w = g->width(); + A_long wt = g->widthTrue(); + A_long h = g->height(); + A_long x1,y1,x2,y2; + + PF_FpLong xx2,yy2,xx1,yy1; + + x1 = (A_long)prm->x; + y1 = (A_long)prm->y; + x2 = x1+1; + y2 = y1+1; + if ( (x1>=w)||(y1>=h)||(x2<0)||(y2<0) ) return; + + + + xx2 = prm->x - (PF_FpShort)x1; + yy2 = prm->y - (PF_FpShort)y1; + xx1 = 1 - xx2; + yy1 = 1 - yy2; + + PF_FpLong v = opacity; + A_long target = x1 + (y1 * wt); + + //まず、ぴったりの時 + if ( (xx2 == 0)&&(yy2 == 0) ) { + data[target].alpha = mixCh32(data[target].alpha,v); + data[target].red = data[target].alpha; + }else{ + //まず左上 + if ( ((x1>=0)&&(y1>=0)) == TRUE){ + data[target].alpha = mixCh32(data[target].alpha,(v * xx1 * yy1)); + data[target].red = data[target].alpha; + } + //右上 + target++; + if ( ((x2=0)) == TRUE){ + data[target].alpha = mixCh32(data[target].alpha,(v * xx2 *yy1)); + data[target].red = data[target].alpha; + } + //右下 + target+= wt; + if ( ((x2=0)&&(y2opacity <=0) return; + + PsetAlphaPrm pprm; + PF_FpShort rnd = p->length; + if(rnd<=0) {return;} + else if (rnd>1) {rnd = 1;} + + PF_FpShort x,y,dx,dy,dl; + A_long len; + PF_FpShort xF =1; + PF_FpShort yF =1; + x = (p->centerX - p->startX); + if (x<0) { + xF = -1; + x *= -1; + } + y = (p->centerY - p->startY); + if (y<0) { + yF = -1; + y *= -1; + } + x *= rnd; + y *= rnd; + + if ( (x==0)&&(y==0) ) return; + + pprm.x = p->startX; + pprm.y = p->startY; + pprm.opacity = p->opacity; + A_long i; + + if (x>=y){ + len = (A_long)x; + }else{ + len = (A_long)y; + } + dx = x / (PF_FpShort)len; dx *=xF; + dy = y / (PF_FpShort)len; dy *=yF; + dl = pprm.opacity /(PF_FpShort)len; + + for ( i=0; iseed); + A_long w = g->width(); + A_long h = g->height(); + + + TouchDrawCenterInfo ti; + ti.centerX = info->centeX; + ti.centerY = info->centeY; + + //不透明度ランダム + PF_FpShort p0,p1; + p0 = info->opacity * (1 - info->opacity_rnd); + p1 = info->opacity - p0; + + //長さランダム + PF_FpShort r0,r1; + r0 = info->length_max * (1 - info->length_rnd); + r1 = info->length_max - r0; + + + //横ランダム + PF_FpShort w0 = (PF_FpShort)w / -5; + PF_FpShort w1 = (PF_FpShort)w + ((PF_FpShort)w/5)-w0; + //縦ランダム + PF_FpShort h0 = (PF_FpShort)h / -5; + PF_FpShort h1 = (PF_FpShort)h + ((PF_FpShort)h/5)-h0; + + // + PF_FpShort lr0 = -info->point_length; + PF_FpShort lr1 = info->point_length * 2; + + A_long i,j; + PF_FpShort xx,yy; + //先ずtop + if (info->value_top>0){ + ti.startY = (PF_FpShort)((PF_FpShort)h/-20); + for(i=0;ivalue_top;i++){ + xx = (PF_FpShort)(w0 + F_RAND_D()*w1); + for (j=0; j<=info->point_count;j++) + { + ti.opacity = (PF_FpShort)(p0 + F_RAND_D()*p1); + ti.length = (PF_FpShort)(r0 + F_RAND_D()*r1); + ti.startX = (PF_FpShort)(xx + lr0 + F_RAND_D()*lr1); + drawTouchSub32(g,&ti); + } + } + } + if (info->value_bottom>0){ + ti.startY = (PF_FpShort)((PF_FpShort)h-1 + (PF_FpShort)h/20); + for(i=0;ivalue_bottom;i++){ + xx = (PF_FpShort)(w0 + F_RAND_D()*w1); + for (j=0; j<=info->point_count;j++) + { + ti.opacity = (PF_FpShort)(p0 + F_RAND_D()*p1); + ti.length = (PF_FpShort)(r0 + F_RAND_D()*r1); + ti.startX = (PF_FpShort)(xx + lr0 + F_RAND_D()*lr1); + drawTouchSub32(g,&ti); + } + } + } + if (info->value_left>0){ + ti.startX = (PF_FpShort)((PF_FpShort)w/-20); + for(i=0;ivalue_left;i++){ + yy = (PF_FpShort)(h0 + F_RAND_D()*h1); + for (j=0; j<=info->point_count;j++) + { + ti.opacity = (PF_FpShort)(p0 + F_RAND_D()*p1); + ti.length = (PF_FpShort)(r0 + F_RAND_D()*r1); + ti.startY = (PF_FpShort)(yy + lr0 + F_RAND_D()*lr0); + drawTouchSub32(g,&ti); + } + } + } + + if (info->value_right>0){ + ti.startX = (PF_FpShort)((PF_FpShort)w -1 + (PF_FpShort)w/20); + for(i=0;i< info->value_right;i++){ + yy = (PF_FpShort)(h0 + F_RAND_D()*h1); + for (j=0; j<=info->point_count;j++) + { + ti.opacity = (PF_FpShort)(p0 + F_RAND_D()*p1); + ti.length = (PF_FpShort)(r0 + F_RAND_D()*r1); + ti.startY = (PF_FpShort)(yy + lr0 + F_RAND_D()*lr0); + drawTouchSub32(g,&ti); + } + } + } +} +//------------------------------------------------------------------------------- diff --git a/TouchDrawCenter/ToutchDraw8.cpp b/TouchDrawCenter/ToutchDraw8.cpp new file mode 100644 index 0000000..6f038b3 --- /dev/null +++ b/TouchDrawCenter/ToutchDraw8.cpp @@ -0,0 +1,220 @@ +#include "TouchDrawCenter.h" + +//------------------------------------------------------- +inline A_u_char mixCh8(A_long c0, A_long c1) +{ + A_long v = c0 + c1 - (c0 * c1 >>8); + if (v<0) { v=0; }else if(v>PF_MAX_CHAN8){v = PF_MAX_CHAN8;} + return (A_u_char)v; +} +//------------------------------------------------------- +/* + アルファーへ書き込み +*/ +inline void PsetAlpha(CFsGraph *g, PsetAlphaPrm *prm) +{ + PF_FpShort opacity = prm->opacity; + if (opacity<=0) return; + if (opacity>1) opacity = 1; + + PF_Pixel *data; + data = (PF_Pixel *)g->data(); + A_long w = g->width(); + A_long wt = g->widthTrue(); + A_long h = g->height(); + A_long x1,y1,x2,y2; + + PF_FpLong xx2,yy2,xx1,yy1; + + x1 = (A_long)prm->x; + y1 = (A_long)prm->y; + x2 = x1+1; + y2 = y1+1; + if ( (x1>=w)||(y1>=h)||(x2<0)||(y2<0) ) return; + + + + xx2 = prm->x - (PF_FpLong)x1; + yy2 = prm->y - (PF_FpLong)y1; + xx1 = 1 - xx2; + yy1 = 1 - yy2; + + A_long v = (A_long)(PF_MAX_CHAN8 * opacity); + A_long target = x1 + (y1 * wt); + + //まず、ぴったりの時 + if ( (xx2 == 0)&&(yy2 == 0) ) { + data[target].alpha = mixCh8(data[target].alpha,v); + data[target].red = data[target].alpha; + }else{ + //まず左上 + if ( ((x1>=0)&&(y1>=0)) == TRUE){ + data[target].alpha = mixCh8(data[target].alpha,(A_long)(v * xx1 * yy1)); + data[target].red = data[target].alpha; + } + //右上 + target++; + if ( ((x2=0)) == TRUE){ + data[target].alpha = mixCh8(data[target].alpha,(A_long)(v * xx2 *yy1)); + data[target].red = data[target].alpha; + } + //右下 + target+= wt; + if ( ((x2=0)&&(y2opacity <=0) return; + + PsetAlphaPrm pprm; + PF_FpShort rnd = p->length; + if(rnd<=0) {return;} + else if (rnd>1) {rnd = 1;} + + PF_FpShort x,y,dx,dy,dl; + A_long len; + PF_FpShort xF =1; + PF_FpShort yF =1; + x = (p->centerX - p->startX); + if (x<0) { + xF = -1; + x *= -1; + } + y = (p->centerY - p->startY); + if (y<0) { + yF = -1; + y *= -1; + } + x *= rnd; + y *= rnd; + + if ( (x==0)&&(y==0) ) return; + + pprm.x = p->startX; + pprm.y = p->startY; + pprm.opacity = p->opacity; + A_long i; + + if (x>=y){ + len = (A_long)x; + }else{ + len = (A_long)y; + } + dx = x / (PF_FpShort)len; dx *=xF; + dy = y / (PF_FpShort)len; dy *=yF; + dl = pprm.opacity /(PF_FpShort)len; + + for ( i=0; iseed); + A_long w = g->width(); + A_long h = g->height(); + + + TouchDrawCenterInfo ti; + ti.centerX = info->centeX; + ti.centerY = info->centeY; + + //不透明度ランダム + PF_FpShort p0,p1; + p0 = info->opacity * (1 - info->opacity_rnd); + p1 = info->opacity - p0; + + //長さランダム + PF_FpShort r0,r1; + r0 = info->length_max * (1 - info->length_rnd); + r1 = info->length_max - r0; + + + //横ランダム + PF_FpShort w0 = (PF_FpShort)w / -5; + PF_FpShort w1 = (PF_FpShort)w + ((PF_FpShort)w/5)-w0; + //縦ランダム + PF_FpShort h0 = (PF_FpShort)h / -5; + PF_FpShort h1 = (PF_FpShort)h + ((PF_FpShort)h/5)-h0; + + // + PF_FpShort lr0 = -info->point_length; + PF_FpShort lr1 = info->point_length * 2; + + A_long i,j; + PF_FpShort xx,yy; + //先ずtop + if (info->value_top>0){ + ti.startY = (PF_FpShort)((PF_FpShort)h/-20); + for(i=0;ivalue_top;i++){ + xx = (PF_FpShort)(w0 + F_RAND_D()*w1); + for (j=0; j<=info->point_count;j++) + { + ti.opacity = (PF_FpShort)(p0 + F_RAND_D()*p1); + ti.length = (PF_FpShort)(r0 + F_RAND_D()*r1); + ti.startX = (PF_FpShort)(xx + lr0 + F_RAND_D()*lr1); + drawTouchSub8(g,&ti); + } + } + } + if (info->value_bottom>0){ + ti.startY = (PF_FpShort)((PF_FpShort)h-1 + (PF_FpShort)h/20); + for(i=0;ivalue_bottom;i++){ + xx = (PF_FpShort)(w0 + F_RAND_D()*w1); + for (j=0; j<=info->point_count;j++) + { + ti.opacity = (PF_FpShort)(p0 + F_RAND_D()*p1); + ti.length = (PF_FpShort)(r0 + F_RAND_D()*r1); + ti.startX = (PF_FpShort)(xx + lr0 + F_RAND_D()*lr1); + drawTouchSub8(g,&ti); + } + } + } + if (info->value_left>0){ + ti.startX = (PF_FpShort)((PF_FpShort)w/-20); + for(i=0;ivalue_left;i++){ + yy = (PF_FpShort)(h0 + F_RAND_D()*h1); + for (j=0; j<=info->point_count;j++) + { + ti.opacity = (PF_FpShort)(p0 + F_RAND_D()*p1); + ti.length = (PF_FpShort)(r0 + F_RAND_D()*r1); + ti.startY = (PF_FpShort)(yy + lr0 + F_RAND_D()*lr0); + drawTouchSub8(g,&ti); + } + } + } + + if (info->value_right>0){ + ti.startX = (PF_FpShort)((PF_FpShort)w -1 + (PF_FpShort)w/20); + for(i=0;i< info->value_right;i++){ + yy = (PF_FpShort)(h0 + F_RAND_D()*h1); + for (j=0; j<=info->point_count;j++) + { + ti.opacity = (PF_FpShort)(p0 + F_RAND_D()*p1); + ti.length = (PF_FpShort)(r0 + F_RAND_D()*r1); + ti.startY = (PF_FpShort)(yy + lr0 + F_RAND_D()*lr0); + drawTouchSub8(g,&ti); + } + } + } +} +//------------------------------------------------------------------------------- diff --git a/TouchDrawCenter/Win/TouchDrawCenter.vcxproj b/TouchDrawCenter/Win/TouchDrawCenter.vcxproj new file mode 100644 index 0000000..2118a6e --- /dev/null +++ b/TouchDrawCenter/Win/TouchDrawCenter.vcxproj @@ -0,0 +1,619 @@ +サソ + + + + Debug + Win32 + + + Debug + x64 + + + Release-MD + Win32 + + + Release-MD + x64 + + + Release + Win32 + + + Release + x64 + + + + {B44E5587-2ABB-4857-A0E6-A52499D10C26} + TouchDrawCenter + 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/TouchDrawCenter.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/TouchDrawCenter.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/TouchDrawCenter.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)_CS4.aex + true + false + $(IntDir)$(ProjectName).pdb + Windows + false + + + $(IntDir)$(ProjectName).lib + MachineX86 + + + + + _DEBUG;%(PreprocessorDefinitions) + true + true + Win32 + .\Debug/TouchDrawCenter.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)_CS4.aex + true + false + $(IntDir)$(ProjectName).pdb + Windows + false + + + $(IntDir)$(ProjectName).lib + MachineX86 + + + + + _DEBUG;%(PreprocessorDefinitions) + true + true + X64 + .\Debug/TouchDrawCenter.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/TouchDrawCenter.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 + 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 + + + + + true + true + true + + + + + + + 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/TouchDrawCenter/Win/TouchDrawCenter.vcxproj.filters b/TouchDrawCenter/Win/TouchDrawCenter.vcxproj.filters new file mode 100644 index 0000000..962dd82 --- /dev/null +++ b/TouchDrawCenter/Win/TouchDrawCenter.vcxproj.filters @@ -0,0 +1,180 @@ +サソ + + + + {c6025c03-54a6-4ce0-b1dd-ecdd422d276b} + h;hpp;hxx;hm;inl;fi;fd + + + {de356873-587f-4252-934f-1fd968a5d392} + + + {4460e962-3480-4a2b-8237-f7684bf6633b} + + + {224dc47a-884c-4b46-8557-1fc27cc2ce55} + ico;cur;bmp;dlg;rc2;rct;bin;cnt;rtf;gif;jpg;jpeg;jpe + + + {0e5b0f40-e892-42c2-9534-af436f8c4802} + + + {8dcbcc9e-dcb6-49c6-b275-8bc96e1558e4} + + + {3efa0962-35a9-45e1-b756-52098750fba4} + + + {b3c8a9df-67cd-4c24-a6cd-caef292636fa} + + + {98264914-8d85-487f-bfd8-31f2121221e1} + + + + + 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 + + + org + + + org + + + org + + + org + + + org + + + org + + + org + + + Supporting code\Fs + + + + + Resource Files + + + + + Header Files\AE + + + \ No newline at end of file diff --git a/TouchDrawCenter/Win/TouchDrawCenterPiPL.rc b/TouchDrawCenter/Win/TouchDrawCenterPiPL.rc new file mode 100644 index 0000000..46bbdfd --- /dev/null +++ b/TouchDrawCenter/Win/TouchDrawCenterPiPL.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 TouchDrawCenter", + + "MIB8", + "gtac", + 0, 0x0, + 20, 0x0, + "\x10F's Plugins-Draw\0\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, + 33556036L, + + "MIB8", + "2LGe", + 0L, + 4L, + 5193L, + + "MIB8", + "ANMe", + 0, 0x0, + 20, 0x0, + "\x13F's TouchDrawCenter", + + "MIB8", + 0x6165464CL, + 0L, + 4L + 0L, + + +END + diff --git a/TouchDrawCenter/alphaBlur16.cpp b/TouchDrawCenter/alphaBlur16.cpp new file mode 100644 index 0000000..ed57ae7 --- /dev/null +++ b/TouchDrawCenter/alphaBlur16.cpp @@ -0,0 +1,173 @@ +#include "TouchDrawCenter.h" + +void AlphaBlur16(CFsGraph *g) +{ + PF_Pixel16 *data; + data = (PF_Pixel16 *)g->data(); + A_long wt = g->widthTrue(); + A_long ow = g->offsetWidth(); + + A_long w = g->width()-1; + A_long h = g->height()-1; + + A_long x,y; + A_long v; + + //まず、真ん中 + A_long adr=wt+1; + A_long adr2; + for(y=1;y> 5; + data[adr].alpha = RoundShort(v); + + adr++; + } + adr+=(ow+2); + } + //上下 + adr = 1; + A_long adrH = h*wt+1; + for(x=1;xdata(); + A_long wt = g->widthTrue(); + A_long ow = g->offsetWidth(); + + A_long w = g->width()-1; + A_long h = g->height()-1; + + A_long x,y; + PF_FpLong v; + + //まず、真ん中 + A_long adr=wt+1; + A_long adr2; + for(y=1;ydata(); + A_long wt = g->widthTrue(); + A_long ow = g->offsetWidth(); + + A_long w = g->width()-1; + A_long h = g->height()-1; + + A_long x,y; + A_long v; + + //まず、真ん中 + A_long adr=wt+1; + A_long adr2; + for(y=1;y> 5; + data[adr].alpha = RoundByteLong(v); + + adr++; + } + adr+=(ow+2); + } + //上下 + adr = 1; + A_long adrH = h*wt+1; + for(x=1;x> 8; + A_long ad2 = dd.alpha + as2; + + if (ad2>PF_MAX_CHAN8) ad2 = PF_MAX_CHAN8; + + 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; + + rr.alpha = (A_u_char)ad2; + rr.red = RoundByteLong(r); + rr.green = RoundByteLong(g); + rr.blue = RoundByteLong(b); + return rr; + } +} +//-------------------------------------------------------------------------------- +inline PF_Pixel16 MixPx16(PF_Pixel16 s,PF_Pixel16 d) +{ + PF_Pixel16 rr = {0,0,0,0}; + PF_Pixel16 ss = s; + PF_Pixel16 dd = d; + + 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; + + rr.alpha = (A_u_short)ad2; + rr.red = RoundShort(r); + rr.green = RoundShort(g); + rr.blue = RoundShort(b); + return rr; + } +} +//-------------------------------------------------------------------------------- +inline PF_PixelFloat MixPx32(PF_PixelFloat s,PF_PixelFloat d) +{ + PF_PixelFloat rr = {0,0,0,0}; + PF_PixelFloat ss = s; + PF_PixelFloat dd = d; + + if ( (ss.alpha == 0)||(dd.alpha==1) ) return dd; + if (dd.alpha == 0) return ss; + PF_FpLong as2 = ( 1 - dd.alpha) * ss.alpha; + PF_FpLong ad2 = dd.alpha + as2; + + if (ad2>1) ad2 = 1; + + if (ad2<=0) { + return rr; + }else{ + PF_FpLong r = ( dd.red * dd.alpha + ss.red * as2 ); + PF_FpLong g = ( dd.green * dd.alpha + ss.green * as2 ); + PF_FpLong b = ( dd.blue * dd.alpha + ss.blue * as2 ); + + r/=ad2; g/=ad2; b/=ad2; + + rr.alpha = (PF_FpShort)ad2; + rr.red = RoundFpShortDouble(r); + rr.green = RoundFpShortDouble(g); + rr.blue = RoundFpShortDouble(b); + return rr; + } +} +//-------------------------------------------------------------------------------- +PF_Err +CopyImage8 ( + refconType refcon, + A_long xL, + A_long yL, + PF_Pixel8 *inP, + PF_Pixel8 *outP) +{ + PF_Err err = PF_Err_NONE; + + copyImageInfo8 * niP = reinterpret_cast(refcon); + + if (niP){ + PF_Pixel p; + p.blue = niP->col.blue; + p.green = niP->col.green; + p.red = niP->col.red; + p.alpha = outP->alpha; + PF_Pixel pp; + pp.alpha = inP->alpha; + pp.green = inP->green; + pp.blue = inP->blue; + pp.red = inP->red; + + if ( niP->org==TRUE) p = MixPx8(pp,p); + + outP->alpha = p.alpha; + outP->red = p.red; + outP->green = p.green; + outP->blue = p.blue; + } + + return err; +} +//-------------------------------------------------------------------------------- +PF_Err +CopyImage16 ( + refconType refcon, + A_long xL, + A_long yL, + PF_Pixel16 *inP, + PF_Pixel16 *outP) +{ + PF_Err err = PF_Err_NONE; + + copyImageInfo16 * niP = reinterpret_cast(refcon); + + if (niP){ + PF_Pixel16 p; + p.blue = niP->col.blue; + p.green = niP->col.green; + p.red = niP->col.red; + p.alpha = outP->alpha; + PF_Pixel16 pp; + pp.alpha = inP->alpha; + pp.green = inP->green; + pp.blue = inP->blue; + pp.red = inP->red; + + if ( niP->org==TRUE) p = MixPx16(pp,p); + + outP->alpha = p.alpha; + outP->red = p.red; + outP->green = p.green; + outP->blue = p.blue; + } + + return err; +} +//-------------------------------------------------------------------------------- +PF_Err +CopyImage32 ( + refconType refcon, + A_long xL, + A_long yL, + PF_PixelFloat *inP, + PF_PixelFloat *outP) +{ + PF_Err err = PF_Err_NONE; + + copyImageInfo32 * niP = reinterpret_cast(refcon); + + if (niP){ + PF_PixelFloat p; + p.blue = niP->col.blue; + p.green = niP->col.green; + p.red = niP->col.red; + p.alpha = outP->alpha; + PF_PixelFloat pp; + pp.alpha = inP->alpha; + pp.green = inP->green; + pp.blue = inP->blue; + pp.red = inP->red; + + if ( niP->org==TRUE) p = MixPx32(pp,p); + + outP->alpha = p.alpha; + outP->red = p.red; + outP->green = p.green; + outP->blue = p.blue; + } + + return err; +} +//-------------------------------------------------------------------------------- diff --git a/TouchDrawStraght/FsTDFindTarget.cpp b/TouchDrawStraght/FsTDFindTarget.cpp new file mode 100644 index 0000000..9fc45df --- /dev/null +++ b/TouchDrawStraght/FsTDFindTarget.cpp @@ -0,0 +1,390 @@ +#include "TouchDrawStraght.h" + + + +//#define TARGET_COLOR green +#define TARGET_COLOR blue + + +typedef struct { + PF_Pixel targetColor; + A_u_char lv; + A_long count; +} FindTargetColorParam8; +typedef struct { + PF_Pixel targetColor; + A_u_short lv; + A_long count; +} FindTargetColorParam16; +typedef struct { + PF_Pixel targetColor; + PF_FpShort lv; + A_long count; +} FindTargetColorParam32; + + +typedef struct { + A_long table[10]; + A_long width; + A_long height; + A_long count; +} FindEdgeParam; + +//************************************************************************************************* +//ターゲットと同じ色を探してredにフラグを立てる +//************************************************************************************************* +//------------------------------------------------------------------------------------------------- +static PF_Err +FindTargetColorSub8 ( + refconType refcon, + A_long xL, + A_long yL, + PF_Pixel8 *inP, + PF_Pixel8 *outP) +{ + PF_Err err = PF_Err_NONE; + FindTargetColorParam8 * infoP = reinterpret_cast(refcon); + if ( compPix8Lv(*inP,infoP->targetColor,infoP->lv)==TRUE){ + outP->red = PF_MAX_CHAN8; + infoP->count++; + }else{ + outP->red = 0; + } + return err; +} +//------------------------------------------------------------------------------------------------- +static PF_Err +FindTargetColorSub16 ( + refconType refcon, + A_long xL, + A_long yL, + PF_Pixel16 *inP, + PF_Pixel16 *outP) +{ + PF_Err err = PF_Err_NONE; + FindTargetColorParam8 * infoP = reinterpret_cast(refcon); + if ( compPix8Lv(CONV16TO8( *inP),infoP->targetColor,infoP->lv)==TRUE){ + outP->red = PF_MAX_CHAN16; + infoP->count++; + }else{ + outP->red = 0; + } + + + return err; +} +//------------------------------------------------------------------------------------------------- +static PF_Err +FindTargetColorSub32 ( + refconType refcon, + A_long xL, + A_long yL, + PF_PixelFloat *inP, + PF_PixelFloat *outP) +{ + PF_Err err = PF_Err_NONE; + FindTargetColorParam8 * infoP = reinterpret_cast(refcon); + if ( compPix8Lv(CONV32TO8(*inP),infoP->targetColor,infoP->lv)==TRUE){ + outP->red = 1; + infoP->count++; + }else{ + outP->red = 0; + } + + + return err; +} +//------------------------------------------------------------------------------------------------- +PF_Err FindTargetColor8(CFsAE *ae , PF_Pixel target_color,A_long color_range ,A_long *count) +{ + PF_Err err = PF_Err_NONE; + FindTargetColorParam8 info; + info.count = 0; + info.targetColor = target_color; + info.lv = RoundByteLong( PF_MAX_CHAN8 * color_range >> 16); + err = ae->iterate8( (refconType)&info,FindTargetColorSub8); + if ( !err){ + *count = info.count; + }else{ + *count = 0; + } + return err; +} +//------------------------------------------------------------------------------------------------- +PF_Err FindTargetColor16(CFsAE *ae , PF_Pixel target_color,A_long color_range ,A_long *count) +{ + PF_Err err = PF_Err_NONE; + FindTargetColorParam8 info; + info.count = 0; + info.targetColor = target_color; + info.lv = RoundByteLong( PF_MAX_CHAN8 * color_range >> 16); + err = ae->iterate16((refconType)&info,FindTargetColorSub16); + if ( !err){ + *count = info.count; + }else{ + *count = 0; + } + return err; +} +//------------------------------------------------------------------------------------------------- +PF_Err FindTargetColor32(CFsAE *ae , PF_Pixel target_color,A_long color_range ,A_long *count) +{ + PF_Err err = PF_Err_NONE; + FindTargetColorParam8 info; + info.count = 0; + info.targetColor = target_color; + info.lv = RoundByteLong( PF_MAX_CHAN8 * color_range >> 16); + err = ae->iterate32( (refconType)&info,FindTargetColorSub32); + if ( !err){ + *count = info.count; + }else{ + *count = 0; + } + return err; +} +//************************************************************************************************* +//redを見てエッジを抽出 blueにフラグ +//************************************************************************************************* +//------------------------------------------------------------------------------------------------- +static PF_Err +FindEdgeSub8 ( + refconType refcon, + A_long xL, + A_long yL, + PF_Pixel8 *inP, + PF_Pixel8 *outP) +{ + PF_Err err = PF_Err_NONE; + FindEdgeParam * infoP = reinterpret_cast(refcon); + + A_u_char mx = PF_MAX_CHAN8; + if ( outP->red < mx){ + outP->alpha = 0; + }else{ + PF_Boolean r = TRUE; + if ((xL>=1)&&(yL>=1)) + if (outP[infoP->table[0]].red < mx) r = FALSE; + if (r==TRUE) if (yL>=1) + if (outP[infoP->table[1]].red < mx) r = FALSE; + if ( r == TRUE) if ((xL<=infoP->width)&&(yL>=1)) + if (outP[infoP->table[2]].red < mx) r = FALSE; + if ( r == TRUE) if (xL>=1) + if (outP[infoP->table[3]].red < mx) r = FALSE; + if ( r == TRUE) if (xL<=infoP->width) + if (outP[infoP->table[5]].red < mx) r = FALSE; + if ( r == TRUE) if ((xL>=1)&&(yL<=infoP->height)) + if (outP[infoP->table[6]].red < mx) r = FALSE; + if ( r == TRUE) if (yL<=infoP->height) + if (outP[infoP->table[7]].red != mx) r = FALSE; + if ( r == TRUE) if ((xL<=infoP->width)&&(yL<=infoP->height)) + if (outP[infoP->table[8]].red < mx) r = FALSE; + + if( r==TRUE) + outP->TARGET_COLOR = 0; + else { + outP->TARGET_COLOR = mx; + infoP->count++; + } + } + + return err; +} +//------------------------------------------------------------------------------------------------- +static PF_Err +FindEdgeSub16 ( + refconType refcon, + A_long xL, + A_long yL, + PF_Pixel16 *inP, + PF_Pixel16 *outP) +{ + PF_Err err = PF_Err_NONE; + FindEdgeParam * infoP = reinterpret_cast(refcon); + + A_u_short mx = PF_MAX_CHAN16; + if ( outP->red < mx){ + outP->alpha = 0; + }else{ + PF_Boolean r = TRUE; + if ((xL>=1)&&(yL>=1)) + if (outP[infoP->table[0]].red < mx) r = FALSE; + if (r==TRUE) if (yL>=1) + if (outP[infoP->table[1]].red < mx) r = FALSE; + if ( r == TRUE) if ((xL<=infoP->width)&&(yL>=1)) + if (outP[infoP->table[2]].red < mx) r = FALSE; + if ( r == TRUE) if (xL>=1) + if (outP[infoP->table[3]].red < mx) r = FALSE; + if ( r == TRUE) if (xL<=infoP->width) + if (outP[infoP->table[5]].red < mx) r = FALSE; + if ( r == TRUE) if ((xL>=1)&&(yL<=infoP->height)) + if (outP[infoP->table[6]].red < mx) r = FALSE; + if ( r == TRUE) if (yL<=infoP->height) + if (outP[infoP->table[7]].red < mx) r = FALSE; + if ( r == TRUE) if ((xL<=infoP->width)&&(yL<=infoP->height)) + if (outP[infoP->table[8]].red < mx) r = FALSE; + + if( r==TRUE) + outP->TARGET_COLOR = 0; + else { + outP->TARGET_COLOR = mx; + infoP->count++; + } + } + + return err; +} +//------------------------------------------------------------------------------------------------- +static PF_Err +FindEdgeSub32 ( + refconType refcon, + A_long xL, + A_long yL, + PF_PixelFloat *inP, + PF_PixelFloat *outP) +{ + PF_Err err = PF_Err_NONE; + FindEdgeParam * infoP = reinterpret_cast(refcon); + + PF_FpShort mx = 1; + if ( outP->red != mx){ + outP->alpha = 0; + }else{ + PF_Boolean r = TRUE; + if ((xL>=1)&&(yL>=1)) + if (outP[infoP->table[0]].red < mx) r = FALSE; + if (r==TRUE) if (yL>=1) + if (outP[infoP->table[1]].red < mx) r = FALSE; + if ( r == TRUE) if ((xL<=infoP->width)&&(yL>=1)) + if (outP[infoP->table[2]].red < mx) r = FALSE; + if ( r == TRUE) if (xL>=1) + if (outP[infoP->table[3]].red < mx) r = FALSE; + if ( r == TRUE) if (xL<=infoP->width) + if (outP[infoP->table[5]].red < mx) r = FALSE; + if ( r == TRUE) if ((xL>=1)&&(yL<=infoP->height)) + if (outP[infoP->table[6]].red < mx) r = FALSE; + if ( r == TRUE) if (yL<=infoP->height) + if (outP[infoP->table[7]].red < mx) r = FALSE; + if ( r == TRUE) if ((xL<=infoP->width)&&(yL<=infoP->height)) + if (outP[infoP->table[8]].red < mx) r = FALSE; + + if( r==TRUE) + outP->TARGET_COLOR = 0; + else { + outP->TARGET_COLOR = mx; + infoP->count++; + } + } + + return err; +} +//------------------------------------------------------------------------------------------------- +PF_Err FindEdge8(CFsAE *ae ,A_long *count) +{ + PF_Err err = PF_Err_NONE; + FindEdgeParam info; + info.width = ae->out->width()-2; + info.height = ae->out->height()-2; + info.count = 0; + + info.table[0] = -1 -ae->out->widthTrue(); + info.table[1] = 0 -ae->out->widthTrue(); + info.table[2] = 1 -ae->out->widthTrue(); + info.table[3] = -1 ; + info.table[4] = 0 ; + info.table[5] = 1 ; + info.table[6] = -1 +ae->out->widthTrue(); + info.table[7] = 0 +ae->out->widthTrue(); + info.table[8] = 1 +ae->out->widthTrue(); + err = ae->iterate8((refconType) &info,FindEdgeSub8); + if ( !err){ + *count = info.count; + }else{ + *count = 0; + } + return err; +} +//------------------------------------------------------------------------------------------------- +PF_Err FindEdge16(CFsAE *ae , A_long *count) +{ + PF_Err err = PF_Err_NONE; + FindEdgeParam info; + info.width = ae->out->width()-2; + info.height = ae->out->height()-2; + info.count = 0; + + info.table[0] = -1 -ae->out->widthTrue(); + info.table[1] = 0 -ae->out->widthTrue(); + info.table[2] = 1 -ae->out->widthTrue(); + info.table[3] = -1 ; + info.table[4] = 0 ; + info.table[5] = 1 ; + info.table[6] = -1 +ae->out->widthTrue(); + info.table[7] = 0 +ae->out->widthTrue(); + info.table[8] = 1 +ae->out->widthTrue(); + err = ae->iterate16((refconType)&info,FindEdgeSub16); + if ( !err){ + *count = info.count; + }else{ + *count = 0; + } + return err; +} +//------------------------------------------------------------------------------------------------- +PF_Err FindEdge32(CFsAE *ae ,A_long *count) +{ + PF_Err err = PF_Err_NONE; + FindEdgeParam info; + info.width = ae->out->width()-2; + info.height = ae->out->height()-2; + info.count = 0; + + info.table[0] = -1 -ae->out->widthTrue(); + info.table[1] = 0 -ae->out->widthTrue(); + info.table[2] = 1 -ae->out->widthTrue(); + info.table[3] = -1 ; + info.table[4] = 0 ; + info.table[5] = 1 ; + info.table[6] = -1 +ae->out->widthTrue(); + info.table[7] = 0 +ae->out->widthTrue(); + info.table[8] = 1 +ae->out->widthTrue(); + err = ae->iterate32((refconType)&info,FindEdgeSub32); + if ( !err){ + *count = info.count; + }else{ + *count = 0; + } + return err; +} +//------------------------------------------------------------------------------------------------- +//------------------------------------------------------------------------------------------------- +//------------------------------------------------------------------------------------------------- +PF_Err FindTarget(CFsAE *ae , PF_Pixel target_color, A_long color_range) +{ + PF_Err err = PF_Err_NONE; + A_long count = 0; + switch(ae->pixelFormat()) + { + case PF_PixelFormat_ARGB128: + FindTargetColor32(ae,target_color,color_range,&count); + if (count>0) + FindEdge32(ae,&count); + else + ae->out->clear(); + break; + case PF_PixelFormat_ARGB64: + FindTargetColor16(ae,target_color,color_range,&count); + if (count>0) + FindEdge16(ae,&count); + else + ae->out->clear(); + break; + case PF_PixelFormat_ARGB32: + FindTargetColor8(ae,target_color,color_range,&count); + if (count>0) + FindEdge8(ae,&count); + else + ae->out->clear(); + break; + } + return err; +} diff --git a/TouchDrawStraght/FsTDFindTargetDelta.cpp b/TouchDrawStraght/FsTDFindTargetDelta.cpp new file mode 100644 index 0000000..077a61b --- /dev/null +++ b/TouchDrawStraght/FsTDFindTargetDelta.cpp @@ -0,0 +1,280 @@ +#include "TouchDrawStraght.h" + + + +typedef struct { + A_long widthTrue; + A_long width; + A_long height; + A_long lv; + PF_Boolean isAlpha; +} DeltaSubParam; + +//#define TARGET_DELTA green +#define TARGET_DELTA blue +//------------------------------------------------------------------------------------------------- +inline A_long SubtrucPixelAlpha8(PF_Pixel s, PF_Pixel d) +{ + return (A_long)F_ABS(s.alpha - d.alpha); +} +//------------------------------------------------------------------------------------------------- +inline A_long SubtrucPixelAlpha16(PF_Pixel16 s, PF_Pixel16 d) +{ + return (A_long)FS_CONVERT16TO8(F_ABS(s.alpha - d.alpha)); +} +//------------------------------------------------------------------------------------------------- +inline A_long SubtrucPixelAlpha32(PF_PixelFloat s, PF_PixelFloat d) +{ + return FS_CONVERT32TO8(PF_MAX_CHAN8 * F_ABS(s.alpha - d.alpha)); +} +//------------------------------------------------------------------------------------------------- +inline A_long SubtrucPixel8(PF_Pixel s, PF_Pixel d) +{ + A_long v =0; + /* + v += F_ABS(s.red *s.alpha/PF_MAX_CHAN8 - d.red *d.alpha/PF_MAX_CHAN8); + v += F_ABS(s.green*s.alpha/PF_MAX_CHAN8 - d.green*d.alpha/PF_MAX_CHAN8); + v += F_ABS(s.blue *s.alpha/PF_MAX_CHAN8 - d.blue *d.alpha/PF_MAX_CHAN8); + */ + v += F_ABS(s.red *s.alpha - d.red *d.alpha)/PF_MAX_CHAN8; + v += F_ABS(s.green*s.alpha - d.green*d.alpha)/PF_MAX_CHAN8; + v += F_ABS(s.blue *s.alpha - d.blue *d.alpha)/PF_MAX_CHAN8; + + v = v/3; + if ( v>PF_MAX_CHAN8) v = PF_MAX_CHAN8; + return (A_long)v; +} +//------------------------------------------------------------------------------------------------- +inline A_long SubtrucPixel16(PF_Pixel16 s, PF_Pixel16 d) +{ + A_long v =0; + v += F_ABS(s.red*s.alpha/PF_MAX_CHAN16 - d.red*d.alpha/PF_MAX_CHAN16); + v += F_ABS(s.green*s.alpha/PF_MAX_CHAN16 - d.green*d.alpha/PF_MAX_CHAN16); + v += F_ABS(s.blue*s.alpha/PF_MAX_CHAN16 - d.blue*d.alpha/PF_MAX_CHAN16); + + v = FS_CONVERT16TO8(v/3); + if ( v>PF_MAX_CHAN8) v = PF_MAX_CHAN8; + return (A_long)v; +} +//------------------------------------------------------------------------------------------------- +inline A_long SubtrucPixel32(PF_PixelFloat s, PF_PixelFloat d) +{ + PF_FpLong v =0; + PF_FpLong a =0; + + a = F_ABS(s.red*s.alpha - d.red*d.alpha); + if ( a>1) a = 1; + v +=a; + + a = F_ABS(s.green*s.alpha - d.green*d.alpha); + if ( a>1) a = 1; + v +=a; + + a = F_ABS(s.blue*s.alpha - d.blue*d.alpha); + if ( a>1) a = 1; + v +=a; + v = FS_CONVERT32TO8(v/3); + if ( v>PF_MAX_CHAN8) v = PF_MAX_CHAN8; + return (A_long)v; +} +//------------------------------------------------------------------------------------------------- +//------------------------------------------------------------------------------------------------- +static PF_Err +DeltaSub8 ( + refconType refcon, + A_long xL, + A_long yL, + PF_Pixel8 *inP, + PF_Pixel8 *outP) +{ + PF_Err err = PF_Err_NONE; + DeltaSubParam * infoP = reinterpret_cast(refcon); + + A_long v,mv,mx; + v =0; + mv =0; + mx = PF_MAX_CHAN8;//A_u_char で識別 + + if (mvwidth) { + if (infoP->isAlpha==TRUE){ + v = SubtrucPixelAlpha8(*inP, inP[1]); + }else{ + v = SubtrucPixel8(*inP, inP[1]); + } + if (mvheight) { + PF_Pixel *g = inP; + g += infoP->widthTrue; + if (infoP->isAlpha==TRUE){ + v = SubtrucPixelAlpha8(*inP, *g); + }else{ + v = SubtrucPixel8(*inP, *g); + } + if (mvblue = outP->green = outP->red = outP->alpha = 0; + if ( mv>infoP->lv){ + outP->TARGET_DELTA = PF_MAX_CHAN8; + } + return err; +} +//------------------------------------------------------------------------------------------------- +static PF_Err +DeltaSub16 ( + refconType refcon, + A_long xL, + A_long yL, + PF_Pixel16 *inP, + PF_Pixel16 *outP) +{ + PF_Err err = PF_Err_NONE; + DeltaSubParam * infoP = reinterpret_cast(refcon); + + A_long v,mv,mx; + v =0; + mv =0; + mx = PF_MAX_CHAN8;//A_u_char で識別 + + if (mvwidth) { + if (infoP->isAlpha==TRUE){ + v = SubtrucPixelAlpha16(*inP, inP[1]); + }else{ + v = SubtrucPixel16(*inP, inP[1]); + } + if (mvheight) { + if (infoP->isAlpha==TRUE){ + v = SubtrucPixelAlpha16(*inP, inP[infoP->widthTrue]); + }else{ + v = SubtrucPixel16(*inP, inP[infoP->widthTrue]); + } + if (mvinfoP->lv){ + outP->TARGET_DELTA = PF_MAX_CHAN16; + }else{ + outP->TARGET_DELTA = 0; + } + return err; +} + +//------------------------------------------------------------------------------------------------- +static PF_Err +DeltaSub32 ( + refconType refcon, + A_long xL, + A_long yL, + PF_PixelFloat *inP, + PF_PixelFloat *outP) +{ + PF_Err err = PF_Err_NONE; + DeltaSubParam * infoP = reinterpret_cast(refcon); + + A_long v,mv,mx; + v =0; + mv =0; + mx = PF_MAX_CHAN8;//A_u_char で識別 + if (mvwidth) { + if (infoP->isAlpha==TRUE){ + v = SubtrucPixelAlpha32(*inP, inP[1]); + }else{ + v = SubtrucPixel32(*inP, inP[1]); + } + if (mvheight) { + if (infoP->isAlpha==TRUE){ + v = SubtrucPixelAlpha32(*inP, inP[infoP->widthTrue]); + }else{ + v = SubtrucPixel32(*inP, inP[infoP->widthTrue]); + } + if (mvinfoP->lv){ + outP->TARGET_DELTA = 1; + }else{ + outP->TARGET_DELTA = 0; + } + return err; +} +//------------------------------------------------------------------------------------------------- +PF_Err TargetDelta_8(CFsAE *ae , A_long delta_range,PF_Boolean isMask) +{ + PF_Err err = PF_Err_NONE; + DeltaSubParam info; + info.width = ae->out->width()-2; + info.height = ae->out->height()-2; + info.lv = (A_long)(PF_MAX_CHAN8 * delta_range >> 16); + info.isAlpha = isMask; + info.widthTrue = ae->in->widthTrue(); + err = ae->iterate8((refconType)&info,DeltaSub8); + return err; +} +//------------------------------------------------------------------------------------------------- +PF_Err TargetDelta_16(CFsAE *ae , A_long delta_range,PF_Boolean isMask) +{ + PF_Err err = PF_Err_NONE; + DeltaSubParam info; + info.width = ae->out->width()-2; + info.height = ae->out->height()-2; + info.lv = (A_long)(PF_MAX_CHAN8 * delta_range >> 16); + info.isAlpha = isMask; + info.widthTrue = ae->in->widthTrue(); + err = ae->iterate16((refconType)&info,DeltaSub16); + return err; +} +//------------------------------------------------------------------------------------------------- +PF_Err TargetDelta_32(CFsAE *ae , A_long delta_range,PF_Boolean isMask) +{ + PF_Err err = PF_Err_NONE; + DeltaSubParam info; + info.width = ae->out->width()-2; + info.height = ae->out->height()-2; + info.lv = (A_long)(PF_MAX_CHAN8 * delta_range >> 16); + info.isAlpha = isMask; + info.widthTrue = ae->in->widthTrue(); + err = ae->iterate32((refconType)&info,DeltaSub32); + return err; +} +//------------------------------------------------------------------------------------------------- +PF_Err FindTargetDeltaBright(CFsAE *ae , A_long delta_range) +{ + PF_Err err = PF_Err_NONE; + switch(ae->pixelFormat()) + { + case PF_PixelFormat_ARGB128: + err = TargetDelta_32(ae,delta_range,FALSE); + break; + case PF_PixelFormat_ARGB64: + err = TargetDelta_16(ae,delta_range,FALSE); + break; + case PF_PixelFormat_ARGB32: + err = TargetDelta_8(ae,delta_range,FALSE); + break; + } + return err; +} +//------------------------------------------------------------------------------------------------- +PF_Err FindTargetDeltaAlpha(CFsAE *ae , A_long delta_range) +{ + PF_Err err = PF_Err_NONE; + switch(ae->pixelFormat()) + { + case PF_PixelFormat_ARGB128: + err = TargetDelta_32(ae,delta_range,TRUE); + break; + case PF_PixelFormat_ARGB64: + err = TargetDelta_16(ae,delta_range,TRUE); + break; + case PF_PixelFormat_ARGB32: + err = TargetDelta_8(ae,delta_range,TRUE); + break; + } + return err; +} diff --git a/TouchDrawStraght/FsTDblockDraw.cpp b/TouchDrawStraght/FsTDblockDraw.cpp new file mode 100644 index 0000000..c7d7cab --- /dev/null +++ b/TouchDrawStraght/FsTDblockDraw.cpp @@ -0,0 +1,120 @@ +#include "TouchDrawStraght.h" + +#define TARGET_CHNNEL blue + +//------------------------------------------------------------------------------- +void blockDraw8(CFsGraph *g,A_long bSize,A_long bCount) +{ + PF_Pixel *data; + data = (PF_Pixel *)g->data(); + A_long height = g->height(); + A_long width = g->width(); + A_long wt = g->widthTrue(); + A_long cnt = bCount; + A_long bs0 = bSize /2; + if (bs0<2) bs0 = 2; + A_long i,j,k; + + A_long w,h,x,y; + for (k=0; kdata(); + A_long height = g->height(); + A_long width = g->width(); + A_long wt = g->widthTrue(); + A_long cnt = bCount; + A_long bs0 = bSize /2; + if (bs0<2) bs0 = 2; + A_long i,j,k; + + A_long w,h,x,y; + for (k=0; kdata(); + A_long height = g->height(); + A_long width = g->width(); + A_long wt = g->widthTrue(); + A_long cnt = bCount; + A_long bs0 = bSize /2; + if (bs0<2) bs0 = 2; + A_long i,j,k; + + A_long w,h,x,y; + for (k=0; kpixelFormat()) + { + case PF_PixelFormat_ARGB128: + blockDraw32(ae->out,bSize,bCount); + break; + case PF_PixelFormat_ARGB64: + blockDraw16(ae->out,bSize,bCount); + break; + case PF_PixelFormat_ARGB32: + blockDraw8(ae->out,bSize,bCount); + break; + } + return err; +} diff --git a/TouchDrawStraght/FsTDcopyAlpha.cpp b/TouchDrawStraght/FsTDcopyAlpha.cpp new file mode 100644 index 0000000..91f9a52 --- /dev/null +++ b/TouchDrawStraght/FsTDcopyAlpha.cpp @@ -0,0 +1,113 @@ +#include "TouchDrawStraght.h" + + +typedef struct { + PF_Pixel color; + PF_Boolean org; +}copyAlpha8Param; +typedef struct { + PF_Pixel16 color; + PF_Boolean org; +}copyAlpha16Param; +typedef struct { + PF_PixelFloat color; + PF_Boolean org; +}copyAlpha32Param; + + +#define TARGET_CHANNEL green +//------------------------------------------------------------------------------------------------- +static PF_Err +copyAlphaSub8 ( + refconType refcon, + A_long xL, + A_long yL, + PF_Pixel8 *inP, + PF_Pixel8 *outP) +{ + PF_Err err = PF_Err_NONE; + copyAlpha8Param * infoP = reinterpret_cast(refcon); + + PF_Pixel p; + p = infoP->color; + p.alpha = outP->TARGET_CHANNEL; + if ( infoP->org){ + *outP = PixelBlend8(*inP,p); + }else{ + *outP = p; + } + + return err; +} +//------------------------------------------------------------------------------------------------- +static PF_Err +copyAlphaSub16 ( + refconType refcon, + A_long xL, + A_long yL, + PF_Pixel16 *inP, + PF_Pixel16 *outP) +{ + PF_Err err = PF_Err_NONE; + copyAlpha16Param * infoP = reinterpret_cast(refcon); + + PF_Pixel16 p; + p = infoP->color; + p.alpha = outP->TARGET_CHANNEL; + if ( infoP->org){ + *outP = PixelBlend16(*inP,p); + }else{ + *outP = p; + } + return err; +} +//------------------------------------------------------------------------------------------------- +static PF_Err +copyAlphaSub32 ( + refconType refcon, + A_long xL, + A_long yL, + PF_PixelFloat *inP, + PF_PixelFloat *outP) +{ + PF_Err err = PF_Err_NONE; + copyAlpha32Param * infoP = reinterpret_cast(refcon); + + PF_PixelFloat p; + p = infoP->color; + p.alpha = outP->TARGET_CHANNEL; + if ( infoP->org){ + *outP = PixelBlend32(*inP,p); + }else{ + *outP = p; + } + return err; +} +//------------------------------------------------------------------------------------------------- +PF_Err copyAlpha(CFsAE *ae , PF_Pixel color, PF_Boolean org) +{ + PF_Err err = PF_Err_NONE; + + switch(ae->pixelFormat()) + { + case PF_PixelFormat_ARGB128: + copyAlpha32Param cp32; + cp32.color = CONV8TO32(color); + cp32.org = org; + ERR(ae->iterate32((refconType)&cp32,copyAlphaSub32)); + break; + case PF_PixelFormat_ARGB64: + copyAlpha16Param cp16; + cp16.color = CONV8TO16(color); + cp16.org = org; + ERR(ae->iterate16((refconType)&cp16,copyAlphaSub16)); + break; + case PF_PixelFormat_ARGB32: + copyAlpha8Param cp8; + cp8.color = color; + cp8.org = org; + ERR(ae->iterate8((refconType)&cp8,copyAlphaSub8)); + break; + } + return err; +} diff --git a/TouchDrawStraght/FsTDgreenBlur.cpp b/TouchDrawStraght/FsTDgreenBlur.cpp new file mode 100644 index 0000000..e09a543 --- /dev/null +++ b/TouchDrawStraght/FsTDgreenBlur.cpp @@ -0,0 +1,549 @@ +#include "TouchDrawStraght.h" + + + +//------------------------------------------------------------------------------- +void greenBlur8(CFsGraph *g) +{ + PF_Pixel *data; + data = g->data(); + long wt = g->widthTrue(); + long ow = g->offsetWidth(); + long w = g->width(); + long h = g->height(); + + long x,y; + long v; + w = g->width()-1; + h = g->height()-1; + + //まず、真ん中 + A_long adr=wt+1; + A_long adr2; + for(y=1;y> 5; + data[adr].alpha = RoundByteLong(v); + + adr++; + } + adr+=(ow+2); + } + //上下 + adr = 1; + long adrH = h*wt+1; + for(x=1;xdata(); + long wt = g->widthTrue(); + long ow = g->offsetWidth(); + long w = g->width(); + long h = g->height(); + + long x,y; + long v; + w = g->width()-1; + h = g->height()-1; + + //まず、真ん中 + long adr=wt+1; + long adr2; + + for(y=1;y> 5; + data[adr].alpha = RoundShort(v); + + adr++; + } + adr+=(ow+2); + } + + //上下 + adr = 1; + long adrH = h*wt+1; + for(x=1;xdata(); + long wt = g->widthTrue(); + long ow = g->offsetWidth(); + long w = g->width(); + long h = g->height(); + + long x,y; + PF_FpLong v; + w = g->width()-1; + h = g->height()-1; + + //まず、真ん中 + long adr=wt+1; + long adr2; + + for(y=1;ypixelFormat()) + { + case PF_PixelFormat_ARGB128: + greenBlur32(ae->out); + break; + case PF_PixelFormat_ARGB64: + greenBlur16(ae->out); + break; + case PF_PixelFormat_ARGB32: + greenBlur8(ae->out); + break; + default: + err = PF_Err_BAD_CALLBACK_PARAM; + break; + } + return err; +} diff --git a/TouchDrawStraght/FsTDpset.h b/TouchDrawStraght/FsTDpset.h new file mode 100644 index 0000000..010308d --- /dev/null +++ b/TouchDrawStraght/FsTDpset.h @@ -0,0 +1,293 @@ + +#pragma once + +#ifndef FSTDPSET_H +#define FSTDPSET_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/FsUtils.h" + + + +typedef struct { + PF_PixelPtr data; + A_long width; + A_long height; + A_long widthTrue; + A_long widthOffset; + PF_FixedPoint pos; + PF_Fixed opacity; +} PsetPrm; + + + +//------------------------------------------------------- +inline A_u_char mixCh8(A_long c0, A_long c1) +{ + return RoundByteLong(c0 + c1 - (c0 * c1 >>8)); +} +//------------------------------------------------------- +inline A_u_short mixCh16(A_long c0, A_long c1) +{ + A_long v = c0 + c1 - (c0 * c1 >>16); + if (v<0) { v=0; }else if(v>PF_MAX_CHAN16){v = PF_MAX_CHAN16;} + return (A_u_short)v; +} +//------------------------------------------------------- +inline PF_FpShort mixCh32(PF_FpShort c0, PF_FpShort c1) +{ + PF_FpShort v = c0 + c1 - (c0 * c1); + if (v<0) { v=0; } + return v; +} + +//------------------------------------------------------- +/* + アルファーへ書き込み +*/ +inline PF_Boolean PsetAlpha8(PsetPrm *prm) +{ + PF_Boolean ret = FALSE; + PF_Fixed opacity = prm->opacity; + if (opacity<=0) opacity = 0; + if (opacity>(1L<<16)) opacity = 1L<<16; + A_long v = PF_MAX_CHAN8 * opacity >> 16; + if (v<=0) return ret; + + PF_Pixel *data; + data = (PF_Pixel *)prm->data; + PF_FixedPoint pos = prm->pos; + A_long w = prm->width; + A_long wt = prm->widthTrue; + A_long h = prm->height; + A_long x1,y1,x2,y2; + + + x1 = prm->pos.x >> 16; + y1 = prm->pos.y >> 16; + x2 = x1+1; + y2 = y1+1; + + if ( (x1>=w)||(y1>=h)||(x2<0)||(y2<0) ) return ret; + + PF_FpShort xx2,yy2,xx1,yy1; + xx2 = (PF_FpShort)(prm->pos.x & 0xFFFF)/65536; + yy2 = (PF_FpShort)(prm->pos.y & 0xFFFF)/65536; + xx1 = (PF_FpShort)1 - xx2; + yy1 = (PF_FpShort)1 - yy2; + + A_long vv; + A_long target = x1 + (y1 * wt); + //まず、ぴったりの時 + if ( (xx2 == 0)&&(yy2 == 0) ) { + if ( (x1>=0)&&(y1>=0) ) { + data[target].green = mixCh8(data[target].green,v); + ret = TRUE; + } + }else{ + //まず左上 + if ( ((x1>=0)&&(y1>=0)) == TRUE){ + vv = (A_long)( (PF_FpShort)v * xx1 * yy1); + data[target].green = mixCh8(data[target].green,vv); + ret = TRUE; + } + //右上 + target++; + if ( ((x2=0)) == TRUE){ + vv = (A_long)( (PF_FpShort)v * xx2 * yy1); + data[target].green = mixCh8(data[target].green,vv); + ret = TRUE; + } + //右下 + target+= wt; + if ( ((x2=0)&&(y2opacity; + if (opacity<=0) opacity = 0; + if (opacity>(1L<<16)) opacity = 1L<<16; + A_long v = PF_MAX_CHAN16 * opacity >> 16; + if (v<=0) return ret; + + PF_Pixel16 *data; + data = (PF_Pixel16 *)prm->data; + PF_FixedPoint pos = prm->pos; + A_long w = prm->width; + A_long wt = prm->widthTrue; + A_long h = prm->height; + A_long x1,y1,x2,y2; + + + x1 = prm->pos.x >> 16; + y1 = prm->pos.y >> 16; + x2 = x1+1; + y2 = y1+1; + + if ( (x1>=w)||(y1>=h)||(x2<0)||(y2<0) ) return ret; + + PF_FpShort xx2,yy2,xx1,yy1; + xx2 = (PF_FpShort)(prm->pos.x & 0xFFFF)/65536; + yy2 = (PF_FpShort)(prm->pos.y & 0xFFFF)/65536; + xx1 = (PF_FpShort)1 - xx2; + yy1 = (PF_FpShort)1 - yy2; + + A_long vv; + A_long target = x1 + (y1 * wt); + //まず、ぴったりの時 + if ( (xx2 == 0)&&(yy2 == 0) ) { + if ( (x1>=0)&&(y1>=0) ) { + data[target].green = mixCh16(data[target].green,v); + ret = TRUE; + } + }else{ + //まず左上 + if ( ((x1>=0)&&(y1>=0)) == TRUE){ + vv = (A_long)( (PF_FpShort)v * xx1 * yy1); + data[target].green = mixCh16(data[target].green,vv); + ret = TRUE; + } + //右上 + target++; + if ( ((x2=0)) == TRUE){ + vv = (A_long)( (PF_FpShort)v * xx2 * yy1); + data[target].green = mixCh16(data[target].green,vv); + ret = TRUE; + } + //右下 + target+= wt; + if ( ((x2=0)&&(y2opacity/65536; + if (v<=0) v = 0; + if (v<=0) return ret; + + PF_PixelFloat *data; + data = (PF_PixelFloat *)prm->data; + PF_FixedPoint pos = prm->pos; + A_long w = prm->width; + A_long wt = prm->widthTrue; + A_long h = prm->height; + A_long x1,y1,x2,y2; + + PF_FpShort xx2,yy2,xx1,yy1; + + x1 = prm->pos.x >> 16; + y1 = prm->pos.y >> 16; + + + + x2 = x1+1; + y2 = y1+1; + xx2 = (PF_FpShort)(prm->pos.x & 0xFFFF)/65536; + yy2 = (PF_FpShort)(prm->pos.y & 0xFFFF)/65536; + xx1 = 1 - xx2; + yy1 = 1 - yy2; + + if ( (x1>=w)||(y1>=h)||(x2<0)||(y2<0) ) return ret; + + + PF_FpShort vv; + long target = x1 + (y1 * wt); + //まず、ぴったりの時 + if ( (xx2 == 0)&&(yy2 == 0) ) { + if ( (x1>=0)&&(y1>=0) ) { + data[target].green = mixCh32(data[target].green,v); + ret = TRUE; + } + }else{ + //まず左上 + if ( ((x1>=0)&&(y1>=0)) == TRUE){ + vv = v * xx1 * yy1; + data[target].green = mixCh32(data[target].green,vv); + ret = TRUE; + } + //右上 + target++; + if ( ((x2=0)) == TRUE){ + vv = v * xx2 * yy1; + data[target].green = mixCh32(data[target].green,vv); + ret = TRUE; + } + //右下 + target+= wt; + if ( ((x2=0)&&(y2 +#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, + 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 +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/TouchDrawStraght/Fs_Target.h b/TouchDrawStraght/Fs_Target.h new file mode 100644 index 0000000..e566cb0 --- /dev/null +++ b/TouchDrawStraght/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 TouchDrawStraght" + +//----------------------------------------------------------------------------------- +//プラグインの説明に使われる文字 +#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/TouchDrawStraght/TouchDrawStraght.cpp b/TouchDrawStraght/TouchDrawStraght.cpp new file mode 100644 index 0000000..9b44da7 --- /dev/null +++ b/TouchDrawStraght/TouchDrawStraght.cpp @@ -0,0 +1,430 @@ +//----------------------------------------------------------------------------------- +/* + F's Plugins for VS2010/VS2012 +*/ +//----------------------------------------------------------------------------------- + +#include "TouchDrawStraght.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_SEED, //パラメータの名前 + 0, //数値入力する場合の最小値 + 32000, //数値入力する場合の最大値 + 0, //スライダーの最小値 + 144, //スライダーの最大値 + 0, //デフォルトの値 + ID_SEED + ); + + //---------------------------------------------------------------- + //固定小数のスライダーバー + AEFX_CLR_STRUCT(def); + PF_ADD_FIXED( STR_TARGET_VALUE, //パラメータの名前 + 0, //数値入力する場合の最小値 + 100, //数値入力する場合の最大値 + 0, //スライダーの最小値 + 25, //スライダーの最大値 + 5, //デフォルトの値 + 1, //数値表示に関するフラグ + 0, + 0, + ID_TARGET_VALUE + ); + //---------------------------------------------------------------- + AEFX_CLR_STRUCT(def); + def.flags = PF_ParamFlag_START_COLLAPSED; + PF_ADD_TOPIC(STR_TARGET_TOPIC, ID_TARGRT_TOPIC); + //---------------------------------------------------------------- + //ポップアップメニュー + AEFX_CLR_STRUCT(def); + PF_ADD_POPUP( STR_TARGET_MODE1, + 3, //メニューの数 + 2, //デフォルト + STR_TARGET_MODE2, + ID_TARGET_MODE + ); + //---------------------------------------------------------------- + //色の指定 + AEFX_CLR_STRUCT(def); + PF_ADD_COLOR( STR_TARGET_COLOR, + 0x00, + 0x00, + 0x00, + ID_TARGET_COLOR + ); + //---------------------------------------------------------------- + //固定小数のスライダーバー + AEFX_CLR_STRUCT(def); + PF_ADD_FIXED( STR_COLOR_RANGE, //パラメータの名前 + 0, //数値入力する場合の最小値 + 100, //数値入力する場合の最大値 + 0, //スライダーの最小値 + 25, //スライダーの最大値 + 0, //デフォルトの値 + 1, //数値表示に関するフラグ + 0, + 0, + ID_COLOR_RANGE + ); + //---------------------------------------------------------------- + //固定小数のスライダーバー + AEFX_CLR_STRUCT(def); + PF_ADD_FIXED( STR_DELTA_RANGE, //パラメータの名前 + 0, //数値入力する場合の最小値 + 100, //数値入力する場合の最大値 + 0, //スライダーの最小値 + 90, //スライダーの最大値 + 50, //デフォルトの値 + 1, //数値表示に関するフラグ + 0, + 0, + ID_DELTA_RANGE + ); + //---------------------------------------------------------------- + AEFX_CLR_STRUCT(def); + PF_END_TOPIC(ID_TARGRT_TOPIC_END); + //---------------------------------------------------------------- + AEFX_CLR_STRUCT(def); + PF_ADD_ANGLE(STR_ROT,45,ID_ROT); + //---------------------------------------------------------------- + AEFX_CLR_STRUCT(def); + PF_ADD_SLIDER( STR_LENGTH_I_MAX, //パラメータの名前 + 0, //数値入力する場合の最小値 + 32000, //数値入力する場合の最大値 + 0, //スライダーの最小値 + 200, //スライダーの最大値 + 30, //デフォルトの値 + ID_LENGTH_I_MAX + ); + + //---------------------------------------------------------------- + //固定小数のスライダーバー + AEFX_CLR_STRUCT(def); + PF_ADD_FIXED( STR_LENGTH_I_RND, //パラメータの名前 + 0, //数値入力する場合の最小値 + 100, //数値入力する場合の最大値 + 0, //スライダーの最小値 + 100, //スライダーの最大値 + 50, //デフォルトの値 + 1, //数値表示に関するフラグ + 0, + 0, + ID_LENGTH_I_RND + ); + //---------------------------------------------------------------- + AEFX_CLR_STRUCT(def); + PF_ADD_SLIDER( STR_LENGTH_O_MAX, //パラメータの名前 + 0, //数値入力する場合の最小値 + 32000, //数値入力する場合の最大値 + 0, //スライダーの最小値 + 200, //スライダーの最大値 + 15, //デフォルトの値 + ID_LENGTH_O_MAX + ); + //---------------------------------------------------------------- + //固定小数のスライダーバー + AEFX_CLR_STRUCT(def); + PF_ADD_FIXED( STR_LENGTH_O_RND, //パラメータの名前 + 0, //数値入力する場合の最小値 + 100, //数値入力する場合の最大値 + 0, //スライダーの最小値 + 100, //スライダーの最大値 + 50, //デフォルトの値 + 1, //数値表示に関するフラグ + 0, + 0, + ID_LENGTH_O_RND + ); + //---------------------------------------------------------------- + //色の指定 + AEFX_CLR_STRUCT(def); + PF_ADD_COLOR( STR_COLOR, + 0x00, + 0x00, + 0x00, + ID_COLOR + ); + //---------------------------------------------------------------- + //固定小数のスライダーバー + AEFX_CLR_STRUCT(def); + PF_ADD_FIXED( STR_OPACITY, //パラメータの名前 + 0, //数値入力する場合の最小値 + 100, //数値入力する場合の最大値 + 0, //スライダーの最小値 + 100, //スライダーの最大値 + 100, //デフォルトの値 + 1, //数値表示に関するフラグ + 0, + 0, + ID_OPACITY + ); + //---------------------------------------------------------------- + //固定小数のスライダーバー + AEFX_CLR_STRUCT(def); + PF_ADD_FIXED( STR_OPACITY_RND, //パラメータの名前 + 0, //数値入力する場合の最小値 + 100, //数値入力する場合の最大値 + 0, //スライダーの最小値 + 100, //スライダーの最大値 + 50, //デフォルトの値 + 1, //数値表示に関するフラグ + 0, + 0, + ID_OPACITY_RND + ); + //---------------------------------------------------------------- + //整数のスライダーバー + AEFX_CLR_STRUCT(def); + PF_ADD_SLIDER( STR_POINT_COUNT, //パラメータの名前 + 0, //数値入力する場合の最小値 + 100, //数値入力する場合の最大値 + 0, //スライダーの最小値 + 10, //スライダーの最大値 + 2, //デフォルトの値 + ID_POINT_COUNT + ); + //---------------------------------------------------------------- + //固定小数のスライダーバー + AEFX_CLR_STRUCT(def); + PF_ADD_FIXED( STR_POINT_LENGTH, //パラメータの名前 + 0, //数値入力する場合の最小値 + 300, //数値入力する場合の最大値 + 0, //スライダーの最小値 + 10, //スライダーの最大値 + 1, //デフォルトの値 + 1, //数値表示に関するフラグ + 0, + 0, + ID_POINT_LENGTH + ); + + //---------------------------------------------------------------- + //固定小数のスライダーバー + AEFX_CLR_STRUCT(def); + PF_ADD_FIXED( STR_BLOCK_VALUE, //パラメータの名前 + 0, //数値入力する場合の最小値 + 300, //数値入力する場合の最大値 + 0, //スライダーの最小値 + 100, //スライダーの最大値 + 50, //デフォルトの値 + 1, //数値表示に関するフラグ + 0, + 0, + ID_BLOCK_VALUE + ); + //---------------------------------------------------------------- + //整数のスライダーバー + AEFX_CLR_STRUCT(def); + PF_ADD_SLIDER( STR_BLOCK_SIZE, //パラメータの名前 + 8, //数値入力する場合の最小値 + 128, //数値入力する場合の最大値 + 8, //スライダーの最小値 + 64, //スライダーの最大値 + 2, //デフォルトの値 + ID_BLOCK_SIZE + ); + + //---------------------------------------------------------------- + //チェックボックス + AEFX_CLR_STRUCT(def); + PF_ADD_CHECKBOX(STR_ORG_CB1, + STR_ORG_CB2, + TRUE, + 0, + ID_ORG + ); + //---------------------------------------------------------------- + out_data->num_params = ID_NUM_PARAMS; + + return err; +} +//------------------------------------------------------------------------------------------------- +static PF_Err GetParams(CFsAE *ae, ParamInfo *infoP) +{ + PF_Err err = PF_Err_NONE; + //----------------------- + ERR(ae->GetADD(ID_SEED,&infoP->seed)); + ERR(ae->GetFIXED_PER2ONE(ID_TARGET_VALUE,&infoP->target_value)); + ERR(ae->GetPOPUP(ID_TARGET_MODE,&infoP->target_mode)); + ERR(ae->GetCOLOR(ID_TARGET_COLOR,&infoP->target_color)); + ERR(ae->GetFIXED_PER2ONE(ID_COLOR_RANGE,&infoP->color_range)); + ERR(ae->GetFIXED_PER2ONE(ID_DELTA_RANGE,&infoP->delta_range)); + + ERR(ae->GetANGLE(ID_ROT,&infoP->rot)); + if (!err){ + infoP->rot %= 360L<<16; + if ( infoP->rot<0) infoP->rot += 360L<<16; + } + + ERR(ae->GetADD(ID_LENGTH_I_MAX,&infoP->length_i_max)); + ERR(ae->GetFIXED_PER2ONE(ID_LENGTH_I_RND,&infoP->length_i_rnd)); + ERR(ae->GetADD(ID_LENGTH_O_MAX,&infoP->length_o_max)); + ERR(ae->GetFIXED_PER2ONE(ID_LENGTH_O_RND,&infoP->length_o_rnd)); + + ERR(ae->GetCOLOR(ID_COLOR,&infoP->color)); + ERR(ae->GetFIXED_PER2ONE(ID_OPACITY,&infoP->opacity)); + ERR(ae->GetFIXED_PER2ONE(ID_OPACITY_RND,&infoP->opacity_rnd)); + + ERR(ae->GetADD(ID_POINT_COUNT,&infoP->point_count)); + ERR(ae->GetFIXED(ID_POINT_LENGTH,&infoP->point_length)); + if (!err) { + infoP->point_length = ae->downScaleNoClip(infoP->point_length); + infoP->point_length += (1L<<16); + } + infoP->target_count = 0; + + + ERR(ae->GetFIXED_PER2ONE(ID_BLOCK_VALUE,&infoP->block_value)); + ERR(ae->GetADD(ID_BLOCK_SIZE,&infoP->block_size)); + if (!err) { + infoP->block_size = ae->downScaleNoClip(infoP->block_size); + if ( infoP->block_size<2) infoP->block_size = 2; + } + + A_long pW = ae->in_data->width; + A_long pH = ae->in_data->height; + if ((pW % infoP->block_size)!=0) { pW = pW/infoP->block_size +1;}else{pW = pW/infoP->block_size;} + if ((pH % infoP->block_size)!=0) { pH = pH/infoP->block_size +1;}else{pH = pH/infoP->block_size;} + infoP->block_count = pW * pH * infoP->block_value >> 16; + + ERR(ae->GetCHECKBOX(ID_ORG,&infoP->org)); + + return err; +} +//------------------------------------------------------------------------------------------------- +static PF_Err + Exec (CFsAE *ae , ParamInfo *infoP) +{ + PF_Err err = PF_Err_NONE; + + ae->out->clear(); + switch (infoP->target_mode) + { + case 1: + FindTarget(ae,infoP->target_color,infoP->color_range); + break; + case 2: + FindTargetDeltaBright(ae,infoP->delta_range); + break; + case 3: + FindTargetDeltaAlpha(ae,infoP->delta_range); + break; + } + + blockDraw(ae,infoP->block_size,infoP->block_count,infoP->seed); + + + switch(ae->pixelFormat()){ + case PF_PixelFormat_ARGB128: + drawTouchS32(ae,infoP); + break; + case PF_PixelFormat_ARGB64: + drawTouchS16(ae,infoP); + break; + case PF_PixelFormat_ARGB32: + drawTouchS8(ae,infoP); + break; + } + greenBlur(ae); + + copyAlpha(ae,infoP->color,infoP->org); + + + 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/TouchDrawStraght/TouchDrawStraght.h b/TouchDrawStraght/TouchDrawStraght.h new file mode 100644 index 0000000..b7f5839 --- /dev/null +++ b/TouchDrawStraght/TouchDrawStraght.h @@ -0,0 +1,186 @@ +//----------------------------------------------------------------------------------- +/* + PluginSkeleton for VS2010 +*/ +//----------------------------------------------------------------------------------- + +#pragma once + +#ifndef TouchDrawStraght_H +#define TouchDrawStraght_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" +//#include "FsAE.h" + +#include "FsTDpset.h" + + +#define STR_SEED "RandomSeed" +#define STR_TARGET_VALUE "Value" +#define STR_TARGET_TOPIC "Target" +#define STR_TARGET_MODE1 "Mode" +#define STR_TARGET_MODE2 "Color|BrightnessDelta|AlphaDelta" +#define STR_TARGET_COLOR "Color" +#define STR_COLOR_RANGE "Color_Range" +#define STR_DELTA_RANGE "Delta_Range" +#define STR_ROT "Rot" +#define STR_LENGTH_I_MAX "Inside_Length" +#define STR_LENGTH_I_RND "Inside_Length_Random" +#define STR_LENGTH_O_MAX "Outside_Length" +#define STR_LENGTH_O_RND "Outside_Length_Random" +#define STR_COLOR "Color" +#define STR_OPACITY "Opacity" +#define STR_OPACITY_RND "Opacity_Random" + +#define STR_POINT_COUNT "Point_Count" +#define STR_POINT_LENGTH "Point_Length" + +#define STR_BLOCK_VALUE "Block_Value" +#define STR_BLOCK_SIZE "Block_Size" + +#define STR_ORG_CB1 "Original_Blend" +#define STR_ORG_CB2 "ON" + + +//ユーザーインターフェースのID +//ParamsSetup関数とRender関数のparamsパラメータのIDになる +enum { + ID_INPUT = 0, // default input layer + + ID_SEED, //ランダムの基点 + ID_TARGET_VALUE, //タッチが発生する確率 + ID_TARGRT_TOPIC, + ID_TARGET_MODE, // 1:差分 2:color + ID_TARGET_COLOR, //ターゲットの色 + ID_COLOR_RANGE, //色の範囲 + ID_DELTA_RANGE, //差分の範囲 + ID_TARGRT_TOPIC_END, + + ID_ROT, //タッチ線の方向 + ID_LENGTH_I_MAX, //タッチ線の長さin方向 + ID_LENGTH_I_RND, //タッチ線の長さin方向のランダムさ + ID_LENGTH_O_MAX, //タッチ線の長さout方向 + ID_LENGTH_O_RND, //タッチ線の長さout方向のランダムさ + + ID_COLOR, //タッチ線の色 + ID_OPACITY, //タッチ線の不透明度 + ID_OPACITY_RND, //タッチ線の不透明度のランダム + + ID_POINT_COUNT, //タッチが発生する数 + ID_POINT_LENGTH, //タッチが発生する範囲 + + ID_BLOCK_VALUE, + ID_BLOCK_SIZE, + + ID_ORG, + ID_NUM_PARAMS + }; + +//プラグイン独自のパラメータを集めた構造体 +typedef struct{ + A_long seed; + PF_Fixed target_value; + A_long target_mode; + PF_Pixel target_color; + PF_Fixed color_range; + PF_Fixed delta_range; + PF_Fixed rot; + A_long length_i_max; + PF_Fixed length_i_rnd; + A_long length_o_max; + PF_Fixed length_o_rnd; + + PF_Pixel color; + PF_Fixed opacity; + PF_Fixed opacity_rnd; + A_long point_count; + PF_Fixed point_length; + A_long target_count; + PF_Fixed block_value; + A_long block_count; + A_long block_size; + PF_Boolean org; + +} ParamInfo; + + + +typedef struct { + PsetPrm pp; + PF_FixedPoint start; + PF_Fixed rot; + PF_Fixed length_i; + PF_Fixed length_o; + + PF_Fixed opacity; + PF_InData *in_data; + +} TouchDrawStraghtInfo; + +//------------------------------------------------------- +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); +} + +//blue +PF_Err FindTarget(CFsAE *ae , PF_Pixel target_color, A_long color_range); +PF_Err FindTargetDeltaBright(CFsAE *ae , A_long delta_range); +PF_Err FindTargetDeltaAlpha(CFsAE *ae , A_long delta_range); + +//blue +PF_Err blockDraw(CFsAE *ae , A_long bSize, A_long bCount,A_long seed); + + +PF_Err greenBlur(CFsAE *ae); + +//green -> RGB +PF_Err copyAlpha(CFsAE *ae , PF_Pixel color, PF_Boolean org); + +void drawTouchS8(CFsAE *ae,ParamInfo *infoP); +void drawTouchS16(CFsAE *ae,ParamInfo *infoP); +void drawTouchS32(CFsAE *ae,ParamInfo *infoP); + +void drawTouchSub32(TouchDrawStraghtInfo *p); +void drawTouchSub16(TouchDrawStraghtInfo *p); +void drawTouchSub8(TouchDrawStraghtInfo *p); + + +#endif // TouchDrawStraght_H diff --git a/TouchDrawStraght/TouchDrawStraghtPiPL.r b/TouchDrawStraght/TouchDrawStraghtPiPL.r new file mode 100644 index 0000000..43b255c --- /dev/null +++ b/TouchDrawStraght/TouchDrawStraghtPiPL.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/TouchDrawStraght/ToutchDrawStraght16.cpp b/TouchDrawStraght/ToutchDrawStraght16.cpp new file mode 100644 index 0000000..8a5d678 --- /dev/null +++ b/TouchDrawStraght/ToutchDrawStraght16.cpp @@ -0,0 +1,108 @@ +#include "TouchDrawStraght.h" + +//------------------------------------------------------- +void drawTouchSub16(TouchDrawStraghtInfo *p) +{ + if (p->opacity<=0) return; + CRotCalc rc(p->in_data); + rc.SetRot(p->rot); + + PF_Fixed dx,dy,dl; + A_long i,len; + len = p->length_i; + if (len>0) { + rc.SetRotLength(p->rot,len<<16); + p->pp.pos = p->start; + p->pp.opacity = p->opacity; + dx = rc.x() / len; + dy = rc.y() / len; + dl = p->pp.opacity / len; + for ( i=0; ipp))==FALSE) break; + p->pp.pos.x += dx; + p->pp.pos.y += dy; + p->pp.opacity -= dl; + } + } + len = p->length_o; + if (len>0) { + rc.SetRotLength(p->rot,len<<16); + p->pp.pos = p->start; + p->pp.opacity = p->opacity; + dx = rc.x() / -len; + dy = rc.y() / -len; + dl = p->pp.opacity / len; + for ( i=0; ipp))==FALSE) break; + p->pp.pos.x += dx; + p->pp.pos.y += dy; + p->pp.opacity -= dl; + } + } +} +//------------------------------------------------------- +void drawTouchS16(CFsAE *ae,ParamInfo *prm) +{ + + A_long w = ae->out->width(); + A_long h = ae->out->height(); + A_long ow = ae->out->offsetWidth(); + + TouchDrawStraghtInfo td; + td.pp.data = ae->out->data(); + td.pp.height = h; + td.pp.width = w; + td.pp.widthTrue = ae->out->widthTrue(); + td.rot = prm->rot; + td.in_data = ae->in_data; + + PF_Pixel16 *oD; + oD = (PF_Pixel16 *)ae->out->data(); + + //ターゲットランダム + F_SRAND(prm->seed); + PF_Fixed t0; + t0 = F_RAND_MAX * prm->target_value >> 16; + + //長さランダム + PF_Fixed ir0; + ir0 = prm->length_i_max - (prm->length_i_max * prm->length_i_rnd >>16); + if (ir0<0) ir0=0; + + PF_Fixed or0; + or0 = prm->length_o_max - (prm->length_o_max * prm->length_o_rnd >>16); + if (or0<0) or0=0; + + //不透明度ランダム + PF_Fixed p0; + p0 = prm->opacity - (prm->opacity >>8) * (prm->opacity_rnd >>8); + if (p0<0) p0=0; + + PF_Fixed xx,yy; + A_long i,j; + A_long k; + A_long targetOut = 0; + for (j=0;jpoint_count;k++){ + td.start.x = xx + F_RAND2(-prm->point_length,prm->point_length); + td.start.y = yy + F_RAND2(-prm->point_length,prm->point_length); + + td.length_i = F_RAND2(ir0,prm->length_i_max); + td.length_o = F_RAND2(or0,prm->length_o_max); + td.opacity = F_RAND2(p0,prm->opacity); + drawTouchSub16(&td); + } + } + }else{ + F_RAND(); + } + targetOut++; + } + targetOut += ow; + } +} \ No newline at end of file diff --git a/TouchDrawStraght/ToutchDrawStraght32.cpp b/TouchDrawStraght/ToutchDrawStraght32.cpp new file mode 100644 index 0000000..6c5edef --- /dev/null +++ b/TouchDrawStraght/ToutchDrawStraght32.cpp @@ -0,0 +1,110 @@ +#include "TouchDrawStraght.h" + + +//------------------------------------------------------- +void drawTouchSub32(TouchDrawStraghtInfo *p) +{ + if (p->opacity<=0) return; + CRotCalc rc(p->in_data); + rc.SetRot(p->rot); + + PF_Fixed dx,dy,dl; + A_long i,len; + len = p->length_i; + if (len>0) { + rc.SetRotLength(p->rot,len<<16); + p->pp.pos = p->start; + p->pp.opacity = p->opacity; + dx = rc.x() / len; + dy = rc.y() / len; + dl = p->pp.opacity / len; + for ( i=0; ipp))==FALSE) break; + p->pp.pos.x += dx; + p->pp.pos.y += dy; + p->pp.opacity -= dl; + } + } + len = p->length_o; + if (len>0) { + rc.SetRotLength(p->rot,len<<16); + p->pp.pos = p->start; + p->pp.opacity = p->opacity; + dx = rc.x() / -len; + dy = rc.y() / -len; + dl = p->pp.opacity / len; + for ( i=0; ipp))==FALSE) break; + p->pp.pos.x += dx; + p->pp.pos.y += dy; + p->pp.opacity -= dl; + } + } +} +//------------------------------------------------------- +void drawTouchS32(CFsAE *ae,ParamInfo *prm) +{ + + A_long w = ae->out->width(); + A_long h = ae->out->height(); + A_long ow = ae->out->offsetWidth(); + + TouchDrawStraghtInfo td; + td.pp.data = ae->out->data(); + td.pp.height = h; + td.pp.width = w; + td.pp.widthTrue = ae->out->widthTrue(); + td.rot = prm->rot; + td.in_data = ae->in_data; + + PF_PixelFloat *oD; + oD = (PF_PixelFloat *)ae->out->data(); + + + F_SRAND(prm->seed); + //ターゲットランダム + PF_Fixed t0; + t0 = F_RAND_MAX * prm->target_value >> 16; + + //長さランダム + PF_Fixed ir0; + ir0 = prm->length_i_max - (prm->length_i_max * prm->length_i_rnd >>16); + if (ir0<0) ir0=0; + + PF_Fixed or0; + or0 = prm->length_o_max - (prm->length_o_max * prm->length_o_rnd >>16); + if (or0<0) or0=0; + + //不透明度ランダム + PF_Fixed p0; + p0 = prm->opacity - (prm->opacity >>8) * (prm->opacity_rnd >>8); + if (p0<0) p0=0; + + PF_Fixed xx,yy; + A_long i,j; + A_long k; + A_long targetOut = 0; + for (j=0;jpoint_count;k++){ + td.start.x = xx + F_RAND2(-prm->point_length,prm->point_length); + td.start.y = yy + F_RAND2(-prm->point_length,prm->point_length); + + td.length_i = F_RAND2(ir0,prm->length_i_max); + td.length_o = F_RAND2(or0,prm->length_o_max); + td.opacity = F_RAND2(p0,prm->opacity); + drawTouchSub32(&td); + } + } + }else{ + F_RAND(); + } + targetOut++; + } + targetOut += ow; + } +} \ No newline at end of file diff --git a/TouchDrawStraght/ToutchDrawStraght8.cpp b/TouchDrawStraght/ToutchDrawStraght8.cpp new file mode 100644 index 0000000..3979552 --- /dev/null +++ b/TouchDrawStraght/ToutchDrawStraght8.cpp @@ -0,0 +1,108 @@ +#include "TouchDrawStraght.h" +//------------------------------------------------------- +void drawTouchSub8(TouchDrawStraghtInfo *p) +{ + if (p->opacity<=0) return; + CRotCalc rc(p->in_data); + rc.SetRot(p->rot); + + PF_Fixed dx,dy,dl; + A_long i,len; + len = p->length_i; + if (len>0) { + rc.SetRotLength(p->rot,len<<16); + p->pp.pos = p->start; + p->pp.opacity = p->opacity; + dx = rc.x() / len; + dy = rc.y() / len; + dl = p->pp.opacity / len; + for ( i=0; ipp))==FALSE) break; + p->pp.pos.x += dx; + p->pp.pos.y += dy; + p->pp.opacity -= dl; + } + } + len = p->length_o; + if (len>0) { + rc.SetRotLength(p->rot,len<<16); + p->pp.pos = p->start; + p->pp.opacity = p->opacity; + dx = rc.x() / -len; + dy = rc.y() / -len; + dl = p->pp.opacity / len; + for ( i=0; ipp))==FALSE) break; + p->pp.pos.x += dx; + p->pp.pos.y += dy; + p->pp.opacity -= dl; + } + } +} +//------------------------------------------------------- +void drawTouchS8(CFsAE *ae,ParamInfo *prm) +{ + + A_long w = ae->out->width(); + A_long h = ae->out->height(); + A_long ow = ae->out->offsetWidth(); + + TouchDrawStraghtInfo td; + td.pp.data = ae->out->data(); + td.pp.height = h; + td.pp.width = w; + td.pp.widthTrue = ae->out->widthTrue(); + td.rot = prm->rot; + td.in_data = ae->in_data; + + PF_Pixel *oD; + oD = (PF_Pixel *)ae->out->data(); + + //ターゲットランダム + F_SRAND(prm->seed); + PF_Fixed t0; + t0 = F_RAND_MAX * prm->target_value >> 16; + + //長さランダム + PF_Fixed ir0; + ir0 = prm->length_i_max - (prm->length_i_max * prm->length_i_rnd >>16); + if (ir0<0) ir0=0; + + PF_Fixed or0; + or0 = prm->length_o_max - (prm->length_o_max * prm->length_o_rnd >>16); + if (or0<0) or0=0; + + //不透明度ランダム + PF_Fixed p0; + p0 = prm->opacity - (prm->opacity >>8) * (prm->opacity_rnd >>8); + if (p0<0) p0=0; + + PF_Fixed xx,yy; + A_long i,j; + A_long k; + A_long targetOut = 0; + for (j=0;jpoint_count;k++){ + td.start.x = xx + F_RAND2(-prm->point_length,prm->point_length); + td.start.y = yy + F_RAND2(-prm->point_length,prm->point_length); + + td.length_i = F_RAND2(ir0,prm->length_i_max); + td.length_o = F_RAND2(or0,prm->length_o_max); + td.opacity = F_RAND2(p0,prm->opacity); + drawTouchSub8(&td); + } + } + }else{ + F_RAND(); + } + targetOut++; + } + targetOut += ow; + } + +} \ No newline at end of file diff --git a/TouchDrawStraght/Win/TouchDrawStraght.vcxproj b/TouchDrawStraght/Win/TouchDrawStraght.vcxproj new file mode 100644 index 0000000..0111db6 --- /dev/null +++ b/TouchDrawStraght/Win/TouchDrawStraght.vcxproj @@ -0,0 +1,593 @@ +サソ + + + + Debug + Win32 + + + Debug + x64 + + + Release-MD + Win32 + + + Release-MD + x64 + + + Release + Win32 + + + Release + x64 + + + + {5EB482B1-B231-41DB-9532-DF324D2674F8} + TouchDrawStraght + TouchDrawStraght + 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 + + + F's $(ProjectName)_CC2018_MD + + + + _DEBUG;%(PreprocessorDefinitions) + true + true + Win32 + .\Debug/TouchDrawStraght.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/TouchDrawStraght.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/TouchDrawStraght.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/TouchDrawStraght.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/TouchDrawStraght.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/TouchDrawStraght.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/TouchDrawStraght/Win/TouchDrawStraght.vcxproj.filters b/TouchDrawStraght/Win/TouchDrawStraght.vcxproj.filters new file mode 100644 index 0000000..6939a73 --- /dev/null +++ b/TouchDrawStraght/Win/TouchDrawStraght.vcxproj.filters @@ -0,0 +1,168 @@ +サソ + + + + {86578035-6bc3-4b75-ad09-c113fb453c14} + h;hpp;hxx;hm;inl;fi;fd + + + {83a7ab9f-a22f-4fe6-accb-8d04d5e3f6c3} + + + {9546804a-5323-427f-a68c-f2d7078df95e} + ico;cur;bmp;dlg;rc2;rct;bin;cnt;rtf;gif;jpg;jpeg;jpe + + + {f905781a-c1f9-419f-83f1-55c7355be452} + + + {92d2a57d-f20d-455e-badf-3f1bacfc960f} + + + {f6241c2a-cc9d-4c1a-afcd-a5684cafaf59} + + + {f30332d6-e09c-4d8f-aa8b-8563d8d434d1} + + + {e1ae0904-5817-484b-9da5-f6c466c4b790} + + + + + 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 + + + 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/TouchDrawStraght/Win/TouchDrawStraghtPiPL.rc b/TouchDrawStraght/Win/TouchDrawStraghtPiPL.rc new file mode 100644 index 0000000..387514c --- /dev/null +++ b/TouchDrawStraght/Win/TouchDrawStraghtPiPL.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, + "\x14F's TouchDrawStraght\0\0\0", + + "MIB8", + "gtac", + 0, 0x0, + 20, 0x0, + "\x10F's Plugins-Draw\0\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, + "\x14F's TouchDrawStraght\0\0\0", + + "MIB8", + 0x6165464CL, + 0L, + 4L + 8L, + + +END + diff --git a/VideoGrid/Fs_Target.h b/VideoGrid/Fs_Target.h new file mode 100644 index 0000000..f5c936d --- /dev/null +++ b/VideoGrid/Fs_Target.h @@ -0,0 +1,79 @@ +//----------------------------------------------------------------------------------- +/* + F's Plugins for VS2010/VS2012 +*/ +//----------------------------------------------------------------------------------- + +#pragma once +#ifndef FS_TAGET_H +#define FS_TAGET_H + +//----------------------------------------------------------------------------------- +//プラグインの識別に使われる名前 +#define FS_NAME "F's VideoGrid" + +//----------------------------------------------------------------------------------- +//プラグインの説明に使われる文字 +#define FS_DESCRIPTION "Videoグリッドフィルタ" + +//----------------------------------------------------------------------------------- +//プラグインが表示されるメニュー名 +#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/VideoGrid/GridSub16.cpp b/VideoGrid/GridSub16.cpp new file mode 100644 index 0000000..c77d48d --- /dev/null +++ b/VideoGrid/GridSub16.cpp @@ -0,0 +1,207 @@ +#include "VideoGrid.h" + +//------------------------------------------------------------------------------------------------- +void BlockBevelSubTwo16(gridParam *prm) +{ + A_long x0,x1,y0,y1; + A_long target, target2; + x0 = prm->x; + x1 = prm->x + 1; + y0 = prm->y; + y1 = prm->y + 1; + if ( (x1<0)||(x0>=prm->width)||(y1<0)||(y0>=prm->height) ) return; + + PF_Pixel16 *data; + data = (PF_Pixel16 *)prm->data; + target = x0 + y0*prm->widthTrue; + target2 = target; + if ( (x0>=0)&&(y0>=0) ){ + data[target] = lineBright16(data[target],prm->info.hilight); + } + if ( (x1width)&&(y0>=0) ){ + target2 = target +1; + data[target2] = lineBright16(data[target2],prm->info.hilight); + } + if ( (x0>=0)&&(y1height) ){ + target2 = target + prm->widthTrue; + data[target2] = lineBright16(data[target2],prm->info.hilight); + } + if ( (x1width)&&(y1height) ){ + target2 = target + 1 + prm->widthTrue; + data[target2] = lineBright16(data[target2],prm->info.shadow); + } +} +//------------------------------------------------------------------------------------------------- +void BlockBevelSub16(gridParam *prm) +{ + A_long x0,x1,y0,y1; + A_long target,i; + A_long w,s0,s1; + + if (prm->info.gridSize<=2){ + BlockBevelSubTwo16(prm); + return; + } + + x0 = prm->x ; + x1 = prm->x + prm->info.gridSize -1; + y0 = prm->y; + y1 = prm->y + prm->info.gridSize -1; + if ( (x1<0)||(x0>=prm->width)||(y1<0)||(y0>=prm->height) ) return; + + PF_Pixel16 *data; + data = (PF_Pixel16 *)prm->data; + + if (y0>=0) { + if (x0<0) { s0 = 0; }else{ s0 = x0; } + if (x1>=prm->width) { s1 = prm->width-1; }else{ s1 = x1; } + w = s1 - s0 + 1; + target = s0 + (y0*prm->widthTrue); + for (i=0 ; i< w ;i++){ + data[target] = lineBright16(data[target],prm->info.hilight); + target++; + } + } + if (x0>=0) { + if (y0<0) { s0 = 0; }else{ s0 = y0; } + s0+=1; + if (y1>=prm->height) { s1 = prm->height-1; }else{ s1 = y1; } + w = s1 - s0 + 1; + target = x0 + (s0*prm->widthTrue); + for (i=0 ; i< w ;i++){ + data[target] = lineBright16(data[target],prm->info.hilight); + target+=prm->widthTrue; + } + } + + if (y1height) { + if (x0<0) { s0 = 0; }else{ s0 = x0; } + s0+=1; + if (x1>=prm->width) { s1 = prm->width-1; }else{ s1 = x1; } + w = s1 - s0 + 1; + target = s0 + (y1*prm->widthTrue); + for (i=0 ; i< w ;i++){ + data[target] = lineBright16(data[target],prm->info.shadow); + target++; + } + } + + if (x1width) { + if (y0<0) { s0 = 0; }else{ s0 = y0; } + s0+=1; + if (y1>=prm->height) { s1 = prm->height-1; }else{ s1 = y1; } + s1-=1; + w = s1 - s0 + 1; + target = x1 + (s0*prm->widthTrue); + for (i=0 ; i< w ;i++){ + data[target] = lineBright16(data[target],prm->info.shadow); + target+=prm->widthTrue; + } + } + + +} +//------------------------------------------------------------------------------------------------- +void BlockBevel16(gridParam *prm) +{ + A_long i; + + gridParam pr; + pr.data = prm->data; + pr.info.gridSize = prm->info.gridSize; + pr.info.isMosaic = prm->info.isMosaic; + pr.info.hilight = prm->info.hilight; + pr.info.shadow = prm->info.shadow; + pr.info.height = prm->info.height; + pr.width = prm->width; + pr.widthTrue = prm->widthTrue; + pr.height = prm->height; + pr.x = prm->x; + pr.y = prm->y; + + for (i=0 ;idata; + pr.info.gridSize = prm->info.gridSize; + pr.info.isMosaic = prm->info.isMosaic; + pr.info.hilight = prm->info.hilight; + pr.info.shadow = prm->info.shadow; + pr.info.height = prm->info.height; + pr.width = prm->width; + pr.widthTrue = prm->widthTrue; + pr.height = prm->height; + pr.x = prm->x; + pr.y = prm->y; + + A_long x0,x1,y0,y1; + A_long target,i,j; + A_long r,g,b,a; + A_long w,h; + A_long offset; + + PF_Pixel16 *data; + data =(PF_Pixel16 *)(pr.data); + PF_Pixel16 col; + + //モザイクかける範囲を求める + x0 = pr.x ; + x1 = pr.x + pr.info.gridSize -1; + y0 = pr.y; + y1 = pr.y + pr.info.gridSize -1; + + if ( (x1<0)||(x0>=pr.width)||(y1<0)||(y0>=pr.height) ) return; + + //範囲をクリッピング + if (x0<0) x0 = 0; + if (y0<0) y0 = 0; + if (x1>=pr.width) x1 = pr.width -1; + if (y1>=pr.height) y1 = pr.height -1; + + w = x1 - x0 + 1; + h = y1 - y0 + 1; + //rgaの平均値を求める + r=g=b=a=0; + A_long count=0; + offset = pr.widthTrue - w; + target = x0 + (y0 * pr.widthTrue); + for (j=0; jx; + x1 = prm->x + 1; + y0 = prm->y; + y1 = prm->y + 1; + if ( (x1<0)||(x0>=prm->width)||(y1<0)||(y0>=prm->height) ) return; + + PF_PixelFloat *data; + data = (PF_PixelFloat *)prm->data; + target = x0 + y0*prm->widthTrue; + target2 = target; + if ( (x0>=0)&&(y0>=0) ){ + data[target] = lineBright32(data[target],prm->info.hilight); + } + if ( (x1width)&&(y0>=0) ){ + target2 = target +1; + data[target2] = lineBright32(data[target2],prm->info.hilight); + } + if ( (x0>=0)&&(y1height) ){ + target2 = target + prm->widthTrue; + data[target2] = lineBright32(data[target2],prm->info.hilight); + } + if ( (x1width)&&(y1height) ){ + target2 = target + 1 + prm->widthTrue; + data[target2] = lineBright32(data[target2],prm->info.shadow); + } +} +//------------------------------------------------------------------------------------------------- +void BlockBevelSub32(gridParam *prm) +{ + A_long x0,x1,y0,y1; + A_long target,i; + A_long w,s0,s1; + + if (prm->info.gridSize<=2){ + BlockBevelSubTwo32(prm); + return; + } + + x0 = prm->x ; + x1 = prm->x + prm->info.gridSize -1; + y0 = prm->y; + y1 = prm->y + prm->info.gridSize -1; + if ( (x1<0)||(x0>=prm->width)||(y1<0)||(y0>=prm->height) ) return; + + PF_PixelFloat *data; + data = (PF_PixelFloat *)prm->data; + + if (y0>=0) { + if (x0<0) { s0 = 0; }else{ s0 = x0; } + if (x1>=prm->width) { s1 = prm->width-1; }else{ s1 = x1; } + w = s1 - s0 + 1; + target = s0 + (y0*prm->widthTrue); + for (i=0 ; i< w ;i++){ + data[target] = lineBright32(data[target],prm->info.hilight); + target++; + } + } + if (x0>=0) { + if (y0<0) { s0 = 0; }else{ s0 = y0; } + s0+=1; + if (y1>=prm->height) { s1 = prm->height-1; }else{ s1 = y1; } + w = s1 - s0 + 1; + target = x0 + (s0*prm->widthTrue); + for (i=0 ; i< w ;i++){ + data[target] = lineBright32(data[target],prm->info.hilight); + target+=prm->widthTrue; + } + } + + if (y1height) { + if (x0<0) { s0 = 0; }else{ s0 = x0; } + s0+=1; + if (x1>=prm->width) { s1 = prm->width-1; }else{ s1 = x1; } + w = s1 - s0 + 1; + target = s0 + (y1*prm->widthTrue); + for (i=0 ; i< w ;i++){ + data[target] = lineBright32(data[target],prm->info.shadow); + target++; + } + } + + if (x1width) { + if (y0<0) { s0 = 0; }else{ s0 = y0; } + s0+=1; + if (y1>=prm->height) { s1 = prm->height-1; }else{ s1 = y1; } + s1-=1; + w = s1 - s0 + 1; + target = x1 + (s0*prm->widthTrue); + for (i=0 ; i< w ;i++){ + data[target] = lineBright32(data[target],prm->info.shadow); + target+=prm->widthTrue; + } + } + + +} +//------------------------------------------------------------------------------------------------- +void BlockBevel32(gridParam *prm) +{ + A_long i; + + gridParam pr; + pr.data = prm->data; + pr.info.gridSize = prm->info.gridSize; + pr.info.isMosaic = prm->info.isMosaic; + pr.info.hilight = prm->info.hilight; + pr.info.shadow = prm->info.shadow; + pr.info.height = prm->info.height; + pr.width = prm->width; + pr.widthTrue = prm->widthTrue; + pr.height = prm->height; + pr.x = prm->x; + pr.y = prm->y; + + for (i=0 ;idata; + pr.info.gridSize = prm->info.gridSize; + pr.info.isMosaic = prm->info.isMosaic; + pr.info.hilight = prm->info.hilight; + pr.info.shadow = prm->info.shadow; + pr.info.height = prm->info.height; + pr.width = prm->width; + pr.widthTrue = prm->widthTrue; + pr.height = prm->height; + pr.x = prm->x; + pr.y = prm->y; + + A_long x0,x1,y0,y1; + A_long target,i,j; + PF_FpLong r,g,b,a; + A_long w,h; + A_long offset; + + PF_PixelFloat *data; + data =(PF_PixelFloat *)(pr.data); + PF_PixelFloat col; + + //モザイクかける範囲を求める + x0 = pr.x ; + x1 = pr.x + pr.info.gridSize -1; + y0 = pr.y; + y1 = pr.y + pr.info.gridSize -1; + + if ( (x1<0)||(x0>=pr.width)||(y1<0)||(y0>=pr.height) ) return; + + //範囲をクリッピング + if (x0<0) x0 = 0; + if (y0<0) y0 = 0; + if (x1>=pr.width) x1 = pr.width -1; + if (y1>=pr.height) y1 = pr.height -1; + + w = x1 - x0 + 1; + h = y1 - y0 + 1; + //rgaの平均値を求める + r=g=b=a=0; + A_long count=0; + offset = pr.widthTrue - w; + target = x0 + (y0 * pr.widthTrue); + for (j=0; jx; + x1 = prm->x + 1; + y0 = prm->y; + y1 = prm->y + 1; + if ( (x1<0)||(x0>=prm->width)||(y1<0)||(y0>=prm->height) ) return; + + PF_Pixel8 *data; + data = (PF_Pixel8 *)prm->data; + target = x0 + y0*prm->widthTrue; + target2 = target; + if ( (x0>=0)&&(y0>=0) ){ + data[target] = lineBright8(data[target],prm->info.hilight); + } + if ( (x1width)&&(y0>=0) ){ + target2 = target +1; + data[target2] = lineBright8(data[target2],prm->info.hilight); + } + if ( (x0>=0)&&(y1height) ){ + target2 = target + prm->widthTrue; + data[target2] = lineBright8(data[target2],prm->info.hilight); + } + if ( (x1width)&&(y1height) ){ + target2 = target + 1 + prm->widthTrue; + data[target2] = lineBright8(data[target2],prm->info.shadow); + } +} +//------------------------------------------------------------------------------------------------- +void BlockBevelSub8(gridParam *prm) +{ + A_long x0,x1,y0,y1; + A_long target,i; + A_long w,s0,s1; + + if (prm->info.gridSize<=2){ + BlockBevelSubTwo8(prm); + return; + } + + x0 = prm->x ; + x1 = prm->x + prm->info.gridSize -1; + y0 = prm->y; + y1 = prm->y + prm->info.gridSize -1; + if ( (x1<0)||(x0>=prm->width)||(y1<0)||(y0>=prm->height) ) return; + + PF_Pixel8 *data; + data = (PF_Pixel8 *)prm->data; + + if (y0>=0) { + if (x0<0) { s0 = 0; }else{ s0 = x0; } + if (x1>=prm->width) { s1 = prm->width-1; }else{ s1 = x1; } + w = s1 - s0 + 1; + target = s0 + (y0*prm->widthTrue); + for (i=0 ; i< w ;i++){ + data[target] = lineBright8(data[target],prm->info.hilight); + target++; + } + } + if (x0>=0) { + if (y0<0) { s0 = 0; }else{ s0 = y0; } + s0+=1; + if (y1>=prm->height) { s1 = prm->height-1; }else{ s1 = y1; } + w = s1 - s0 + 1; + target = x0 + (s0*prm->widthTrue); + for (i=0 ; i< w ;i++){ + data[target] = lineBright8(data[target],prm->info.hilight); + target+=prm->widthTrue; + } + } + + if (y1height) { + if (x0<0) { s0 = 0; }else{ s0 = x0; } + s0+=1; + if (x1>=prm->width) { s1 = prm->width-1; }else{ s1 = x1; } + w = s1 - s0 + 1; + target = s0 + (y1*prm->widthTrue); + for (i=0 ; i< w ;i++){ + data[target] = lineBright8(data[target],prm->info.shadow); + target++; + } + } + + if (x1width) { + if (y0<0) { s0 = 0; }else{ s0 = y0; } + s0+=1; + if (y1>=prm->height) { s1 = prm->height-1; }else{ s1 = y1; } + s1-=1; + w = s1 - s0 + 1; + target = x1 + (s0*prm->widthTrue); + for (i=0 ; i< w ;i++){ + data[target] = lineBright8(data[target],prm->info.shadow); + target+=prm->widthTrue; + } + } + + +} +//------------------------------------------------------------------------------------------------- +void BlockBevel8(gridParam *prm) +{ + A_long i; + + gridParam pr; + pr.data = prm->data; + pr.info.gridSize = prm->info.gridSize; + pr.info.isMosaic = prm->info.isMosaic; + pr.info.hilight = prm->info.hilight; + pr.info.shadow = prm->info.shadow; + pr.info.height = prm->info.height; + pr.width = prm->width; + pr.widthTrue = prm->widthTrue; + pr.height = prm->height; + pr.x = prm->x; + pr.y = prm->y; + + for (i=0 ;idata; + pr.info.gridSize = prm->info.gridSize; + pr.info.isMosaic = prm->info.isMosaic; + pr.info.hilight = prm->info.hilight; + pr.info.shadow = prm->info.shadow; + pr.info.height = prm->info.height; + pr.width = prm->width; + pr.widthTrue = prm->widthTrue; + pr.height = prm->height; + pr.x = prm->x; + pr.y = prm->y; + + A_long x0,x1,y0,y1; + A_long target,i,j; + A_long r,g,b,a; + A_long w,h; + A_long offset; + + PF_Pixel8 *data; + data =(PF_Pixel8 *)(pr.data); + PF_Pixel col; + + //モザイクかける範囲を求める + x0 = pr.x ; + x1 = pr.x + pr.info.gridSize -1; + y0 = pr.y; + y1 = pr.y + pr.info.gridSize -1; + + if ( (x1<0)||(x0>=pr.width)||(y1<0)||(y0>=pr.height) ) return; + + //範囲をクリッピング + if (x0<0) x0 = 0; + if (y0<0) y0 = 0; + if (x1>=pr.width) x1 = pr.width -1; + if (y1>=pr.height) y1 = pr.height -1; + + w = x1 - x0 + 1; + h = y1 - y0 + 1; + //rgaの平均値を求める + r=g=b=a=0; + A_long count=0; + offset = pr.widthTrue - w; + target = x0 + (y0 * pr.widthTrue); + for (j=0; jnum_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)&&(in_data->appl_id != 'PrMr')){ + //-------------------- + + ERR(ae.GetNewEffectStreamAll()); + if (!err){ + A_Boolean hide_themB[ID_NUM_PARAMS]; + for ( A_long i=1; iout_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_GRIDSIZE,&infoP->gridSize)); + if (!err){ + infoP->gridSize = ae->downScale(infoP->gridSize); + if (infoP->gridSize<2) infoP->gridSize =2; + } + ERR(ae->GetCHECKBOX(ID_MODE,&infoP->isMosaic)); + PF_Fixed f; + ERR(ae->GetFIXED(ID_HILIGHT,&f)); + if (!err) infoP->hilight = (PF_FpShort)f /(6553600); + ERR(ae->GetFIXED(ID_SHADOW,&f)); + if (!err) infoP->shadow = (PF_FpShort)f /(6553600); + ERR(ae->GetADD(ID_HEIGHT,&infoP->height)); + if (!err){ + if (infoP->height > (infoP->gridSize/2)) infoP->height = infoP->gridSize/2; + if (infoP->height<1) infoP->height = 1; + } + return err; +} +//------------------------------------------------------------------------------------------------- +static PF_Err +GetGridParams(CFsAE *ae, ParamInfo *infoP,gridParam *gp) +{ + PF_Err err = PF_Err_NONE; + gp->info.gridSize = infoP->gridSize; + gp->info.height = infoP->height; + gp->info.hilight = infoP->hilight; + gp->info.isMosaic = infoP->isMosaic; + gp->info.shadow = infoP->shadow; + gp->data = ae->output->data; + gp->width = ae->output->width; + gp->height = ae->output->height; + switch(ae->pixelFormat()) + { + case PF_PixelFormat_ARGB128: + gp->widthTrue = ae->output->rowbytes/sizeof(PF_PixelFloat); + break; + case PF_PixelFormat_ARGB64: + gp->widthTrue = ae->output->rowbytes/sizeof(PF_Pixel16); + break; + case PF_PixelFormat_ARGB32: + gp->widthTrue = ae->output->rowbytes/sizeof(PF_Pixel); + break; + } + + //画像のサイズからループ回数を + gp->loopX = gp->width / infoP->gridSize; + if ( (gp->width % infoP->gridSize)!=0 ) gp->loopX += 1; + gp->loopY = gp->height / infoP->gridSize; + if ( (gp->height % infoP->gridSize)!=0 ) gp->loopY += 1; + + return err; + +} +//------------------------------------------------------------------------------------------------- +static PF_Err +GetParams(CFsAE *ae, ParamInfo *infoP,gridParam *gp) +{ + PF_Err err = PF_Err_NONE; + err = GetParams(ae,infoP); + if (!err) err = GetGridParams(ae,infoP,gp); + return err; +} +//------------------------------------------------------------------------------------------------- +static PF_Err +Exec(CFsAE *ae, gridParam *gp) +{ + PF_Err err = PF_Err_NONE; + if ( (gp->info.isMosaic == FALSE)&&(gp->info.hilight==1)&&(gp->info.shadow==1))return err; + A_long i,j; + switch (ae->pixelFormat()) { + case PF_PixelFormat_ARGB128: + for (j=0;jloopY;j++){ + gp->y = j * gp->info.gridSize; + for (i=0;iloopX;i++){ + gp->x = i * gp->info.gridSize; + if (gp->info.isMosaic==TRUE) { BlockMosaic32(gp);} + if (!( (gp->info.hilight ==1)&&(gp->info.shadow ==1))) BlockBevel32(gp); + } + } + break; + case PF_PixelFormat_ARGB64: + for (j=0;jloopY;j++){ + gp->y = j * gp->info.gridSize; + for (i=0;iloopX;i++){ + gp->x = i * gp->info.gridSize; + if (gp->info.isMosaic==TRUE) { BlockMosaic16(gp);} + if (!( (gp->info.hilight ==1)&&(gp->info.shadow ==1))) BlockBevel16(gp); + } + } + break; + case PF_PixelFormat_ARGB32: + for (j=0;jloopY;j++){ + gp->y = j * gp->info.gridSize; + for (i=0;iloopX;i++){ + gp->x = i * gp->info.gridSize; + if (gp->info.isMosaic==TRUE) { BlockMosaic8(gp);} + if (!( (gp->info.hilight ==1)&&(gp->info.shadow ==1))) BlockBevel8(gp); + } + } + 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; + + CFsAE ae(in_data,out_data,params,output,ID_NUM_PARAMS); + err =ae.resultErr(); + if (!err){ + ERR(ae.CopyInToOut()); + ParamInfo info; + gridParam gp; + ERR(GetParams(&ae,&info,&gp)); + ERR(Exec(&ae,&gp)); + } + 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(ae.CopyInToOut()); + gridParam gp; + ERR(GetGridParams(&ae,infoP,&gp)); + ERR(Exec(&ae,&gp)); + 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* extra) +{ + PF_Err err = PF_Err_NONE; + + AEGP_SuiteHandler suites(in_data->pica_basicP); + suites.ANSICallbacksSuite1()->sprintf( out_data->return_msg, + "%s", + reinterpret_cast(extra)); + + 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/VideoGrid/VideoGrid.h b/VideoGrid/VideoGrid.h new file mode 100644 index 0000000..712b3a0 --- /dev/null +++ b/VideoGrid/VideoGrid.h @@ -0,0 +1,174 @@ +//----------------------------------------------------------------------------------- +/* + F's Plugins for VS2010/VS2012 +*/ +//----------------------------------------------------------------------------------- + +#pragma once +#ifndef VideoGrid_H +#define VideoGrid_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" + +enum { + ID_INPUT = 0, // default input layer + ID_GRIDSIZE, + ID_MODE, + ID_HILIGHT, + ID_SHADOW, + ID_HEIGHT, + ID_NUM_PARAMS +}; +#define STR_GRIDSIZE "グリッドサイズ" +#define STR_MODE1 "モード" +#define STR_MODE2 "モザイク" +#define STR_HILIGHT "ハイライト(%)" +#define STR_SHADOW "シャドウ(%)" +#define STR_HEIGHT "ライン幅" + +typedef struct ParamInfo{ + A_long gridSize; + PF_Boolean isMosaic; + PF_FpShort hilight; + PF_FpShort shadow; + A_long height; +} ParamInfo,*ParamInfoP,**ParamInfoH; + +typedef struct gridParam{ + A_long loopX; + A_long loopY; + PF_InData *in_data; + ParamInfo info; + PF_PixelPtr data; + A_long width; + A_long widthTrue; + A_long height; + A_long x; + A_long y; + PF_EffectWorld *out; +} gridParam,*gridParamP,**gridParamH; + +//------------------------------------------------------------------------------------------------- +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); +} +//----------------------------------------------------------------------------------- +inline PF_Pixel lineBright8(PF_Pixel c, PF_FpShort v) +{ + PF_Pixel r; + double vv; + r.alpha = c.alpha; + if (v==1){ + r = c ; + }else if ( v<=0){ + r.blue = r.green = r.red = 0; + }else if ( v>=2){ + r.blue = r.green = r.red = PF_MAX_CHAN8; + + } else if (v<1){ + r.blue = RoundByteFpLong(v * c.blue); + r.green = RoundByteFpLong(v * c.green); + r.red = RoundByteFpLong(v * c.red); + }else{ + vv = v - 1; + r.blue = RoundByteFpLong(c.blue + vv * (PF_MAX_CHAN8 - c.blue)); + r.green = RoundByteFpLong(c.green + vv * (PF_MAX_CHAN8 - c.green)); + r.red = RoundByteFpLong(c.red + vv * (PF_MAX_CHAN8 - c.red)); + } + return r; +} +//------------------------------------------------------------------------------------------------- +inline PF_Pixel16 lineBright16(PF_Pixel16 c, PF_FpShort v) +{ + PF_Pixel16 r; + double vv; + r.alpha = c.alpha; + if (v==1){ + r = c ; + }else if ( v<=0){ + r.blue = r.green = r.red = 0; + }else if ( v>=2){ + r.blue = r.green = r.red = PF_MAX_CHAN16; + + } else if (v<1){ + r.blue = RoundShortFpLong(v * c.blue); + r.green = RoundShortFpLong(v * c.green); + r.red = RoundShortFpLong(v * c.red); + }else{ + vv = v - 1; + r.blue = RoundShortFpLong(c.blue + vv * (PF_MAX_CHAN16 - c.blue)); + r.green = RoundShortFpLong(c.green + vv * (PF_MAX_CHAN16 - c.green)); + r.red = RoundShortFpLong(c.red + vv * (PF_MAX_CHAN16 - c.red)); + } + return r; +} +//------------------------------------------------------------------------------------------------- +inline PF_PixelFloat lineBright32(PF_PixelFloat c, PF_FpShort v) +{ + PF_PixelFloat r; + PF_FpShort vv; + r.alpha = c.alpha; + if (v==1){ + r = c ; + }else if ( v<=0){ + r.blue = r.green = r.red = 0; + }else if ( v>=2){ + r.blue = r.green = r.red = 1; + + } else if (v<1){ + r.blue = RoundFpShort(v * c.blue); + r.green = RoundFpShort(v * c.green); + r.red = RoundFpShort(v * c.red); + }else{ + vv = v - 1; + r.blue = RoundFpShort(c.blue + vv * (1 - c.blue)); + r.green = RoundFpShort(c.green + vv * (1 - c.green)); + r.red = RoundFpShort(c.red + vv * (1 - c.red)); + } + return r; +} +//------------------------------------------------------------------------------------------------- + +void BlockBevel8(gridParam *prm); +void BlockBevel16(gridParam *prm); +void BlockBevel32(gridParam *prm); +void BlockMosaic8(gridParam *prm); +void BlockMosaic16(gridParam *prm); +void BlockMosaic32(gridParam *prm); + +#endif // VideoGrid_H \ No newline at end of file diff --git a/VideoGrid/VideoGridPiPL.r b/VideoGrid/VideoGridPiPL.r new file mode 100644 index 0000000..9dc175a --- /dev/null +++ b/VideoGrid/VideoGridPiPL.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 { + 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/VideoGrid/Win/VideoGrid.vcxproj b/VideoGrid/Win/VideoGrid.vcxproj new file mode 100644 index 0000000..0b892fa --- /dev/null +++ b/VideoGrid/Win/VideoGrid.vcxproj @@ -0,0 +1,588 @@ +サソ + + + + Debug + Win32 + + + Debug + x64 + + + Release-MD + Win32 + + + Release-MD + x64 + + + Release + Win32 + + + Release + x64 + + + + {24CD6769-03B6-42F0-A48D-C3DF38DD3275} + VideoGrid + 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/VideoGrid.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/VideoGrid.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/VideoGrid.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)_CS4.aex + true + false + $(IntDir)$(ProjectName).pdb + Windows + false + + + $(IntDir)$(ProjectName).lib + MachineX86 + + + + + _DEBUG;%(PreprocessorDefinitions) + true + true + Win32 + .\Debug/VideoGrid.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)_CS4.aex + true + false + $(IntDir)$(ProjectName).pdb + Windows + false + + + $(IntDir)$(ProjectName).lib + MachineX86 + + + + + _DEBUG;%(PreprocessorDefinitions) + true + true + X64 + .\Debug/VideoGrid.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/VideoGrid.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/VideoGrid/Win/VideoGrid.vcxproj.filters b/VideoGrid/Win/VideoGrid.vcxproj.filters new file mode 100644 index 0000000..ea82822 --- /dev/null +++ b/VideoGrid/Win/VideoGrid.vcxproj.filters @@ -0,0 +1,160 @@ +サソ + + + + {179321a2-ec05-46e5-9028-931bae377ae2} + h;hpp;hxx;hm;inl;fi;fd + + + {2177c699-6b9f-47c8-80e6-53d50c802cfd} + + + {34e5206c-de17-4690-96f2-e8e38acca59d} + ico;cur;bmp;dlg;rc2;rct;bin;cnt;rtf;gif;jpg;jpeg;jpe + + + {18ceaa2c-303b-4daf-92eb-ca76beb2b146} + + + {3c9c3d4a-9c19-4673-81a5-83607c01151a} + + + {5f72e606-ac5a-4b0e-a10f-cd211e7fca28} + + + {62ae4490-df2b-40b7-a3c3-d95ff6f74604} + + + {836b1fa3-9f7c-4c4f-b236-b751afc41013} + + + + + 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 + + + Supporting code\Fs + + + + + + + + Resource Files + + + \ No newline at end of file diff --git a/VideoGrid/Win/VideoGridPiPL.rc b/VideoGrid/Win/VideoGridPiPL.rc new file mode 100644 index 0000000..2d11353 --- /dev/null +++ b/VideoGrid/Win/VideoGridPiPL.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 VideoGrid\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, + "\x0DF's VideoGrid\0\0", + + "MIB8", + 0x6165464CL, + 0L, + 4L + 0L, + + +END + diff --git a/VideoLine/Fs_Target.h b/VideoLine/Fs_Target.h new file mode 100644 index 0000000..eb8b688 --- /dev/null +++ b/VideoLine/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 VideoLine" + +//----------------------------------------------------------------------------------- +//プラグインの説明に使われる文字 +#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 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/VideoLine/VideoLine.cpp b/VideoLine/VideoLine.cpp new file mode 100644 index 0000000..6f9249d --- /dev/null +++ b/VideoLine/VideoLine.cpp @@ -0,0 +1,641 @@ +//----------------------------------------------------------------------------------- +/* + F's Plugins for VS2010/VS2012 +*/ + +//----------------------------------------------------------------------------------- + +#include "VideoLine.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); + +//----------------------------------------------------------------------------------- +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); + PF_ADD_FIXED( STR_BRIGHT, //パラメータの名前 + 0, //数値入力する場合の最小値 + 200, //数値入力する場合の最大値 + 0, //スライダーの最小値 + 200, //スライダーの最大値 + 75, //デフォルトの値 + 1,//数値表示に関するフラグ + 0, + 0, + ID_BRIGHT + ); + + //2個目のパラメータ + AEFX_CLR_STRUCT(def); + PF_ADD_SLIDER( STR_HEIGHT, //パラメータの名前 + 1, //数値入力する場合の最小値 + 100, //数値入力する場合の最大値 + 1, //スライダーの最小値 + 16, //スライダーの最大値 + 2, //デフォルトの値 + ID_HEIGHT + ); + + + //3個目のパラメータ + AEFX_CLR_STRUCT(def); + PF_ADD_CHECKBOX(STR_REV1,STR_REV2, FALSE,0, ID_REV); + + AEFX_CLR_STRUCT(def); + PF_ADD_SLIDER( STR_INTER, //パラメータの名前 + -100, //数値入力する場合の最小値 + 100, //数値入力する場合の最大値 + 0, //スライダーの最小値 + 10, //スライダーの最大値 + 0, //デフォルトの値 + ID_INTER + ); + + //ポップアップメニュー + AEFX_CLR_STRUCT(def); + PF_ADD_POPUP( STR_DIR, + 2, //メニューの数 + 1, //デフォルト + STR_DIRSTR, + ID_DIR + ); + + AEFX_CLR_STRUCT(def); + PF_ADD_ANGLE( + STR_OFFSET, + 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)&&(in_data->appl_id != 'PrMr')){ + //-------------------- + + ERR(ae.GetNewEffectStreamAll()); + if (!err){ + A_Boolean hide_themB[ID_NUM_PARAMS]; + for ( A_long i=1; iout_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){ + A_long w = niP->height + niP->inter; + PF_Fixed fy; + if ( niP->vurFlag == TRUE){ + fy = (yL<<16) - (PF_Fixed)(niP->offset*(1L<<16)); + }else { + fy = (xL<<16) - (PF_Fixed)(niP->offset*(1L<<16)); + } + PF_Fixed y = fy % (w<<16); + A_long ya = y >> 16; + PF_FpShort yd = (PF_FpShort)(y & 0xFFFF)/65536; + PF_FpShort brt = 0; + + + if (niP->revFlag ==FALSE){ + if ( ya==0){ + brt = niP->bright * yd; + }else if ( ya height){ + brt = niP->bright; + }else if (ya ==niP->height){ + brt = niP->bright *((PF_FpShort)1.0 - yd); + } + }else{ + if ( ya==0){ + brt = niP->bright *((PF_FpShort)1.0 - yd); + }else if ((ya ==niP->height)){ + brt = niP->bright * yd; + }else if (ya >niP->height){ + brt = niP->bright; + } + } + if ( brt>0){ + if ( niP->minus == TRUE){ + outP->blue = RoundByteFpLong((PF_FpShort)outP->blue - outP->blue * brt); + outP->green = RoundByteFpLong((PF_FpShort)outP->green - outP->green * brt); + outP->red = RoundByteFpLong((PF_FpShort)outP->red - outP->red * brt); + }else{ + outP->blue = RoundByteFpLong((PF_FpShort)outP->blue + (PF_MAX_CHAN8 - outP->blue) * brt); + outP->green = RoundByteFpLong((PF_FpShort)outP->green + (PF_MAX_CHAN8 - outP->green) * brt); + outP->red = RoundByteFpLong((PF_FpShort)outP->red + (PF_MAX_CHAN8 - outP->red) * brt); + } + } + } + + 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){ + A_long w = niP->height + niP->inter; + PF_Fixed fy; + if ( niP->vurFlag == TRUE){ + fy = (yL<<16) - (PF_Fixed)(niP->offset*(1L<<16)); + }else { + fy = (xL<<16) - (PF_Fixed)(niP->offset*(1L<<16)); + } + PF_Fixed y = fy % (w<<16); + A_long ya = y >> 16; + PF_FpShort yd = (PF_FpShort)(y & 0xFFFF)/65536; + PF_FpShort brt = 0; + + + if (niP->revFlag ==FALSE){ + if ( ya==0){ + brt = niP->bright * yd; + }else if ( ya height){ + brt = niP->bright; + }else if (ya ==niP->height){ + brt = niP->bright *((PF_FpShort)1.0 - yd); + } + }else{ + if ( ya==0){ + brt = niP->bright *((PF_FpShort)1.0 - yd); + }else if ((ya ==niP->height)){ + brt = niP->bright * yd; + }else if (ya >niP->height){ + brt = niP->bright; + } + } + if ( brt>0){ + if ( niP->minus == TRUE){ + outP->blue = RoundShortFpLong(outP->blue - outP->blue * brt); + outP->green = RoundShortFpLong(outP->green - outP->green * brt); + outP->red = RoundShortFpLong(outP->red - outP->red * brt); + }else{ + outP->blue = RoundShortFpLong(outP->blue + (PF_MAX_CHAN16 - outP->blue) * brt); + outP->green = RoundShortFpLong(outP->green + (PF_MAX_CHAN16 - outP->green) * brt); + outP->red = RoundShortFpLong(outP->red + (PF_MAX_CHAN16 - outP->red) * brt); + } + } + } + + 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 * niP = reinterpret_cast(refcon); + + if (niP){ + A_long w = niP->height + niP->inter; + PF_Fixed fy; + if ( niP->vurFlag == TRUE){ + fy = (yL<<16) - (PF_Fixed)(niP->offset*(1L<<16)); + }else { + fy = (xL<<16) - (PF_Fixed)(niP->offset*(1L<<16)); + } + PF_Fixed y = fy % (w<<16); + A_long ya = y >> 16; + PF_FpShort yd = (PF_FpShort)(y & 0xFFFF)/65536; + PF_FpShort brt = 0; + + + if (niP->revFlag ==FALSE){ + if ( ya==0){ + brt = niP->bright * yd; + }else if ( ya height){ + brt = niP->bright; + }else if (ya ==niP->height){ + brt = niP->bright *((PF_FpShort)1.0 - yd); + } + }else{ + if ( ya==0){ + brt = niP->bright *((PF_FpShort)1.0 - yd); + }else if ((ya ==niP->height)){ + brt = niP->bright * yd; + }else if (ya >niP->height){ + brt = niP->bright; + } + } + if ( brt>0){ + if ( niP->minus == TRUE){ + outP->blue = RoundFpShortDouble(outP->blue - outP->blue * brt); + outP->green = RoundFpShortDouble(outP->green - outP->green * brt); + outP->red = RoundFpShortDouble(outP->red - outP->red * brt); + }else{ + outP->blue = RoundFpShortDouble(outP->blue + ((PF_FpShort)1.0 - outP->blue) * brt); + outP->green = RoundFpShortDouble(outP->green + ((PF_FpShort)1.0 - outP->green) * brt); + outP->red = RoundFpShortDouble(outP->red + ((PF_FpShort)1.0 - outP->red) * brt); + } + } + } + + return err; +} + +#endif +//------------------------------------------------------------------------------------------------- +static PF_Err GetParams(CFsAE *ae, ParamInfo *infoP) +{ + PF_Err err = PF_Err_NONE; + + PF_Fixed f; + ERR(ae->GetFIXED(ID_BRIGHT,&f)); + if (!err){ + f = ( f-(100L<<16)) / 100; + if ( f<0){ + infoP->minus = TRUE; + f *= -1; + }else{ + infoP->minus = FALSE; + } + infoP->bright = (PF_FpShort)f / (PF_FpShort)(1L<<16); + } + ERR(ae->GetADD(ID_HEIGHT,&infoP->height)); + if(!err) infoP->height = ae->downScale(infoP->height); + ERR(ae->GetCHECKBOX(ID_REV,&infoP->revFlag)); + ERR(ae->GetADD(ID_INTER,&infoP->inter)); + if(!err) { + infoP->inter = ae->downScaleNoClip(infoP->inter); + infoP->inter += infoP->height; + if (infoP->inter<=0) infoP->inter = 1; + } + ERR(ae->GetCHECKBOX(ID_DIR,&infoP->vurFlag)); + + ERR(ae->GetFIXED(ID_OFFSET,&f)); + if (!err){ + f = f % (360L<<16); + infoP->offset = (PF_FpShort)f/65536; + infoP->offset = infoP->offset/360; + if ( infoP->offset<0)infoP->offset = 1 + infoP->offset; + infoP->offset = infoP->offset * (infoP->height + infoP->inter); + } + + return err; +} +//------------------------------------------------------------------------------------------------- +static PF_Err + Exec (CFsAE *ae , ParamInfo *infoP) +{ + PF_Err err = PF_Err_NONE; + + //画面をコピー + ERR(ae->CopyInToOut()); + + if (infoP->bright!=0){ + 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){ + 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, + "RespondtoAEGP : %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/VideoLine/VideoLine.h b/VideoLine/VideoLine.h new file mode 100644 index 0000000..075793b --- /dev/null +++ b/VideoLine/VideoLine.h @@ -0,0 +1,88 @@ +//----------------------------------------------------------------------------------- +/* + F's Plugins for VS2010/VS2012 +*/ +//----------------------------------------------------------------------------------- + + +#pragma once + +#ifndef VideoLine_H +#define VideoLine_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" + + +enum { + ID_INPUT = 0, // default input layer + ID_BRIGHT, + ID_HEIGHT, + ID_REV, + ID_INTER, + ID_DIR, + ID_OFFSET, + ID_NUM_PARAMS +}; + +#define STR_BRIGHT "ラインの明るさ(%)" +#define STR_HEIGHT "ラインの高さ(dot)" +#define STR_REV1 "ラインの位置" +#define STR_REV2 "反転する" +#define STR_INTER "間隔補正(dot)" +#define STR_DIR "方向" +#define STR_DIRSTR "水平|垂直" +#define STR_OFFSET "オフセット" + +typedef struct{ + PF_FpShort bright; + PF_Boolean minus; + A_long height; + A_long inter; + PF_Boolean revFlag; + PF_Boolean vurFlag; + PF_FpShort offset; +} 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 // VideoLine_H \ No newline at end of file diff --git a/VideoLine/VideoLinePiPL.r b/VideoLine/VideoLinePiPL.r new file mode 100644 index 0000000..6ddd222 --- /dev/null +++ b/VideoLine/VideoLinePiPL.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/VideoLine/Win/VideoLine.vcxproj b/VideoLine/Win/VideoLine.vcxproj new file mode 100644 index 0000000..89017b9 --- /dev/null +++ b/VideoLine/Win/VideoLine.vcxproj @@ -0,0 +1,329 @@ +サソ + + + + Debug + x64 + + + Release-MD + x64 + + + Release + x64 + + + + {2FCA0603-734A-4C23-B96D-794991FBD82C} + VideoLine + 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/VideoLine.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/VideoLine.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/VideoLine.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/VideoLine/Win/VideoLine.vcxproj.filters b/VideoLine/Win/VideoLine.vcxproj.filters new file mode 100644 index 0000000..ce456cf --- /dev/null +++ b/VideoLine/Win/VideoLine.vcxproj.filters @@ -0,0 +1,154 @@ + + + + + {73e14913-2356-446c-8e55-74d86599b78b} + h;hpp;hxx;hm;inl;fi;fd + + + {3413376e-eea4-450c-804d-c254b41d1864} + + + {3d3fd68c-da5d-410e-925b-58358b6beb96} + ico;cur;bmp;dlg;rc2;rct;bin;cnt;rtf;gif;jpg;jpeg;jpe + + + {3c4ba308-7e33-4f41-97a6-a1e815ddf9e0} + + + {d2134188-312e-4cc3-b5fe-2ebf9d3cb718} + + + {c3ae2f07-7cf3-4b72-9551-90c29d36a808} + + + {aee5ce9e-fe9f-4fdd-b15f-35325c2bd7ac} + + + {f4d1e403-87ae-4d6c-ae4b-af2bed19e62e} + + + + + 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/VideoLine/Win/VideoLinePiPL.rc b/VideoLine/Win/VideoLinePiPL.rc new file mode 100644 index 0000000..b87d17d --- /dev/null +++ b/VideoLine/Win/VideoLinePiPL.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 VideoLine\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, + 33556032L, + + "MIB8", + "2LGe", + 0L, + 4L, + 5193L, + + "MIB8", + "ANMe", + 0, 0x0, + 16, 0x0, + "\x0DF's VideoLine\0\0", + + "MIB8", + 0x6165464CL, + 0L, + 4L + 0L, + + +END + diff --git a/VideoLine2nd/Fs_Target.h b/VideoLine2nd/Fs_Target.h new file mode 100644 index 0000000..dbb006a --- /dev/null +++ b/VideoLine2nd/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 VideoLine2nd" + +//----------------------------------------------------------------------------------- +//プラグインの説明に使われる文字 +#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 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/VideoLine2nd/VideoLine2nd.cpp b/VideoLine2nd/VideoLine2nd.cpp new file mode 100644 index 0000000..94b097d --- /dev/null +++ b/VideoLine2nd/VideoLine2nd.cpp @@ -0,0 +1,457 @@ +//----------------------------------------------------------------------------------- +/* + F's Plugins for VS2010/VS2012 +*/ + +//----------------------------------------------------------------------------------- + +#include "VideoLine2nd.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); + +//----------------------------------------------------------------------------------- +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_FLOAT_SLIDER(STR_BRIGHT, //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_BRIGHT + ); + //---------------------------------------------------------------- + AEFX_CLR_STRUCT(def); + PF_ADD_SLIDER( STR_HEIGHT, //パラメータの名前 + 1, //数値入力する場合の最小値 + 100, //数値入力する場合の最大値 + 1, //スライダーの最小値 + 16, //スライダーの最大値 + 2, //デフォルトの値 + ID_HEIGHT + ); + + //---------------------------------------------------------------- + AEFX_CLR_STRUCT(def); + PF_ADD_SLIDER( STR_INTER, //パラメータの名前 + 0, //数値入力する場合の最小値 + 100, //数値入力する場合の最大値 + 0, //スライダーの最小値 + 10, //スライダーの最大値 + 0, //デフォルトの値 + ID_INTER + ); + + //---------------------------------------------------------------- + //ポップアップメニュー + AEFX_CLR_STRUCT(def); + PF_ADD_POPUP( STR_DIR, + 2, //メニューの数 + 1, //デフォルト + STR_DIRSTR, + ID_DIR + ); + + //---------------------------------------------------------------- + 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); + + PF_FpLong brt = niP->bright; + if (brt == 0) return err; + + A_long w = niP->height*2 + niP->inter; + A_long fy; + if ( niP->vurFlag == TRUE){ + fy = yL % w; + }else { + fy = xL % w; + } + + + if ( fy < niP->height){ + if (brt < 0) { + outP->blue = RoundByteFpLong((PF_FpLong)outP->blue + outP->blue * brt); + outP->green = RoundByteFpLong((PF_FpLong)outP->green + outP->green * brt); + outP->red = RoundByteFpLong((PF_FpLong)outP->red + outP->red * brt); + } + else { + outP->blue = RoundByteFpLong((PF_FpLong)outP->blue + (PF_MAX_CHAN8 - outP->blue) * brt); + outP->green = RoundByteFpLong((PF_FpLong)outP->green + (PF_MAX_CHAN8 - outP->green) * brt); + outP->red = RoundByteFpLong((PF_FpLong)outP->red + (PF_MAX_CHAN8 - outP->red) * brt); + } + } + 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; + + + 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 * niP = reinterpret_cast(refcon); + + + return err; +} + +#endif +//------------------------------------------------------------------------------------------------- +static PF_Err GetParams(CFsAE *ae, ParamInfo *infoP) +{ + PF_Err err = PF_Err_NONE; + + ERR(ae->GetFLOAT(ID_BRIGHT,&infoP->bright)); + infoP->bright /= 100; + + ERR(ae->GetADD(ID_HEIGHT,&infoP->height)); + if(!err) infoP->height = ae->downScale(infoP->height); + + + ERR(ae->GetADD(ID_INTER,&infoP->inter)); + if(!err) { + infoP->inter = ae->downScaleNoClip(infoP->inter); + } + + ERR(ae->GetCHECKBOX(ID_DIR,&infoP->vurFlag)); + + + return err; +} +//------------------------------------------------------------------------------------------------- +static PF_Err + Exec (CFsAE *ae , ParamInfo *infoP) +{ + PF_Err err = PF_Err_NONE; + + //画面をコピー + ERR(ae->CopyInToOut()); + + if (infoP->bright!=0){ + 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){ + 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, + "RespondtoAEGP : %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/VideoLine2nd/VideoLine2nd.h b/VideoLine2nd/VideoLine2nd.h new file mode 100644 index 0000000..b5e4405 --- /dev/null +++ b/VideoLine2nd/VideoLine2nd.h @@ -0,0 +1,80 @@ +//----------------------------------------------------------------------------------- +/* + F's Plugins for VS2010/VS2012 +*/ +//----------------------------------------------------------------------------------- + + +#pragma once + +#ifndef VideoLine2nd_H +#define VideoLine2nd_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" + + +enum { + ID_INPUT = 0, // default input layer + ID_BRIGHT, + ID_HEIGHT, + ID_INTER, + ID_DIR, + ID_NUM_PARAMS +}; + +#define STR_BRIGHT "ラインの明るさ(%)" +#define STR_HEIGHT "ラインの高さ(dot)" +#define STR_INTER "間隔補正(dot)" +#define STR_DIR "方向" +#define STR_DIRSTR "水平|垂直" + +typedef struct{ + PF_FpLong bright; + A_long height; + A_long inter; + PF_Boolean vurFlag; +} 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 // VideoLine2nd_H \ No newline at end of file diff --git a/VideoLine2nd/VideoLine2ndPiPL.r b/VideoLine2nd/VideoLine2ndPiPL.r new file mode 100644 index 0000000..6ddd222 --- /dev/null +++ b/VideoLine2nd/VideoLine2ndPiPL.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/VideoLine2nd/Win/VideoLine2nd.vcxproj b/VideoLine2nd/Win/VideoLine2nd.vcxproj new file mode 100644 index 0000000..ddbf023 --- /dev/null +++ b/VideoLine2nd/Win/VideoLine2nd.vcxproj @@ -0,0 +1,329 @@ + + + + + Debug + x64 + + + Release-MD + x64 + + + Release + x64 + + + + {B90C5834-E60D-4E09-A286-44C8004ADF7E} + VideoLine2nd + 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/VideoLine2nd.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/VideoLine2nd.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/VideoLine2nd.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/VideoLine2nd/Win/VideoLine2nd.vcxproj.filters b/VideoLine2nd/Win/VideoLine2nd.vcxproj.filters new file mode 100644 index 0000000..080f849 --- /dev/null +++ b/VideoLine2nd/Win/VideoLine2nd.vcxproj.filters @@ -0,0 +1,154 @@ + + + + + {73e14913-2356-446c-8e55-74d86599b78b} + h;hpp;hxx;hm;inl;fi;fd + + + {3413376e-eea4-450c-804d-c254b41d1864} + + + {3d3fd68c-da5d-410e-925b-58358b6beb96} + ico;cur;bmp;dlg;rc2;rct;bin;cnt;rtf;gif;jpg;jpeg;jpe + + + {3c4ba308-7e33-4f41-97a6-a1e815ddf9e0} + + + {d2134188-312e-4cc3-b5fe-2ebf9d3cb718} + + + {c3ae2f07-7cf3-4b72-9551-90c29d36a808} + + + {aee5ce9e-fe9f-4fdd-b15f-35325c2bd7ac} + + + {f4d1e403-87ae-4d6c-ae4b-af2bed19e62e} + + + + + 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/VideoLine2nd/Win/VideoLine2ndPiPL.rc b/VideoLine2nd/Win/VideoLine2ndPiPL.rc new file mode 100644 index 0000000..5ed081c --- /dev/null +++ b/VideoLine2nd/Win/VideoLine2ndPiPL.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 VideoLine2nd\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 + 591360L, + + "MIB8", + 0x65494E46L, + 0L, + 2L + 0L, + + "MIB8", + "OLGe", + 0L, + 4L, + 33556032L, + + "MIB8", + "2LGe", + 0L, + 4L, + 5193L, + + "MIB8", + "ANMe", + 0, 0x0, + 20, 0x0, + "\x10F's VideoLine2nd\0\0\0", + + "MIB8", + 0x6165464CL, + 0L, + 4L + 0L, + + +END + diff --git a/VideoLine2nd/Win/VideoLinePiPL.rc b/VideoLine2nd/Win/VideoLinePiPL.rc new file mode 100644 index 0000000..d2a0b2e --- /dev/null +++ b/VideoLine2nd/Win/VideoLinePiPL.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 VideoLine\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, 2, + + "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, + "\x0DF's VideoLine\0\0", + + "MIB8", + 0x6165464CL, + 0L, + 4L + 0L, + + +END + diff --git a/colorThreshold/Fs_Entry.h b/colorThreshold/Fs_Entry.h new file mode 100644 index 0000000..a84f698 --- /dev/null +++ b/colorThreshold/Fs_Entry.h @@ -0,0 +1,227 @@ +//----------------------------------------------------------------------------------- +/* + colorThreshold 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/colorThreshold/Fs_Target.h b/colorThreshold/Fs_Target.h new file mode 100644 index 0000000..8fb4845 --- /dev/null +++ b/colorThreshold/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 colorThreshold" + +//----------------------------------------------------------------------------------- +//プラグインの説明に使われる文字 +#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/colorThreshold/Win/8_16_32.txt b/colorThreshold/Win/8_16_32.txt new file mode 100644 index 0000000..04163d1 --- /dev/null +++ b/colorThreshold/Win/8_16_32.txt @@ -0,0 +1,22 @@ +0 +1 129 0.0039 0.0039,21568627451 0.9945 127.7952 +2 257 0.0078 0.0078,43137254902 + +3 386 0.0078 0.0117,647058823529 +4 514 0.0157 0.0156,862745098039 +5 643 0.0196 0.0196,078431372549 +6 771 0.0235 0.0235,294117647059 +7 900 0.0275 0.0274,509803921569 +8 1028 0.0314 0.0313,725490196078 +9 1157 0.0353 0.0352,941176470588 +10 1285 0.0392 0.0392,156862745098 +20 2570 0.0784 +30 38552 0.1176 +32 4112 0.1255 +40 5140 0.1569 +50 6425 0.1961 +64 8224 0.2510 +100 12850 0.3922 +128 16448 0.5020 +200 25700 0.7843 +255 32768 1.0 diff --git a/colorThreshold/Win/colorThreshold.sln b/colorThreshold/Win/colorThreshold.sln new file mode 100644 index 0000000..6b3fd54 --- /dev/null +++ b/colorThreshold/Win/colorThreshold.sln @@ -0,0 +1,26 @@ + +Microsoft Visual Studio Solution File, Format Version 11.00 +# Visual Studio 2010 +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "colorThreshold", "colorThreshold.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/colorThreshold/Win/colorThreshold.vcxproj b/colorThreshold/Win/colorThreshold.vcxproj new file mode 100644 index 0000000..8495d5a --- /dev/null +++ b/colorThreshold/Win/colorThreshold.vcxproj @@ -0,0 +1,595 @@ +サソ + + + + Debug + Win32 + + + Debug + x64 + + + Release-MD + Win32 + + + Release-MD + x64 + + + Release + Win32 + + + Release + x64 + + + + {237FD67B-9D84-415B-ADE7-61D01A74ED16} + colorThreshold + colorThreshold + 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/colorThreshold.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/colorThreshold.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/colorThreshold.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/colorThreshold.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/colorThreshold.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/colorThreshold.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/colorThreshold/Win/colorThreshold.vcxproj.filters b/colorThreshold/Win/colorThreshold.vcxproj.filters new file mode 100644 index 0000000..5118f2b --- /dev/null +++ b/colorThreshold/Win/colorThreshold.vcxproj.filters @@ -0,0 +1,188 @@ +サソ + + + + {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/colorThreshold/Win/colorThresholdPiPL.rc b/colorThreshold/Win/colorThresholdPiPL.rc new file mode 100644 index 0000000..39ce9e9 --- /dev/null +++ b/colorThreshold/Win/colorThresholdPiPL.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 colorThreshold\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, + 20, 0x0, + "\x12F's colorThreshold\0", + + "MIB8", + 0x6165464CL, + 0L, + 4L + 0L, + + +END + diff --git a/colorThreshold/colorThreshold.cpp b/colorThreshold/colorThreshold.cpp new file mode 100644 index 0000000..fbffd44 --- /dev/null +++ b/colorThreshold/colorThreshold.cpp @@ -0,0 +1,539 @@ +//----------------------------------------------------------------------------------- +/* + F's Plugins for VS2010/VS2012 +*/ +//----------------------------------------------------------------------------------- + + +#include "colorThreshold.h" + +#include +#include +//------------------------------------------------------------------------------------------------- +//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_ALPHA_LV, //Name + 0, //VALID_MIN + 100, //VALID_MAX + 25, //SLIDER_MIN + 75, //SLIDER_MAX + 1, //CURVE_TOLERANCE + 50, //DFLT + 1, //PREC + 0, //DISP + 0, //WANT_PHASE + ID_ALPHA_LV + ); + //---------------------------------------------------------------- + AEFX_CLR_STRUCT(def); + PF_ADD_FLOAT_SLIDER(STR_HS_LV, //Name + 0, //VALID_MIN + 10, //VALID_MAX + 0, //SLIDER_MIN + 1, //SLIDER_MAX + 0, //CURVE_TOLERANCE + 0, //DFLT + 1, //PREC + 0, //DISP + 0, //WANT_PHASE + ID_HS_LV + ); + //---------------------------------------------------------------- + AEFX_CLR_STRUCT(def); + PF_ADD_FLOAT_SLIDER(STR_L_LV, //Name + 0, //VALID_MIN + 100, //VALID_MAX + 25, //SLIDER_MIN + 75, //SLIDER_MAX + 1, //CURVE_TOLERANCE + 50, //DFLT + 1, //PREC + 0, //DISP + 0, //WANT_PHASE + ID_L_LV + ); + //---------------------------------------------------------------- + AEFX_CLR_STRUCT(def); + //def.flags = PF_ParamFlag_START_COLLAPSED; //これをつけると表示時に開いた状態になる + PF_ADD_TOPIC(STR_TOPIC_NAIN_COL, ID_TOPIC_NAIN_COL); + //---------------------------------------------------------------- + AEFX_CLR_STRUCT(def); + PF_ADD_CHECKBOX(STR_MAIN_COL1_ON, + STR_ON, + TRUE, + 0, + ID_MAIN_COL1_ON + ); + //---------------------------------------------------------------- + AEFX_CLR_STRUCT(def); + def.flags = PF_ParamFlag_CANNOT_TIME_VARY;//これをつけるとキーフレームが撃てなくなる + PF_ADD_COLOR( STR_MAIN_COL1, + 10, // Red + 10, //Green + 10, //Blue + ID_MAIN_COL1 + ); + //---------------------------------------------------------------- + AEFX_CLR_STRUCT(def); + PF_ADD_FLOAT_SLIDER(STR_MAIN_COL1_HS, //Name + 0, //VALID_MIN + 100, //VALID_MAX + 0, //SLIDER_MIN + 50, //SLIDER_MAX + 1, //CURVE_TOLERANCE + 50, //DFLT + 1, //PREC + 0, //DISP + 0, //WANT_PHASE + ID_MAIN_COL1_HS + ); + //---------------------------------------------------------------- + AEFX_CLR_STRUCT(def); + PF_ADD_FLOAT_SLIDER(STR_MAIN_COL1_LV, //Name + 0, //VALID_MIN + 100, //VALID_MAX + 0, //SLIDER_MIN + 50, //SLIDER_MAX + 1, //CURVE_TOLERANCE + 50, //DFLT + 1, //PREC + 0, //DISP + 0, //WANT_PHASE + ID_MAIN_COL1_LV + ); + //---------------------------------------------------------------- + AEFX_CLR_STRUCT(def); + PF_ADD_CHECKBOX(STR_MAIN_COL2_ON, + STR_ON, + FALSE, + 0, + ID_MAIN_COL2_ON + ); + //---------------------------------------------------------------- + AEFX_CLR_STRUCT(def); + def.flags = PF_ParamFlag_CANNOT_TIME_VARY;//これをつけるとキーフレームが撃てなくなる + PF_ADD_COLOR( STR_MAIN_COL2, + PF_MAX_CHAN8-1, // Red + PF_MAX_CHAN8-1, //Green + PF_MAX_CHAN8-1, //Blue + ID_MAIN_COL2 + ); + //---------------------------------------------------------------- + AEFX_CLR_STRUCT(def); + PF_ADD_FLOAT_SLIDER(STR_MAIN_COL2_HS, //Name + 0, //VALID_MIN + 100, //VALID_MAX + 0, //SLIDER_MIN + 10, //SLIDER_MAX + 1, //CURVE_TOLERANCE + 1, //DFLT + 1, //PREC + 0, //DISP + 0, //WANT_PHASE + ID_MAIN_COL2_HS + ); + //---------------------------------------------------------------- + AEFX_CLR_STRUCT(def); + PF_ADD_FLOAT_SLIDER(STR_MAIN_COL2_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_MAIN_COL2_LV + ); + //---------------------------------------------------------------- + AEFX_CLR_STRUCT(def); + PF_ADD_CHECKBOX(STR_MAIN_COL3_ON, + STR_ON, + FALSE, + 0, + ID_MAIN_COL3_ON + ); + //---------------------------------------------------------------- + AEFX_CLR_STRUCT(def); + def.flags = PF_ParamFlag_CANNOT_TIME_VARY;//これをつけるとキーフレームが撃てなくなる + PF_ADD_COLOR( STR_MAIN_COL3, + 0, // Red + 0, //Green + 0, //Blue + ID_MAIN_COL3 + ); + //---------------------------------------------------------------- + AEFX_CLR_STRUCT(def); + PF_ADD_FLOAT_SLIDER(STR_MAIN_COL3_HS, //Name + 0, //VALID_MIN + 100, //VALID_MAX + 0, //SLIDER_MIN + 10, //SLIDER_MAX + 1, //CURVE_TOLERANCE + 1, //DFLT + 1, //PREC + 0, //DISP + 0, //WANT_PHASE + ID_MAIN_COL3_HS + ); + //---------------------------------------------------------------- + AEFX_CLR_STRUCT(def); + PF_ADD_FLOAT_SLIDER(STR_MAIN_COL3_LV, //Name + 0, //VALID_MIN + 100, //VALID_MAX + 0, //SLIDER_MIN + 50, //SLIDER_MAX + 1, //CURVE_TOLERANCE + 50, //DFLT + 1, //PREC + 0, //DISP + 0, //WANT_PHASE + ID_MAIN_COL3_LV + ); + //---------------------------------------------------------------- + AEFX_CLR_STRUCT(def); + PF_END_TOPIC(ID_TOPIC_NAIN_COL_END); + //---------------------------------------------------------------- + AEFX_CLR_STRUCT(def); + //def.flags = PF_ParamFlag_START_COLLAPSED; //これをつけると表示時に開いた状態になる + PF_ADD_TOPIC(STR_TOPIC_SUB_COL, ID_TOPIC_SUB_COL); + //---------------------------------------------------------------- + AEFX_CLR_STRUCT(def); + PF_ADD_SLIDER( STR_SUB_COL_COUNT, //パラメータの名前 + 0, //数値入力する場合の最小値 + COUNT_OF_SUB, //数値入力する場合の最大値 + 0, //スライダーの最小値 + COUNT_OF_SUB, //スライダーの最大値 + 0, //デフォルトの値 + ID_SUB_COL_COUNT + ); + //---------------------------------------------------------------- + char num[255] = {"\0"}; + for (A_long i=0; i< COUNT_OF_SUB; i++){ +#ifdef AE_OS_WIN + sprintf_s(num,"UserColor_%d",i+1); +#else + sprintf(num,"UserColor_%d",i+1); +#endif + AEFX_CLR_STRUCT(def); + def.flags = PF_ParamFlag_CANNOT_TIME_VARY;//これをつけるとキーフレームが撃てなくなる + PF_ADD_COLOR( num, + 0, // Red + 0, //Green + 0, //Blue + ID_SUB_COL(i) + ); + } + //---------------------------------------------------------------- + AEFX_CLR_STRUCT(def); + PF_END_TOPIC(ID_TOPIC_SUB_COL_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; + + 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 A_long findColor8(PF_Pixel *tbl, A_long cnt,PF_Pixel p) +{ + A_long ret = -1; + if (cnt<=0) return ret; + + for (A_long i= 0; iGetFLOAT(ID_ALPHA_LV,&infoP->alpha_level)); + infoP->alpha_level /= 100; + infoP->alpha_border = RoundByteFpLong((double)PF_MAX_CHAN8 * infoP->alpha_level+0.5); + + ERR(ae->GetFLOAT(ID_HS_LV,&infoP->hs_level)); + infoP->hs_level /= 100; + ERR(ae->GetFLOAT(ID_L_LV,&infoP->l_level)); + infoP->l_level /= 100; + + + PF_Pixel c; + A_long idx = 0; + PF_FpLong d; + + + //ピクセルテーブルの初期化 + PF_Pixel bl = {0,0,0,0}; + PF_Pixel16 bl16 = {0,0,0,0}; + PF_Pixel32 bl32 = {0,0,0,0}; + for ( int i=0; imain_col[i] = bl; + infoP->main_col16[i] = bl16; + infoP->main_col32[i] = bl32; + } + for ( int i=0; isub_col[i] = bl; + infoP->sub_col16[i] = bl16; + infoP->sub_col32[i] = bl32; + } + idx = 0; + for ( int i=0; iGetCHECKBOX(ID_MAIN_COL_ON(i) ,&m)); + if ((!err)&&(m==TRUE)){ + ERR(ae->GetCOLOR(ID_MAIN_COL(i) ,&c)); + if (!err) { + infoP->main_col[idx] = c; + ERR(ae->GetFLOAT(ID_MAIN_COL_HS(i),&d)); + if(!err){ + infoP->main_hs[idx] = d /100; + ERR(ae->GetFLOAT(ID_MAIN_COL_L(i),&d)); + if (!err) { + infoP->main_l[idx] = d /100; + idx++; + } + } + } + } + } + infoP->main_col_count = idx; + if (infoP->main_col_count>0){ + for (int i=0; imain_col_count; i++) { + infoP->main_col16[i] =CONV8TO16(infoP->main_col[i]); + infoP->main_col32[i] =CONV8TO32(infoP->main_col[i]); + A_long a = (i<<2); + infoP->main_col[i].alpha = (A_u_char)a; + infoP->main_col16[i].alpha = (A_u_short)a; + infoP->main_col32[i].alpha = (PF_FpShort)((PF_FpShort)a / CT_FLOAT); + } + } + + ERR(ae->GetADD(ID_SUB_COL_COUNT,&infoP->sub_col_count)); + if(!err) { + if (infoP->sub_col_count>0){ + if (infoP->sub_col_count>COUNT_OF_SUB)infoP->sub_col_count=COUNT_OF_SUB; + idx = 0; + for ( A_long i=0; isub_col_count; i++){ + ERR(ae->GetCOLOR(ID_SUB_COL(i),&c)); + if(!err) { + if (findColor8(infoP->sub_col,idx,c)<0){ + infoP->sub_col[idx] = c; + idx++; + } + } + } + infoP->sub_col_count = idx; + } + } + if (infoP->sub_col_count>0){ + for (int i=0; isub_col_count; i++) { + infoP->sub_col[i].alpha = (A_u_char)((i+COUNT_OF_MAIN) <<2); + infoP->sub_col16[i] =CONV8TO16(infoP->sub_col[i]); + infoP->sub_col32[i] =CONV8TO32(infoP->sub_col[i]); + A_long a = ((i + COUNT_OF_MAIN) <<2); + infoP->sub_col[i].alpha = (A_u_char)a; + infoP->sub_col16[i].alpha = (A_u_short)a; + infoP->sub_col32[i].alpha = (PF_FpShort)((PF_FpShort)a / CT_FLOAT); + } + } + return err; +} +//------------------------------------------------------------------------------------------------- +static PF_Err + Exec (CFsAE *ae , ParamInfo *infoP) +{ + PF_Err err = PF_Err_NONE; + + //画面をコピー + //ERR(ae->CopyInToOut()); + infoP->out = ae->out; + A_long cnt = infoP->main_col_count + infoP->sub_col_count; + if (cnt<=0) return err; + switch(ae->pixelFormat()) + { + case PF_PixelFormat_ARGB128: + ERR(ae->iterate32((refconType)infoP,AlphaThreshold32)); + ERR(ae->iterate32((refconType)infoP,hslMatch32)); + if (!err){ + if (infoP->main_col_count>0){ + ERR(ae->iterate32((refconType)infoP,line_search32)); + } + } + if (!err){ + for ( A_long i=0; ifinFlag = TRUE; + ERR(ae->iterate32((refconType)infoP,use_search32)); + ERR(ae->iterate32((refconType)infoP,use_searchSub32)); + if (infoP->finFlag)break; + } + } + ERR(ae->iterate32((refconType)infoP,AlphaFix32)); + break; + case PF_PixelFormat_ARGB64: + ERR(ae->iterate16((refconType)infoP,AlphaThreshold16)); + ERR(ae->iterate16((refconType)infoP,hslMatch16)); + if (!err){ + if (infoP->main_col_count>0){ + ERR(ae->iterate16((refconType)infoP,line_search16)); + } + } + if (!err){ + for ( A_long i=0; ifinFlag = TRUE; + ERR(ae->iterate16((refconType)infoP,use_search16)); + ERR(ae->iterate16((refconType)infoP,use_searchSub16)); + if (infoP->finFlag)break; + } + } + ERR(ae->iterate16((refconType)infoP,AlphaFix16)); + break; + case PF_PixelFormat_ARGB32: + ERR(ae->iterate8((refconType)infoP,AlphaThreshold8)); + ERR(ae->iterate8((refconType)infoP,hslMatch8)); + if (!err){ + if (infoP->main_col_count>0){ + ERR(ae->iterate8((refconType)infoP,line_search8)); + } + } + + if(!err){ + for ( A_long i=0; ifinFlag = TRUE; + ERR(ae->iterate8((refconType)infoP,use_search8)); + ERR(ae->iterate8((refconType)infoP,use_searchSub8)); + if (infoP->finFlag)break; + } + } + + ERR(ae->iterate8((refconType)infoP,AlphaFix8)); + 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/colorThreshold/colorThreshold.h b/colorThreshold/colorThreshold.h new file mode 100644 index 0000000..f406d0c --- /dev/null +++ b/colorThreshold/colorThreshold.h @@ -0,0 +1,198 @@ +//----------------------------------------------------------------------------------- +/* + colorThreshold for VS2010 +*/ +//----------------------------------------------------------------------------------- + +#pragma once +#ifndef colorThreshold_H +#define colorThreshold_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" +//#include "FsAE.h" + +#include +#include + +//ユーザーインターフェースのID +//ParamsSetup関数とRender関数のparamsパラメータのIDになる +enum { + ID_INPUT = 0, // default input layer + + ID_ALPHA_LV, + ID_HS_LV, + ID_L_LV, + ID_TOPIC_NAIN_COL, + ID_MAIN_COL1_ON, + ID_MAIN_COL1, + ID_MAIN_COL1_HS, + ID_MAIN_COL1_LV, + ID_MAIN_COL2_ON, + ID_MAIN_COL2, + ID_MAIN_COL2_HS, + ID_MAIN_COL2_LV, + ID_MAIN_COL3_ON, + ID_MAIN_COL3, + ID_MAIN_COL3_HS, + ID_MAIN_COL3_LV, + ID_TOPIC_NAIN_COL_END, + ID_TOPIC_SUB_COL, + ID_SUB_COL_COUNT, + ID_SUB_COL_START, + +}; +#define COUNT_OF_SUB 20 +#define COUNT_OF_MAIN 3 +#define ID_SUB_COL(idx) ( ID_SUB_COL_START + idx) +#define ID_TOPIC_SUB_COL_END (ID_SUB_COL_START + COUNT_OF_SUB) +#define ID_NUM_PARAMS ( ID_TOPIC_SUB_COL_END + 1 ) +#define ID_MAIN_COL_ON(idx) (ID_MAIN_COL1_ON + idx*4) +#define ID_MAIN_COL(idx) (ID_MAIN_COL1 + idx*4) +#define ID_MAIN_COL_HS(idx) (ID_MAIN_COL1_HS + idx*4) +#define ID_MAIN_COL_L(idx) (ID_MAIN_COL1_LV + idx*4) + +//UIの表示文字列 +#define STR_ALPHA_LV "alpha_Level" +#define STR_HS_LV "colorMatch_level" +#define STR_L_LV "colorLightness_level" +#define STR_MAIN_COL1_ON "Enabled_1" +#define STR_MAIN_COL2_ON "Enabled_2" +#define STR_MAIN_COL3_ON "Enabled_3" +#define STR_ON "on" +#define STR_MAIN_COL1 "color1" +#define STR_MAIN_COL2 "color2" +#define STR_MAIN_COL3 "color3" +#define STR_MAIN_COL1_LV "color1_level" +#define STR_MAIN_COL2_LV "color2_level" +#define STR_MAIN_COL3_LV "color3_level" +#define STR_MAIN_COL1_HS "color1_hs" +#define STR_MAIN_COL2_HS "color2_hs" +#define STR_MAIN_COL3_HS "color3_hs" + +#define STR_TOPIC_NAIN_COL "LineColors" +#define STR_TOPIC_SUB_COL "UseColor" +#define STR_SUB_COL_COUNT "UseColor_count" + +typedef struct hls { + PF_FpLong h; + PF_FpLong l; + PF_FpLong s; +} hls; + + +/* + 0bit 1で対象ピクセル + 1bit 1で決定ピクセル + 2bit以降がテーブルインデックス。 + + +*/ +#define CT_NONE 0 +#define CT_TARGET 1 +#define CT_SEARCH 2 +#define CT_DECISION 3 + + +#define CT_FLOAT 1000 + +#define RETRY 10 + +typedef struct ParamInfo { + + PF_FpLong alpha_level; + A_u_char alpha_border; + + PF_FpLong hs_level; + PF_FpLong l_level; + + A_long main_col_count; + PF_Pixel main_col[COUNT_OF_MAIN]; + PF_Pixel16 main_col16[COUNT_OF_MAIN]; + PF_Pixel32 main_col32[COUNT_OF_MAIN]; + PF_FpLong main_l[COUNT_OF_MAIN]; + PF_FpLong main_hs[COUNT_OF_MAIN]; + + A_long sub_col_count; + PF_Pixel sub_col[COUNT_OF_SUB]; + PF_Pixel16 sub_col16[COUNT_OF_SUB]; + PF_Pixel32 sub_col32[COUNT_OF_SUB]; + CFsGraph *out; + PF_Boolean finFlag; + +} ParamInfo, *ParamInfoP, **ParamInfoH; + +hls rgbToHls (PF_Pixel p); +PF_FpLong colorDiatance(hls s,PF_Pixel c1); +PF_FpLong colorDiatance(hls s,PF_Pixel16 c1); +PF_FpLong colorDiatance(hls s,PF_PixelFloat c1); +PF_Boolean colorCompare(hls s,PF_Pixel c1,PF_FpLong hs,PF_FpLong l ); +PF_Boolean colorCompare(hls s,PF_Pixel16 c1,PF_FpLong hs,PF_FpLong l ); +PF_Boolean colorCompare(hls s,PF_PixelFloat c1,PF_FpLong hs,PF_FpLong l ); + +PF_Err AlphaThreshold8 (refconType refcon, A_long xL, A_long yL, PF_Pixel8 *inP, PF_Pixel8 *outP); +PF_Err AlphaThreshold16 (refconType refcon, A_long xL, A_long yL, PF_Pixel16 *inP, PF_Pixel16 *outP); +PF_Err AlphaThreshold32 (refconType refcon, A_long xL, A_long yL, PF_PixelFloat *inP, PF_PixelFloat *outP); + +PF_Err AlphaFix8 (refconType refcon,A_long xL, A_long yL,PF_Pixel8 *inP, PF_Pixel8 *outP); +PF_Err AlphaFix16 (refconType refcon,A_long xL, A_long yL,PF_Pixel16 *inP, PF_Pixel16 *outP); +PF_Err AlphaFix32 (refconType refcon,A_long xL, A_long yL,PF_PixelFloat *inP, PF_PixelFloat *outP); + +PF_Err hslMatch8 (refconType refcon, A_long xL, A_long yL, PF_Pixel8 *inP, PF_Pixel8 *outP); +PF_Err hslMatch16 (refconType refcon, A_long xL, A_long yL, PF_Pixel16 *inP, PF_Pixel16 *outP); +PF_Err hslMatch32 (refconType refcon, A_long xL, A_long yL, PF_PixelFloat *inP, PF_PixelFloat *outP); + +PF_Err line_search8 (refconType refcon, A_long xL, A_long yL, PF_Pixel8 *inP, PF_Pixel8 *outP); +PF_Err line_search16 (refconType refcon, A_long xL, A_long yL, PF_Pixel16 *inP, PF_Pixel16 *outP); +PF_Err line_search32 (refconType refcon, A_long xL, A_long yL, PF_PixelFloat *inP, PF_PixelFloat *outP); + +PF_Err use_search8 (refconType refcon, A_long xL, A_long yL, PF_Pixel8 *inP, PF_Pixel8 *outP); +PF_Err use_search16 (refconType refcon, A_long xL, A_long yL, PF_Pixel16 *inP, PF_Pixel16 *outP); +PF_Err use_search32 (refconType refcon, A_long xL, A_long yL, PF_PixelFloat *inP, PF_PixelFloat *outP); + +PF_Err use_searchSub8 (refconType refcon, A_long xL, A_long yL, PF_Pixel8 *inP, PF_Pixel8 *outP); +PF_Err use_searchSub16 (refconType refcon, A_long xL, A_long yL, PF_Pixel16 *inP, PF_Pixel16 *outP); +PF_Err use_searchSub32 (refconType refcon, A_long xL, A_long yL, PF_PixelFloat *inP, PF_PixelFloat *outP); +//------------------------------------------------------- + +//----------------------------------------------------------------------------------- +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 // colorThreshold_H diff --git a/colorThreshold/colorThresholdMain16.cpp b/colorThreshold/colorThresholdMain16.cpp new file mode 100644 index 0000000..d48e07c --- /dev/null +++ b/colorThreshold/colorThresholdMain16.cpp @@ -0,0 +1,195 @@ +#include "colorThreshold.h" + +//************************************************************************************************* +//------------------------------------------------------------------------------------------------- +/* + アルファを2値化 +*/ +PF_Err +AlphaThreshold16 ( + 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 tp = {0,PF_MAX_CHAN16,PF_MAX_CHAN16,PF_MAX_CHAN16}; + + A_u_char v = RoundByteLong(FS_CONVERT16TO8(inP->alpha)); + if (v >= niP->alpha_border){ + *outP = *inP; + outP->alpha = (A_u_short)CT_TARGET; + }else{ + *outP = tp; + } + + return err; +} +//------------------------------------------------------------------------------------------------- +PF_Err +AlphaFix16 ( + refconType refcon, + A_long xL, + A_long yL, + PF_Pixel16 *inP, + PF_Pixel16 *outP) +{ + PF_Err err = PF_Err_NONE; + A_long v = (A_long)outP->alpha & CT_DECISION; + if ( v == 0) { + outP->alpha = 0; + }else{ + outP->alpha = PF_MAX_CHAN16; + } + + return err; +} +//************************************************************************************************* +//------------------------------------------------------------------------------------------------- +/* + 指定された色ならONにする +*/ +//------------------------------------------------------------------------------------------------- +PF_Err +hslMatch16 ( + 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 ( ((A_long)outP->alpha & CT_DECISION)== CT_TARGET){ + hls o = rgbToHls( CONV16TO8(*outP)); + + if (niP->main_col_count>0){ + for ( A_long i = 0; i< niP->main_col_count; i++){ + if ( colorCompare(o,niP->main_col[i],niP->hs_level,niP->l_level)==TRUE) + { + *outP = niP->main_col16[i]; + A_long a = (A_long)outP->alpha; + a |= CT_DECISION; + outP->alpha = (A_u_short)a; + return err; + } + } + } + if(niP->sub_col_count>0){ + for ( A_long i = 0; i< niP->sub_col_count; i++){ + if ( colorCompare(o,niP->sub_col[i],niP->hs_level,niP->l_level)==TRUE) + { + *outP = niP->sub_col16[i]; + A_long a = (A_long)outP->alpha; + a |= CT_DECISION; + outP->alpha = (A_u_short)a; + return err; + } + } + } + } + return err; +} +//------------------------------------------------------------------------------------------------- +PF_Err +line_search16 ( + 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_long v = (A_long)outP->alpha; + if ( (v&CT_DECISION)== CT_TARGET){ + hls o = rgbToHls( CONV16TO8( *outP)); + for (A_long i=0; imain_col_count; i++ ){ + if ( colorCompare(o,niP->main_col[i],niP->main_hs[i],niP->main_l[i])==TRUE) + { + *outP = niP->main_col16[i]; + A_long a = (A_long)outP->alpha; + a |= CT_DECISION; + outP->alpha = (A_u_short)a; + break; + } + } + + } + return err; +} +//------------------------------------------------------------------------------------------------- +PF_Err +use_search16 ( + 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 ( ((A_long)outP->alpha&CT_DECISION)== CT_TARGET){ + PF_Pixel16 tbl[4]; + tbl[0] = (niP->out->getPixel16(xL ,yL-1)); + tbl[1] = (niP->out->getPixel16(xL-1,yL )); + tbl[2] = (niP->out->getPixel16(xL+1,yL )); + tbl[3] = (niP->out->getPixel16(xL ,yL+1)); + + A_long idx = -1; + PF_FpLong dis = 100.0; + hls o = rgbToHls( CONV16TO8( *outP)); + for ( A_long i=0; i<4; i++) + { + A_long a = (A_long)tbl[i].alpha; + if ( (a&CT_DECISION)== CT_DECISION) { + PF_FpLong dis2 = colorDiatance(o,tbl[i]); + if (dis > dis2) { + dis = dis2; + idx = (A_long)tbl[i].alpha; + } + } + } + if (idx>=0){ + outP->alpha = (A_u_short)((idx & 0xFC) | CT_SEARCH); + }else{ + niP->finFlag = FALSE; + } + + } + return err; +} +//------------------------------------------------------------------------------------------------- +PF_Err +use_searchSub16 ( + 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 ( ((A_long)outP->alpha&CT_DECISION)== CT_SEARCH){ + A_long idx = ((A_long)outP->alpha>>2) & 0x3F; + if ( idxmain_col16[idx]; + A_long a = (A_long)outP->alpha; + a |= CT_DECISION; + outP->alpha = (A_u_short)a; + }else if ( idx< (COUNT_OF_MAIN +COUNT_OF_SUB) ){ + *outP = niP->sub_col16[idx-COUNT_OF_MAIN]; + A_long a = (A_long)outP->alpha; + a |= CT_DECISION; + outP->alpha = (A_u_short)a; + } + } + return err; +} + diff --git a/colorThreshold/colorThresholdMain32.cpp b/colorThreshold/colorThresholdMain32.cpp new file mode 100644 index 0000000..ef6d4ed --- /dev/null +++ b/colorThreshold/colorThresholdMain32.cpp @@ -0,0 +1,196 @@ +#include "colorThreshold.h" + +//************************************************************************************************* +//------------------------------------------------------------------------------------------------- +/* + アルファを2値化 +*/ +PF_Err +AlphaThreshold32 ( + 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 tp = {0,1,1,1}; + + + A_u_char v = RoundByteLong(FS_CONVERT32TO8(inP->alpha)); + if (v >= niP->alpha_border){ + *outP = *inP; + outP->alpha = (PF_FpShort)((PF_FpShort)CT_TARGET / CT_FLOAT); + }else{ + *outP = tp; + } + + return err; +} +//------------------------------------------------------------------------------------------------- +PF_Err +AlphaFix32 ( + refconType refcon, + A_long xL, + A_long yL, + PF_PixelFloat *inP, + PF_PixelFloat *outP) +{ + PF_Err err = PF_Err_NONE; + A_long v = (A_long)(outP->alpha * CT_FLOAT) & CT_DECISION; + if ( v == 0) { + outP->alpha = 0; + }else{ + outP->alpha = 1; + } + return err; +} +//************************************************************************************************* +//------------------------------------------------------------------------------------------------- +/* + 指定された色ならONにする +*/ +//------------------------------------------------------------------------------------------------- +PF_Err +hslMatch32 ( + 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); + + A_long v = (A_long)(outP->alpha * CT_FLOAT) & CT_DECISION; + if ( v== CT_TARGET){ + hls o = rgbToHls( CONV32TO8(*outP)); + if (niP->main_col_count>0){ + for ( A_long i = 0; i< niP->main_col_count; i++){ + if ( colorCompare(o,niP->main_col[i],niP->hs_level,niP->l_level)==TRUE) + { + *outP = niP->main_col32[i]; + A_long a = (A_long)(outP->alpha * CT_FLOAT); + a |= CT_DECISION; + outP->alpha = (PF_FpShort)((PF_FpShort)a/ CT_FLOAT); + return err; + } + } + } + if(niP->sub_col_count>0){ + for ( A_long i = 0; i< niP->sub_col_count; i++){ + if ( colorCompare(o,niP->sub_col[i],niP->hs_level,niP->l_level)==TRUE) + { + *outP = niP->sub_col32[i]; + A_long a = (A_long)(outP->alpha * CT_FLOAT); + a |= CT_DECISION; + outP->alpha = (PF_FpShort)((PF_FpShort)a/ CT_FLOAT); + return err; + } + } + } + } + return err; +} +//------------------------------------------------------------------------------------------------- +PF_Err +line_search32 ( + refconType refcon, + A_long xL, + A_long yL, + PF_Pixel32 *inP, + PF_Pixel32 *outP) +{ + PF_Err err = PF_Err_NONE; + ParamInfo * niP = reinterpret_cast(refcon); + + A_long v = (A_long)(outP->alpha * CT_FLOAT) & CT_DECISION; + if ( v== CT_TARGET){ + hls o = rgbToHls( CONV32TO8(*outP)); + for (A_long i=0; imain_col_count; i++ ){ + if ( colorCompare(o,niP->main_col[i],niP->main_hs[i],niP->main_l[i])==TRUE) + { + *outP = niP->main_col32[i]; + A_long a = (A_long)(outP->alpha * CT_FLOAT); + a |= CT_DECISION; + outP->alpha = (PF_FpShort)((PF_FpShort)a/ CT_FLOAT); + break; + } + } + + } + return err; +} +//------------------------------------------------------------------------------------------------- +PF_Err +use_search32 ( + 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); + + A_long v = (A_long)(outP->alpha * CT_FLOAT) & CT_DECISION; + if ( v== CT_TARGET){ + PF_PixelFloat tbl[4]; + tbl[0] = (niP->out->getPixel32(xL ,yL-1)); + tbl[1] = (niP->out->getPixel32(xL-1,yL )); + tbl[2] = (niP->out->getPixel32(xL+1,yL )); + tbl[3] = (niP->out->getPixel32(xL ,yL+1)); + + A_long idx = -1; + PF_FpLong dis = 100.0; + hls o = rgbToHls( CONV32TO8(*outP)); + for ( A_long i=0; i<4; i++) + { + A_long a = (A_long)(tbl[i].alpha * CT_FLOAT) &CT_DECISION; + if ( a== CT_DECISION) { + PF_FpLong dis2 = colorDiatance(o,tbl[i]); + if (dis > dis2) { + dis = dis2; + idx = (A_long)(tbl[i].alpha * CT_FLOAT); + } + } + } + if (idx>=0){ + idx = (idx & 0xFC)|CT_SEARCH; + outP->alpha = (PF_FpShort)((PF_FpShort)idx / CT_FLOAT); + }else{ + niP->finFlag = FALSE; + } + + } + return err; + +} +//------------------------------------------------------------------------------------------------- +PF_Err +use_searchSub32 ( + 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); + + A_long v = (A_long)(outP->alpha * CT_FLOAT) & CT_DECISION; + if ( v== CT_SEARCH){ + A_long idx = (A_long)(outP->alpha * CT_FLOAT) >>2; + PF_FpShort a = (PF_FpShort)(idx|CT_DECISION)/CT_FLOAT; + if ( idxmain_col32[idx]; + outP->alpha = a; + }else if ( idx< (COUNT_OF_MAIN +COUNT_OF_SUB) ){ + *outP = niP->sub_col32[idx-COUNT_OF_MAIN]; + outP->alpha = a; + } + } + return err; +} +//------------------------------------------------------------------------------------------------- diff --git a/colorThreshold/colorThresholdMain8.cpp b/colorThreshold/colorThresholdMain8.cpp new file mode 100644 index 0000000..1215754 --- /dev/null +++ b/colorThreshold/colorThresholdMain8.cpp @@ -0,0 +1,187 @@ +#include "colorThreshold.h" + +//************************************************************************************************* +//------------------------------------------------------------------------------------------------- +/* + アルファを2値化 +*/ +PF_Err +AlphaThreshold8 ( + 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 tp = {0,PF_MAX_CHAN8,PF_MAX_CHAN8,PF_MAX_CHAN8}; + + if (inP->alpha >= niP->alpha_border){ + *outP = *inP; + outP->alpha = (A_u_char)CT_TARGET; + }else{ + *outP = tp; + } + + return err; +} +//************************************************************************************************* +//------------------------------------------------------------------------------------------------- +PF_Err +AlphaFix8 ( + refconType refcon, + A_long xL, + A_long yL, + PF_Pixel8 *inP, + PF_Pixel8 *outP) +{ + PF_Err err = PF_Err_NONE; + A_long v = (A_long)outP->alpha & CT_DECISION; + if ( v == 0) { + outP->alpha = 0; + }else{ + outP->alpha = PF_MAX_CHAN8; + } + return err; +} +//************************************************************************************************* +//------------------------------------------------------------------------------------------------- +/* + 指定された色ならONにする +*/ +PF_Err +hslMatch8 ( + 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_long v = outP->alpha; + + if ( (v&CT_DECISION)== CT_TARGET){ + hls o = rgbToHls( *outP); + + if (niP->main_col_count>0){ + for ( A_long i = 0; i< niP->main_col_count; i++){ + if ( colorCompare(o,niP->main_col[i],niP->hs_level,niP->l_level)==TRUE) + { + *outP = niP->main_col[i]; + outP->alpha |= CT_DECISION; + return err; + } + } + } + if(niP->sub_col_count>0){ + for ( A_long i = 0; i< niP->sub_col_count; i++){ + if ( colorCompare(o,niP->sub_col[i],niP->hs_level,niP->l_level)==TRUE) + { + *outP = niP->sub_col[i]; + outP->alpha |= CT_DECISION; + return err; + } + } + } + } + return err; +} +//************************************************************************************************* +//------------------------------------------------------------------------------------------------- +PF_Err +line_search8 ( + 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_long v = outP->alpha; + if ( (v&CT_DECISION)== CT_TARGET){ + hls o = rgbToHls( *outP); + for (A_long i=0; imain_col_count; i++ ){ + if ( colorCompare(o,niP->main_col[i],niP->main_hs[i],niP->main_l[i])==TRUE) + { + *outP = niP->main_col[i]; + outP->alpha |= CT_DECISION; + break; + } + } + + } + return err; +} +//************************************************************************************************* +//------------------------------------------------------------------------------------------------- +PF_Err +use_search8 ( + 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_long v = (A_long)outP->alpha; + if ( (v&CT_DECISION)== CT_TARGET){ + PF_Pixel tbl[4]; + tbl[0] = niP->out->getPixel8(xL ,yL-1); + tbl[1] = niP->out->getPixel8(xL-1,yL ); + tbl[2] = niP->out->getPixel8(xL+1,yL ); + tbl[3] = niP->out->getPixel8(xL ,yL+1); + A_long idx = -1; + PF_FpLong dis = 100.0; + hls o = rgbToHls( *outP); + for ( A_long i=0; i<4; i++) + { + A_long a = (A_long)tbl[i].alpha; + if ( (a & CT_DECISION)== CT_DECISION) { + PF_FpLong dis2 = colorDiatance(o,tbl[i]); + if (dis > dis2) { + dis = dis2; + idx = (A_long)tbl[i].alpha; + } + } + } + if (idx>=0){ + outP->alpha = (A_u_char)((idx & 0xFC) | CT_SEARCH); + }else{ + niP->finFlag = FALSE; + } + + } + return err; +} +//------------------------------------------------------------------------------------------------- +PF_Err +use_searchSub8 ( + 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_long v = (A_long)outP->alpha; + if ( (v&CT_DECISION)== CT_SEARCH){ + A_long idx = v>>2; + if ( idxmain_col[idx]; + outP->alpha |= CT_DECISION; + }else if ( idx< (COUNT_OF_MAIN +COUNT_OF_SUB) ){ + *outP = niP->sub_col[idx-COUNT_OF_MAIN]; + outP->alpha |= CT_DECISION; + } + } + return err; +} diff --git a/colorThreshold/colorThresholdPiPL.r b/colorThreshold/colorThresholdPiPL.r new file mode 100644 index 0000000..33eadc0 --- /dev/null +++ b/colorThreshold/colorThresholdPiPL.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/colorThreshold/colorThresholdSub.cpp b/colorThreshold/colorThresholdSub.cpp new file mode 100644 index 0000000..28e1775 --- /dev/null +++ b/colorThreshold/colorThresholdSub.cpp @@ -0,0 +1,114 @@ +#include "colorThreshold.h" + +#define SQMAX_2 1.4142135623730950488016887242097 +#define SQMAX_3 1.7320508075688772935274463415059 + +//------------------------------------------------------------------------------------------------- +hls rgbToHls (PF_Pixel p) +{ + hls ret; + ret.h = 0; + ret.l = 0; + ret.s = 0; + PF_FpLong r = (PF_FpLong)FS_CONVERT8TO32(p.red); + PF_FpLong g = (PF_FpLong)FS_CONVERT8TO32(p.green); + PF_FpLong b = (PF_FpLong)FS_CONVERT8TO32(p.blue); + + if (r>1.0) r = 1.0; + if (g>1.0) g = 1.0; + if (b>1.0) b = 1.0; + + PF_FpLong cMax = MAX( MAX(r,g), b); + PF_FpLong cMin = MIN( MIN(r,g), b); + PF_FpLong C = cMax - cMin; + + ret.h = 0; + ret.s = 0; + ret.l = (cMax + cMin) / 2; + + if (C != 0) { + if (ret.l <= 0.5) { + ret.s = C / (2*ret.l); + } + else { + ret.s = C / (2 - 2*ret.l); + } + + if (r == cMax) { + ret.h = (g - b) / C; + if (ret.h < 0) { + ret.h += 6; + } + } + else if (g == cMax) { + ret.h = (r - g) / C + 2; + } + else if (b == cMax) { + ret.h = (r - g) / C + 4; + } + ret.h /= 6; + } + ret.h = ret.h; + ret.l = ret.l; + ret.s = ret.s; + + return ret; +} +//************************************************************************************************* +//------------------------------------------------------------------------------------------------- +PF_FpLong colorDiatance(hls s,PF_Pixel c) +{ + hls d = rgbToHls(c); + + 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(hueDiff, 2)+ pow(s.s - d.s, 2)+ pow(s.l - d.l, 2))/SQMAX_3; + } +//------------------------------------------------------------------------------------------------- +PF_FpLong colorDiatance(hls s,PF_Pixel16 c) +{ + return colorDiatance(s,CONV16TO8(c)); + } +//------------------------------------------------------------------------------------------------- +PF_FpLong colorDiatance(hls s,PF_PixelFloat c) +{ + return colorDiatance(s,CONV32TO8(c)); + } +//************************************************************************************************* +//------------------------------------------------------------------------------------------------- +PF_Boolean colorCompare(hls s,PF_Pixel c,PF_FpLong hs,PF_FpLong l ) +{ + hls d = rgbToHls(c); + + 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)); + } + PF_FpLong hsD = sqrt(pow(hueDiff, 2)+ pow(s.s - d.s, 2))/SQMAX_2; + + if ( hsD>hs) return FALSE; + if (s.l == d.l){ + return TRUE; + } + PF_FpLong maxL = MAX(s.l , d.l); + PF_FpLong minL = MIN(s.l , d.l); + PF_FpLong v = 1 - minL/maxL; + return (v<=l); +} +//------------------------------------------------------------------------------------------------- +PF_Boolean colorCompare(hls s,PF_Pixel16 c,PF_FpLong hs,PF_FpLong l ) +{ + return colorCompare(s,CONV16TO8(c),hs,l); +} +//------------------------------------------------------------------------------------------------- +PF_Boolean colorCompare(hls s,PF_PixelFloat c,PF_FpLong hs,PF_FpLong l ) +{ + return colorCompare(s,CONV32TO8(c),hs,l); +} +//************************************************************************************************* diff --git "a/colorThreshold/\350\252\254\346\230\216.png" "b/colorThreshold/\350\252\254\346\230\216.png" new file mode 100644 index 0000000..ebfc749 Binary files /dev/null and "b/colorThreshold/\350\252\254\346\230\216.png" differ diff --git a/grayToColorize/Fs_Entry.h b/grayToColorize/Fs_Entry.h new file mode 100644 index 0000000..f618dbd --- /dev/null +++ b/grayToColorize/Fs_Entry.h @@ -0,0 +1,227 @@ +//----------------------------------------------------------------------------------- +/* + grayToColorize 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/grayToColorize/Fs_Target.h b/grayToColorize/Fs_Target.h new file mode 100644 index 0000000..490c1e9 --- /dev/null +++ b/grayToColorize/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 grayToColorize" + +//----------------------------------------------------------------------------------- +//プラグインの説明に使われる文字 +#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/grayToColorize/Win/grayToColorize.sln b/grayToColorize/Win/grayToColorize.sln new file mode 100644 index 0000000..e9a1441 --- /dev/null +++ b/grayToColorize/Win/grayToColorize.sln @@ -0,0 +1,26 @@ + +Microsoft Visual Studio Solution File, Format Version 11.00 +# Visual Studio 2010 +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "grayToColorize", "grayToColorize.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/grayToColorize/Win/grayToColorize.vcxproj b/grayToColorize/Win/grayToColorize.vcxproj new file mode 100644 index 0000000..e21d2fc --- /dev/null +++ b/grayToColorize/Win/grayToColorize.vcxproj @@ -0,0 +1,591 @@ +サソ + + + + Debug + Win32 + + + Debug + x64 + + + Release-MD + Win32 + + + Release-MD + x64 + + + Release + Win32 + + + Release + x64 + + + + {8F86C9BF-D1FC-4619-8480-44010D50BA38} + grayToColorize + grayToColorize + 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/grayToColorize.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/grayToColorize.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/grayToColorize.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/grayToColorize.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/grayToColorize.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/grayToColorize.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/grayToColorize/Win/grayToColorize.vcxproj.filters b/grayToColorize/Win/grayToColorize.vcxproj.filters new file mode 100644 index 0000000..46645ad --- /dev/null +++ b/grayToColorize/Win/grayToColorize.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/grayToColorize/Win/grayToColorizePiPL.rc b/grayToColorize/Win/grayToColorizePiPL.rc new file mode 100644 index 0000000..3e0804b --- /dev/null +++ b/grayToColorize/Win/grayToColorizePiPL.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 grayToColorize\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, + "\x12F's grayToColorize\0", + + "MIB8", + 0x6165464CL, + 0L, + 4L + 0L, + + +END + diff --git a/grayToColorize/grayToColorize.cpp b/grayToColorize/grayToColorize.cpp new file mode 100644 index 0000000..d26d2b6 --- /dev/null +++ b/grayToColorize/grayToColorize.cpp @@ -0,0 +1,441 @@ +//----------------------------------------------------------------------------------- +/* + F's Plugins for VS2010/VS2012 +*/ +//----------------------------------------------------------------------------------- + + +#include "grayToColorize.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_ALPHA_THRESHOLD, //Name + 0, //VALID_MIN + 100, //VALID_MAX + 0, //SLIDER_MIN + 100, //SLIDER_MAX + 1, //CURVE_TOLERANCE + 25, //DFLT + 1, //PREC + 0, //DISP + 0, //WANT_PHASE + ID_ALPHA_THRESHOLD + ); + //---------------------------------------------------------------- + AEFX_CLR_STRUCT(def); + def.flags = PF_ParamFlag_CANNOT_TIME_VARY;//これをつけるとキーフレームが撃てなくなる + PF_ADD_COLOR( STR_COL1, + 0xFF, + 0xF9, + 0x9C, + ID_COL1 + ); + //---------------------------------------------------------------- + AEFX_CLR_STRUCT(def); + def.flags = PF_ParamFlag_CANNOT_TIME_VARY;//これをつけるとキーフレームが撃てなくなる + PF_ADD_COLOR( STR_COL2, //F5DD6D + 0xF5, + 0xDD, + 0x6D, + ID_COL2 + ); + //---------------------------------------------------------------- + AEFX_CLR_STRUCT(def); + def.flags = PF_ParamFlag_CANNOT_TIME_VARY;//これをつけるとキーフレームが撃てなくなる + PF_ADD_COLOR( STR_COL3, //F3A447 + 0xF3, + 0xA4, + 0x47, + ID_COL3 + ); + //---------------------------------------------------------------- + AEFX_CLR_STRUCT(def); + def.flags = PF_ParamFlag_CANNOT_TIME_VARY;//これをつけるとキーフレームが撃てなくなる + PF_ADD_COLOR( STR_COL4, //DB9039 + 0xDB, + 0x90, + 0x38, + ID_COL4 + ); + //---------------------------------------------------------------- + AEFX_CLR_STRUCT(def); + def.flags = PF_ParamFlag_CANNOT_TIME_VARY;//これをつけるとキーフレームが撃てなくなる + PF_ADD_COLOR( STR_COL5, //F3C186 + 0xF3, + 0xC1, + 0x86, + ID_COL5 + ); + //---------------------------------------------------------------- + AEFX_CLR_STRUCT(def); + def.flags = PF_ParamFlag_CANNOT_TIME_VARY;//これをつけるとキーフレームが撃てなくなる + PF_ADD_CHECKBOX(STR_MAT_CB, + STR_ON, + FALSE, + 0, + ID_MAT_CB + ); + //---------------------------------------------------------------- + AEFX_CLR_STRUCT(def); + def.flags = PF_ParamFlag_CANNOT_TIME_VARY;//これをつけるとキーフレームが撃てなくなる + PF_ADD_COLOR( STR_MAT_COL, + 0xFF, + 0xFF, + 0xFF, + ID_MAT_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 A_long sampleCompare(PF_Pixel s,PF_Pixel d) +{ + double b = sqrt( pow((double)s.red,2)+pow((double)s.green,2)+pow((double)s.blue,2)); + return (A_long)((100.0 * b) + 0.5); +} +//------------------------------------------------------------------------------------------------- +static PF_Err +exec8 ( + 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 c = *inP; + //****************** + //Matカラー + if (niP->mat_on){ + PF_Pixel m = niP->mat_color; + c.red = RoundByteLong((A_long)c.alpha*((A_long)c.red - (A_long)m.red)/PF_MAX_CHAN8 + (A_long)m.red); + c.green = RoundByteLong((A_long)c.alpha*((A_long)c.green - (A_long)m.green)/PF_MAX_CHAN8 + (A_long)m.green); + c.blue = RoundByteLong((A_long)c.alpha*((A_long)c.blue - (A_long)m.blue)/PF_MAX_CHAN8 + (A_long)m.blue); + } + //****************** + //アルファー + A_u_char a = 0; + if (c.alpha > niP->alpha_border){ + a = PF_MAX_CHAN8; + }else{ + a = 0; + } + //****************** + A_long v = (A_long)( ( 0.29891 * (PF_FpLong)c.red) + ( 0.58661 * (PF_FpLong)c.green) + ( 0.11448 * (PF_FpLong)c.blue)+ 0.5); + v = FROM8_SAMPLE(v); + if (v<0) v = 0; + else if ( v>SAMPLE_MAX) v = SAMPLE_MAX; + + v = SAMPLE_MAX - v; + *outP = niP->col[v]; + outP->alpha = a; + return err; +} +//------------------------------------------------------------------------------------------------- +static PF_Err +exec16 ( + 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); + + PF_Pixel16 c = *inP; + //****************** + //Matカラー + if (niP->mat_on){ + PF_Pixel16 m = niP->mat_color; + c.red = RoundByteLong((A_long)c.alpha*((A_long)c.red - (A_long)m.red)/PF_MAX_CHAN16 + (A_long)m.red); + c.green = RoundByteLong((A_long)c.alpha*((A_long)c.green - (A_long)m.green)/PF_MAX_CHAN16 + (A_long)m.green); + c.blue = RoundByteLong((A_long)c.alpha*((A_long)c.blue - (A_long)m.blue)/PF_MAX_CHAN16 + (A_long)m.blue); + } + //****************** + //アルファー + A_u_short a = 0; + if (c.alpha > niP->alpha_border){ + a = PF_MAX_CHAN16; + }else{ + a = 0; + } + //****************** + A_long v = (A_long)( ( 0.29891 * (PF_FpLong)c.red) + ( 0.58661 * (PF_FpLong)c.green) + ( 0.11448 * (PF_FpLong)c.blue)+ 0.5); + v = FROM16_SAMPLE(v); + if (v<0) v = 0; + else if ( v>SAMPLE_MAX) v = SAMPLE_MAX; + + v = SAMPLE_MAX - v; + *outP = niP->col[v]; + outP->alpha = a; + return err; +} +//------------------------------------------------------------------------------------------------- +static PF_Err +exec32 ( + 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); + + PF_PixelFloat c = *inP; + //****************** + //Matカラー + if (niP->mat_on){ + PF_PixelFloat m = niP->mat_color; + c.red = RoundFpShortDouble(c.alpha*(c.red - m.red) + m.red); + c.green = RoundFpShortDouble(c.alpha*(c.green - m.green) + m.green); + c.blue = RoundFpShortDouble(c.alpha*(c.blue - m.blue)/ + m.blue); + } + //****************** + //アルファー + PF_FpShort a = 0; + if (c.alpha > niP->alpha_border){ + a = 1.0; + }else{ + a = 0; + } + //****************** + double v = ( ( 0.29891 * c.red) + ( 0.58661 * c.green) + ( 0.11448 * c.blue)); + v = FROM32_SAMPLE(v); + if (v<0) v = 0; + else if ( v>SAMPLE_MAX) v = SAMPLE_MAX; + + v = SAMPLE_MAX - v; + *outP = niP->col[(A_long)v]; + outP->alpha = a; + return err; +} +//------------------------------------------------------------------------------------------------- +static ParamInfo16 toParm16(ParamInfo *infoP) +{ + ParamInfo16 ret; + ret.alpha_level = infoP->alpha_level; + ret.alpha_border = RoundShortFpLong(PF_MAX_CHAN16 * infoP->alpha_level); + for ( int i= 0; icol[i]); + } + ret.mat_on = infoP->mat_on; + ret.mat_color = CONV8TO16(infoP->mat_color); + return ret; + +} +//------------------------------------------------------------------------------------------------- +static ParamInfo32 toParm32(ParamInfo *infoP) +{ + ParamInfo32 ret; + ret.alpha_level = infoP->alpha_level; + ret.alpha_border = RoundFpShortDouble( infoP->alpha_level); + for ( int i= 0; icol[i]); + } + ret.mat_on = infoP->mat_on; + ret.mat_color = CONV8TO32(infoP->mat_color); + return ret; + +} +//------------------------------------------------------------------------------------------------- +static PF_Err GetParams(CFsAE *ae, ParamInfo *infoP) +{ + PF_Err err = PF_Err_NONE; + + + PF_FpLong d; + ERR(ae->GetFLOAT(ID_ALPHA_THRESHOLD,&d)); + if (!err){ + infoP->alpha_level = d/100; + }else{ + infoP->alpha_level = 0.5; + } + infoP->alpha_border = RoundByteFpLong(PF_MAX_CHAN8 * infoP->alpha_level); + + PF_Pixel c; + for ( int i= 0; iGetCOLOR(ID_COL1+i,&c)); + if(!err){ + infoP->col[i] = c; + } + } + PF_Boolean b; + ERR(ae->GetCHECKBOX(ID_MAT_CB,&b)); + if(!err){ + infoP->mat_on = b; + } + ERR(ae->GetCOLOR(ID_MAT_COLOR,&c)); + if (!err) infoP->mat_color = c; + return err; +} +//------------------------------------------------------------------------------------------------- +static PF_Err + Exec (CFsAE *ae , ParamInfo *infoP) +{ + PF_Err err = PF_Err_NONE; + + //画面をコピー + ERR(ae->CopyInToOut()); + ParamInfo16 info16; + ParamInfo32 info32; + switch(ae->pixelFormat()) + { + case PF_PixelFormat_ARGB128: + info32 = toParm32(infoP); + ERR(ae->iterate32((refconType)&info32,exec32)); + break; + case PF_PixelFormat_ARGB64: + info16 = toParm16(infoP); + ERR(ae->iterate16((refconType)&info16,exec16)); + break; + case PF_PixelFormat_ARGB32: + ERR(ae->iterate8((refconType)infoP,exec8)); + 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/grayToColorize/grayToColorize.h b/grayToColorize/grayToColorize.h new file mode 100644 index 0000000..a58e6f4 --- /dev/null +++ b/grayToColorize/grayToColorize.h @@ -0,0 +1,170 @@ +//----------------------------------------------------------------------------------- +/* + grayToColorize for VS2010 +*/ +//----------------------------------------------------------------------------------- + +#pragma once +#ifndef grayToColorize_H +#define grayToColorize_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 + +#define TBL_COUNT 5 +#define SAMPLE_BIT 4 +#define SAMPLE_MAX 4 +#define SAMPLE_HARF 2 +//#define SAMPLE_LEN 53.693575034635196099350836586682 // +#define SAMPLE_LEN 5369 // 100倍 + +#define FROM8_SAMPLE(A) ((((A_long)(A) * SAMPLE_MAX) + PF_HALF_CHAN8) / PF_MAX_CHAN8) +#define FROM16_SAMPLE(A) ((((A_long)(A) * SAMPLE_MAX) + PF_HALF_CHAN16) / PF_MAX_CHAN16) +#define FROM32_SAMPLE(A) ( (A_u_long)( (A * SAMPLE_MAX) + 0.5)) + +#define To8_SAMPLE(A) ((((A_long)(A) * PF_MAX_CHAN8) + SAMPLE_HARF) / SAMPLE_MAX ) +#define To16_SAMPLE(A) ((((A_long)(A) * PF_MAX_CHAN16) + SAMPLE_HARF) / SAMPLE_MAX ) +#define To32_SAMPLE(A) ( ((double)A + SAMPLE_HARF) / SAMPLE_MAX ) + +inline A_u_char RountSample(A_long v) +{ + if (v<0) v=0; + else if (v>SAMPLE_MAX) v = SAMPLE_MAX; + return (A_u_char)v; +} +inline A_u_char RountSampleDouble(double v) +{ + if (v<0) v=0; + else if (v>SAMPLE_MAX) v = SAMPLE_MAX; + return (A_u_char)v; +} + +inline PF_Pixel conv8ToSample(PF_Pixel s) +{ + PF_Pixel ret; + ret.red = RountSample( FROM8_SAMPLE(s.red)); + ret.green = RountSample( FROM8_SAMPLE(s.green)); + ret.blue = RountSample( FROM8_SAMPLE(s.blue)); + ret.alpha = s.alpha; + return ret; +} +inline PF_Pixel convSampleTo8(PF_Pixel s) +{ + PF_Pixel ret; + ret.red = RoundByteLong( To8_SAMPLE(s.red)); + ret.green = RoundByteLong( To8_SAMPLE(s.green)); + ret.blue = RoundByteLong( To8_SAMPLE(s.blue)); + ret.alpha = s.alpha; + return ret; +} + + +//ユーザーインターフェースのID +//ParamsSetup関数とRender関数のparamsパラメータのIDになる +enum { + ID_INPUT = 0, // default input layer + ID_ALPHA_THRESHOLD, + ID_COL1, + ID_COL2, + ID_COL3, + ID_COL4, + ID_COL5, + ID_MAT_CB, + ID_MAT_COLOR, + ID_NUM_PARAMS +}; + +//UIの表示文字列 + +#define STR_ALPHA_THRESHOLD "AlphaThreshold" +#define STR_MAT_CB "Mat" +#define STR_MAT_COL "MatColor" +#define STR_COLOR_LEVEL "ColorLevel" +#define STR_COL_COUNT "ColorCount" +#define STR_COL "TargetColor" +#define STR_COL1 "Color1" +#define STR_COL2 "Color2" +#define STR_COL3 "Color3" +#define STR_COL4 "Color4" +#define STR_COL5 "Color5" +#define STR_ON "on" + + +//UIのパラメータ +typedef struct ParamInfo { + PF_FpLong alpha_level; + A_u_char alpha_border; + + PF_Pixel col[TBL_COUNT]; + + PF_Boolean mat_on; + PF_Pixel mat_color; + +} ParamInfo, *ParamInfoP, **ParamInfoH; +typedef struct ParamInfo16 { + PF_FpLong alpha_level; + A_u_short alpha_border; + + PF_Pixel16 col[TBL_COUNT]; + + PF_Boolean mat_on; + PF_Pixel16 mat_color; + +} ParamInfo16, *ParamInfo16P, **ParamInfo16H; +typedef struct ParamInfo32 { + PF_FpLong alpha_level; + PF_FpShort alpha_border; + + PF_PixelFloat col[TBL_COUNT]; + + PF_Boolean mat_on; + PF_PixelFloat mat_color; + +} 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 // grayToColorize_H diff --git a/grayToColorize/grayToColorizePiPL.r b/grayToColorize/grayToColorizePiPL.r new file mode 100644 index 0000000..33eadc0 --- /dev/null +++ b/grayToColorize/grayToColorizePiPL.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/grayToColorize/sample.png b/grayToColorize/sample.png new file mode 100644 index 0000000..e98cbf0 Binary files /dev/null and b/grayToColorize/sample.png differ diff --git a/smokeThreshold/Fs_Entry.h b/smokeThreshold/Fs_Entry.h new file mode 100644 index 0000000..8e6bab1 --- /dev/null +++ b/smokeThreshold/Fs_Entry.h @@ -0,0 +1,227 @@ +//----------------------------------------------------------------------------------- +/* + smokeThreshold 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/smokeThreshold/Fs_Target.h b/smokeThreshold/Fs_Target.h new file mode 100644 index 0000000..e1681f5 --- /dev/null +++ b/smokeThreshold/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 smokeThreshold" + +//----------------------------------------------------------------------------------- +//プラグインの説明に使われる文字 +#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/smokeThreshold/Win/smokeThreshold.sln b/smokeThreshold/Win/smokeThreshold.sln new file mode 100644 index 0000000..8f1dd3d --- /dev/null +++ b/smokeThreshold/Win/smokeThreshold.sln @@ -0,0 +1,26 @@ + +Microsoft Visual Studio Solution File, Format Version 11.00 +# Visual Studio 2010 +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "smokeThreshold", "smokeThreshold.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/smokeThreshold/Win/smokeThreshold.vcxproj b/smokeThreshold/Win/smokeThreshold.vcxproj new file mode 100644 index 0000000..9e2b834 --- /dev/null +++ b/smokeThreshold/Win/smokeThreshold.vcxproj @@ -0,0 +1,594 @@ +サソ + + + + Debug + Win32 + + + Debug + x64 + + + Release-MD + Win32 + + + Release-MD + x64 + + + Release + Win32 + + + Release + x64 + + + + {0F55E445-AB58-4B3E-B2D9-92C0C2C4013E} + smokeThreshold + smokeThreshold + 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/smokeThreshold.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/smokeThreshold.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/smokeThreshold.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/smokeThreshold.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/smokeThreshold.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/smokeThreshold.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/smokeThreshold/Win/smokeThreshold.vcxproj.filters b/smokeThreshold/Win/smokeThreshold.vcxproj.filters new file mode 100644 index 0000000..068e9d6 --- /dev/null +++ b/smokeThreshold/Win/smokeThreshold.vcxproj.filters @@ -0,0 +1,193 @@ +サソ + + + + {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\AE + + + Supporting code\AE + + + Supporting code\AE + + + Supporting code\AE + + + Supporting code\Fs + + + Supporting code\Fs + + + Supporting code\Fs + + + Supporting code\Fs + + + + + Resource Files + + + \ No newline at end of file diff --git a/smokeThreshold/Win/smokeThresholdPiPL.rc b/smokeThreshold/Win/smokeThresholdPiPL.rc new file mode 100644 index 0000000..d3cb182 --- /dev/null +++ b/smokeThreshold/Win/smokeThresholdPiPL.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 smokeThreshold\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, + "\x12F's smokeThreshold\0", + + "MIB8", + 0x6165464CL, + 0L, + 4L + 0L, + + +END + diff --git a/smokeThreshold/smoke.png b/smokeThreshold/smoke.png new file mode 100644 index 0000000..8f87383 Binary files /dev/null and b/smokeThreshold/smoke.png differ diff --git a/smokeThreshold/smokeThreshold.cpp b/smokeThreshold/smokeThreshold.cpp new file mode 100644 index 0000000..394b53c --- /dev/null +++ b/smokeThreshold/smokeThreshold.cpp @@ -0,0 +1,730 @@ +//----------------------------------------------------------------------------------- +/* + F's Plugins for VS2010/VS2012 +*/ +//----------------------------------------------------------------------------------- + + +#include "smokeThreshold.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_ALPHA, //Name + 0, //VALID_MIN + 100, //VALID_MAX + 25, //SLIDER_MIN + 75, //SLIDER_MAX + 1, //CURVE_TOLERANCE + 50, //DFLT + 1, //PREC + 0, //DISP + 0, //WANT_PHASE + ID_ALPHA + ); + //---------------------------------------------------------------- + AEFX_CLR_STRUCT(def); + PF_ADD_CHECKBOX(STR_HI_E, + STR_ON, + TRUE, + 0, + ID_HI_ENABLED + ); + //---------------------------------------------------------------- + AEFX_CLR_STRUCT(def); + PF_ADD_CHECKBOX(STR_SDW1_E, + STR_ON, + TRUE, + 0, + ID_SDW1_ENABLED + ); + //---------------------------------------------------------------- + AEFX_CLR_STRUCT(def); + PF_ADD_CHECKBOX(STR_SDW2_E, + STR_ON, + TRUE, + 0, + ID_SDW2_ENABLED + ); + //---------------------------------------------------------------- + AEFX_CLR_STRUCT(def); + PF_ADD_FLOAT_SLIDER(STR_HI, //Name + 0, //VALID_MIN + 100, //VALID_MAX + 60, //SLIDER_MIN + 100, //SLIDER_MAX + 1, //CURVE_TOLERANCE + 80, //DFLT + 1, //PREC + 0, //DISP + 0, //WANT_PHASE + ID_HI + ); + //---------------------------------------------------------------- + AEFX_CLR_STRUCT(def); + PF_ADD_FLOAT_SLIDER(STR_SDW1, //Name + 0, //VALID_MIN + 100, //VALID_MAX + 20, //SLIDER_MIN + 60, //SLIDER_MAX + 1, //CURVE_TOLERANCE + 40, //DFLT + 1, //PREC + 0, //DISP + 0, //WANT_PHASE + ID_SDW1 + ); + //---------------------------------------------------------------- + AEFX_CLR_STRUCT(def); + PF_ADD_FLOAT_SLIDER(STR_SDW2, //Name + 0, //VALID_MIN + 100, //VALID_MAX + 0, //SLIDER_MIN + 40, //SLIDER_MAX + 1, //CURVE_TOLERANCE + 20, //DFLT + 1, //PREC + 0, //DISP + 0, //WANT_PHASE + ID_SDW2 + ); + //---------------------------------------------------------------- + AEFX_CLR_STRUCT(def); + PF_ADD_COLOR( STR_HI_COL, + 0xF0, + 0xF0, + 0xF0, + ID_HI_COL + ); + + //---------------------------------------------------------------- + AEFX_CLR_STRUCT(def); + PF_ADD_COLOR( STR_NOR_COL, + 0x90, + 0x90, + 0x90, + ID_NOR_COL + ); + //---------------------------------------------------------------- + AEFX_CLR_STRUCT(def); + PF_ADD_COLOR( STR_SDW1_COL, + 0x50, + 0x50, + 0x50, + ID_SDW1_COL + ); + //---------------------------------------------------------------- + AEFX_CLR_STRUCT(def); + PF_ADD_COLOR( STR_SDW2_COL, + 0x30, + 0x30, + 0x30, + ID_SDW2_COL + ); + //---------------------------------------------------------------- + AEFX_CLR_STRUCT(def); + //def.flags = PF_ParamFlag_START_COLLAPSED; //これをつけると表示時に開いた状態になる + PF_ADD_TOPIC(STR_OUTLINE, ID_LINE_TOPIC); + //---------------------------------------------------------------- + AEFX_CLR_STRUCT(def); + PF_ADD_SLIDER( STR_LINE_WEIGHT, //パラメータの名前 + 1, //数値入力する場合の最小値 + 5, //数値入力する場合の最大値 + 1, //スライダーの最小値 + 5, //スライダーの最大値 + 2, //デフォルトの値 + ID_LINE_WEIGHT + ); + //---------------------------------------------------------------- + AEFX_CLR_STRUCT(def); + PF_ADD_CHECKBOX(STR_NOR_LINE_E, + STR_ON, + TRUE, + 0, + ID_NOR_LINE_ENABLED + ); + //---------------------------------------------------------------- + AEFX_CLR_STRUCT(def); + PF_ADD_CHECKBOX(STR_SDW1_LINE_E, + STR_ON, + TRUE, + 0, + ID_SDW1_LINE_ENABLED + ); + //---------------------------------------------------------------- + AEFX_CLR_STRUCT(def); + PF_ADD_CHECKBOX(STR_SDW2_LINE_E, + STR_ON, + TRUE, + 0, + ID_SDW2_LINE_ENABLED + ); + //---------------------------------------------------------------- + AEFX_CLR_STRUCT(def); + PF_ADD_COLOR( STR_NOR_LINE, + 0x50, + 0x50, + 0x50, + ID_NOR_LINE + ); + //---------------------------------------------------------------- + AEFX_CLR_STRUCT(def); + PF_ADD_COLOR( STR_SDW1_LINE_E, + 0x30, + 0x30, + 0x30, + ID_SDW1_LINE + ); + + //---------------------------------------------------------------- + AEFX_CLR_STRUCT(def); + PF_ADD_COLOR( STR_SDW2_LINE_E, + 0x20, + 0x20, + 0x20, + ID_SDW2_LINE + ); + + //---------------------------------------------------------------- + AEFX_CLR_STRUCT(def); + PF_END_TOPIC(ID_LINE_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; + 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 +alpha8 ( + 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); + + A_long v = (A_long)( ( 0.29891 * (double)outP->red) + ( 0.58661 * (double)outP->green) + ( 0.11448 * (double)outP->blue)+0.5); + + if ( outP->alpha >=niP->alpha){ + outP->red = + outP->blue = + outP->alpha = PF_MAX_CHAN8; + }else{ + outP->red = + outP->blue = + outP->alpha = 0; + } + if (outP->alpha == 0){ + outP->green = 0; + }else{ + if ((niP->h_on==TRUE)&&(v>=niP->hi)){ + outP->green = 2; + }else if ((niP->s2_on==TRUE)&&(v<=niP->sdw2)){ + outP->green = 8; + }else if ((niP->s1_on==TRUE)&&(v<=niP->sdw1)){ + outP->green = 6; + }else{ + outP->green = 4; + } + } + + return err; +} +//------------------------------------------------------------------------------------------------- +static PF_Err +alpha16 ( + 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); + + A_long v = (A_long)( ( 0.29891 * (double)outP->red) + ( 0.58661 * (double)outP->green) + ( 0.11448 * (double)outP->blue)+0.5); + + if ( outP->alpha >=niP->alpha){ + outP->red = + outP->blue = + outP->alpha = PF_MAX_CHAN16; + }else{ + outP->red = + outP->blue = + outP->alpha = 0; + } + if (outP->alpha == 0){ + outP->green = 0; + }else{ + if ((niP->h_on==TRUE)&&(v>=niP->hi)){ + outP->green = 2; + }else if ((niP->s2_on==TRUE)&&(v<=niP->sdw2)){ + outP->green = 8; + }else if ((niP->s1_on==TRUE)&&(v<=niP->sdw1)){ + outP->green = 6; + }else{ + outP->green = 4; + } + } + + return err; +} +//------------------------------------------------------------------------------------------------- +static PF_Err +alpha32 ( + 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); + + PF_FpShort v = (PF_FpShort)( ( 0.29891 * outP->red) + ( 0.58661 * outP->green) + ( 0.11448 * outP->blue)); + + if ( outP->alpha >=niP->alpha){ + outP->red = + outP->blue = + outP->alpha = 1.0; + }else{ + outP->red = + outP->blue = + outP->alpha = 0; + } + if (outP->alpha == 0){ + outP->green = 0; + }else{ + if ((niP->h_on==TRUE)&&(v>=niP->hi)){ + outP->green = 2; + }else if ((niP->s2_on==TRUE)&&(v<=niP->sdw2)){ + outP->green = 8; + }else if ((niP->s1_on==TRUE)&&(v<=niP->sdw1)){ + outP->green = 6; + }else{ + outP->green = 4; + } + } + + return err; +} +//------------------------------------------------------------------------------------------------- +static PF_Err +outline8 ( + 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); + + bool ol = ((outP->red - outP->alpha)>0); + A_u_char a = 0 , g = 0; + a = outP->red; + g = outP->green; + if (a>0){ + if (g == 2){ + *outP = niP->hiCol; + }else if(g == 6){ + if (ol && niP->s1l_on){ + *outP = niP->sdw1Line; + }else{ + *outP = niP->sdw1Col; + } + }else if(g == 8){ + if (ol && niP->s2l_on){ + *outP = niP->sdw2Line; + }else{ + *outP = niP->sdw2Col; + } + }else{ + if (ol && niP->nl_on){ + *outP = niP->norLine; + }else{ + *outP = niP->norCol; + } + } + } + outP->alpha = a; + return err; +} +//------------------------------------------------------------------------------------------------- +static PF_Err +outline16 ( + 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); + + bool ol = ((outP->red - outP->alpha)>0); + A_u_short a = 0 , g = 0; + a = outP->red; + g = outP->green; + if (a>0){ + if (g == 2){ + *outP = niP->hiCol; + }else if(g == 6){ + if (ol && niP->s1l_on){ + *outP = niP->sdw1Line; + }else{ + *outP = niP->sdw1Col; + } + }else if(g == 8){ + if (ol && niP->s2l_on){ + *outP = niP->sdw2Line; + }else{ + *outP = niP->sdw2Col; + } + }else{ + if (ol && niP->nl_on){ + *outP = niP->norLine; + }else{ + *outP = niP->norCol; + } + } + } + outP->alpha = a; + return err; +} +//------------------------------------------------------------------------------------------------- +static PF_Err +outline32 ( + 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); + + bool ol = ((outP->red - outP->alpha)>0); + PF_FpShort a = 0 , g = 0; + a = outP->red; + g = outP->green; + if (a>0){ + if (g == 2){ + *outP = niP->hiCol; + }else if(g == 6){ + if (ol && niP->s1l_on){ + *outP = niP->sdw1Line; + }else{ + *outP = niP->sdw1Col; + } + }else if(g == 8){ + if (ol && niP->s2l_on){ + *outP = niP->sdw2Line; + }else{ + *outP = niP->sdw2Col; + } + }else{ + if (ol && niP->nl_on){ + *outP = niP->norLine; + }else{ + *outP = niP->norCol; + } + } + } + outP->alpha = a; + return err; +} + + +//------------------------------------------------------------------------------------------------- +static PF_Err GetParams(CFsAE *ae, ParamInfo *infoP) +{ + PF_Err err = PF_Err_NONE; + + ERR(ae->GetFLOAT(ID_ALPHA,&infoP->alpha)); + infoP->alpha /= 100.0; + + + ERR(ae->GetCHECKBOX(ID_HI_ENABLED,&infoP->h_on)); + ERR(ae->GetCHECKBOX(ID_SDW1_ENABLED,&infoP->s1_on)); + ERR(ae->GetCHECKBOX(ID_SDW2_ENABLED,&infoP->s2_on)); + + ERR(ae->GetCHECKBOX(ID_NOR_LINE_ENABLED,&infoP->nl_on)); + ERR(ae->GetCHECKBOX(ID_SDW1_LINE_ENABLED,&infoP->s1l_on)); + ERR(ae->GetCHECKBOX(ID_SDW2_LINE_ENABLED,&infoP->s2l_on)); + + ERR(ae->GetFLOAT(ID_HI,&infoP->hi)); + infoP->hi /= 100.0; + ERR(ae->GetFLOAT(ID_SDW1,&infoP->sdw1)); + infoP->sdw1 /= 100.0; + ERR(ae->GetFLOAT(ID_SDW2,&infoP->sdw2)); + infoP->sdw2 /= 100.0; + + + ERR(ae->GetCOLOR(ID_HI_COL,&infoP->hiCol)); + ERR(ae->GetCOLOR(ID_NOR_COL,&infoP->norCol)); + ERR(ae->GetCOLOR(ID_SDW1_COL,&infoP->sdw1Col)); + ERR(ae->GetCOLOR(ID_SDW2_COL,&infoP->sdw2Col)); + + ERR(ae->GetADD(ID_LINE_WEIGHT,&infoP->lineWeight)); + + ERR(ae->GetCOLOR(ID_NOR_LINE,&infoP->norLine)); + ERR(ae->GetCOLOR(ID_SDW1_LINE,&infoP->sdw1Line)); + ERR(ae->GetCOLOR(ID_SDW2_LINE,&infoP->sdw2Line)); + + return err; +} +//------------------------------------------------------------------------------------------------- +static ParamInfo8 toInfo8(ParamInfo *infoP) +{ + ParamInfo8 ret; + ret.h_on = infoP->h_on; + ret.s1_on = infoP->s1_on; + ret.s2_on = infoP->s2_on; + + ret.nl_on = infoP->nl_on; + ret.s1l_on = infoP->s1l_on; + ret.s2l_on = infoP->s2l_on; + + ret.lineWeight = infoP->lineWeight; + + ret.alpha = RoundByteFpLong((double)PF_MAX_CHAN8 * infoP->alpha + 0.5); + + ret.hi = RoundByteFpLong((double)PF_MAX_CHAN8 * infoP->hi + 0.5); + ret.sdw1 = RoundByteFpLong((double)PF_MAX_CHAN8 * infoP->sdw1 + 0.5); + ret.sdw2 = RoundByteFpLong((double)PF_MAX_CHAN8 * infoP->sdw2 + 0.5); + + ret.hiCol = infoP->hiCol; + ret.norCol = infoP->norCol; + ret.sdw1Col = infoP->sdw1Col; + ret.sdw2Col = infoP->sdw2Col; + + ret.norLine = infoP->norLine; + ret.sdw1Line= infoP->sdw1Line; + ret.sdw2Line= infoP->sdw2Line; + + return ret; +} +//------------------------------------------------------------------------------------------------- +static ParamInfo16 toInfo16(ParamInfo *infoP) +{ + ParamInfo16 ret; + ret.h_on = infoP->h_on; + ret.s1_on = infoP->s1_on; + ret.s2_on = infoP->s2_on; + + ret.nl_on = infoP->nl_on; + ret.s1l_on = infoP->s1l_on; + ret.s2l_on = infoP->s2l_on; + + ret.lineWeight = infoP->lineWeight; + + ret.alpha = RoundShortFpLong((double)PF_MAX_CHAN16 * infoP->alpha + 0.5); + + ret.hi = RoundShortFpLong((double)PF_MAX_CHAN16 * infoP->hi + 0.5); + ret.sdw1 = RoundShortFpLong((double)PF_MAX_CHAN16 * infoP->sdw1 + 0.5); + ret.sdw2 = RoundShortFpLong((double)PF_MAX_CHAN16 * infoP->sdw2 + 0.5); + + ret.hiCol = CONV8TO16(infoP->hiCol); + ret.norCol = CONV8TO16(infoP->norCol); + ret.sdw1Col = CONV8TO16(infoP->sdw1Col); + ret.sdw2Col = CONV8TO16(infoP->sdw2Col); + + ret.norLine = CONV8TO16(infoP->norLine); + ret.sdw1Line= CONV8TO16(infoP->sdw1Line); + ret.sdw2Line= CONV8TO16(infoP->sdw2Line); + + return ret; +} +//------------------------------------------------------------------------------------------------- +static ParamInfo32 toInfo32(ParamInfo *infoP) +{ + ParamInfo32 ret; + ret.h_on = infoP->h_on; + ret.s1_on = infoP->s1_on; + ret.s2_on = infoP->s2_on; + + ret.nl_on = infoP->nl_on; + ret.s1l_on = infoP->s1l_on; + ret.s2l_on = infoP->s2l_on; + + ret.lineWeight = infoP->lineWeight; + + ret.alpha = RoundFpShortDouble(infoP->alpha); + + ret.hi = RoundFpShortDouble(infoP->hi); + ret.sdw1 = RoundFpShortDouble(infoP->sdw1); + ret.sdw2 = RoundFpShortDouble(infoP->sdw2); + + ret.hiCol = CONV8TO32(infoP->hiCol); + ret.norCol = CONV8TO32(infoP->norCol); + ret.sdw1Col = CONV8TO32(infoP->sdw1Col); + ret.sdw2Col = CONV8TO32(infoP->sdw2Col); + + ret.norLine = CONV8TO32(infoP->norLine); + ret.sdw1Line= CONV8TO32(infoP->sdw1Line); + ret.sdw2Line= CONV8TO32(infoP->sdw2Line); + + return ret; +}//------------------------------------------------------------------------------------------------- +static PF_Err + Exec (CFsAE *ae , ParamInfo *infoP) +{ + PF_Err err = PF_Err_NONE; + + //画面をコピー + ERR(ae->CopyInToOut()); + + ParamInfo8 info8; + ParamInfo16 info16; + ParamInfo32 info32; + switch(ae->pixelFormat()) + { + case PF_PixelFormat_ARGB128: + info32 = toInfo32(infoP); + ERR(ae->iterate32((refconType)&info32,alpha32)); + if ((infoP->nl_on)||(infoP->s1l_on)||(infoP->s2l_on)){ + ERR(ae->out->MinimaxA32(infoP->lineWeight*-1)); + } + ERR(ae->iterate32((refconType)&info32,outline32)); + break; + case PF_PixelFormat_ARGB64: + info16 = toInfo16(infoP); + ERR(ae->iterate16((refconType)&info16,alpha16)); + if ((infoP->nl_on)||(infoP->s1l_on)||(infoP->s2l_on)){ + ERR(ae->out->MinimaxA16(infoP->lineWeight*-1)); + } + ERR(ae->iterate16((refconType)&info16,outline16)); + break; + case PF_PixelFormat_ARGB32: + info8 = toInfo8(infoP); + ERR(ae->iterate8((refconType)&info8,alpha8)); + if ((infoP->nl_on)||(infoP->s1l_on)||(infoP->s2l_on)){ + ERR(ae->out->MinimaxA8(infoP->lineWeight*-1)); + } + ERR(ae->iterate8((refconType)&info8,outline8)); + 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/smokeThreshold/smokeThreshold.h b/smokeThreshold/smokeThreshold.h new file mode 100644 index 0000000..5c1f4c9 --- /dev/null +++ b/smokeThreshold/smokeThreshold.h @@ -0,0 +1,216 @@ +//----------------------------------------------------------------------------------- +/* + smokeThreshold for VS2010 +*/ +//----------------------------------------------------------------------------------- + +#pragma once +#ifndef smokeThreshold_H +#define smokeThreshold_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_ALPHA, + ID_HI_ENABLED, + ID_SDW1_ENABLED, + ID_SDW2_ENABLED, + ID_HI, + ID_SDW1, + ID_SDW2, + ID_HI_COL, + ID_NOR_COL, + ID_SDW1_COL, + ID_SDW2_COL, + ID_LINE_TOPIC, + ID_LINE_WEIGHT, + ID_NOR_LINE_ENABLED, + ID_SDW1_LINE_ENABLED, + ID_SDW2_LINE_ENABLED, + ID_NOR_LINE, + ID_SDW1_LINE, + ID_SDW2_LINE, + ID_LINE_TOPIC_END, + + ID_NUM_PARAMS +}; + +//UIの表示文字列 +#define STR_ALPHA "alphaThreshold" +#define STR_HI "hilight" +#define STR_SDW1 "shadow1" +#define STR_SDW2 "shadow2" + +#define STR_ON "on" +#define STR_ALPHA_E "alphaThresholdEnabled" +#define STR_HI_E "hilightEnabled" +#define STR_SDW1_E "shadow1Enabled" +#define STR_SDW2_E "shadow2Enabled" + +#define STR_HI_COL "hilightColor" +#define STR_NOR_COL "normalColor" +#define STR_SDW1_COL "shadow1Color" +#define STR_SDW2_COL "shadow2Color" + +#define STR_LINE_WEIGHT "LineWeight" + +#define STR_OUTLINE "OutLine" + +#define STR_NOR_LINE "normalLine" +#define STR_SDW1_LINE "shadow1Line" +#define STR_SDW2_LINE "shadow2Line" + +#define STR_NOR_LINE_E "normalLine_Enabled" +#define STR_SDW1_LINE_E "shadow1Line_Enabled" +#define STR_SDW2_LINE_E "shadow2Line_Enabled" + +//UIのパラメータ +typedef struct ParamInfo { + PF_Boolean h_on; + PF_Boolean s1_on; + PF_Boolean s2_on; + + PF_Boolean nl_on; + PF_Boolean s1l_on; + PF_Boolean s2l_on; + + double alpha; + double hi; + double sdw1; + double sdw2; + + PF_Pixel hiCol; + PF_Pixel norCol; + PF_Pixel sdw1Col; + PF_Pixel sdw2Col; + + A_long lineWeight; + PF_Pixel norLine; + PF_Pixel sdw1Line; + PF_Pixel sdw2Line; +} ParamInfo, *ParamInfoP, **ParamInfoH; + +typedef struct ParamInfo8 { + PF_Boolean a_on; + PF_Boolean h_on; + PF_Boolean s1_on; + PF_Boolean s2_on; + + PF_Boolean nl_on; + PF_Boolean s1l_on; + PF_Boolean s2l_on; + + A_u_char alpha; + A_u_char hi; + A_u_char sdw1; + A_u_char sdw2; + + PF_Pixel hiCol; + PF_Pixel norCol; + PF_Pixel sdw1Col; + PF_Pixel sdw2Col; + + A_long lineWeight; + PF_Pixel norLine; + PF_Pixel sdw1Line; + PF_Pixel sdw2Line; + +} ParamInfo8, *ParamInfo8P, **ParamInfo8H; +typedef struct ParamInfo16 { + PF_Boolean a_on; + PF_Boolean h_on; + PF_Boolean s1_on; + PF_Boolean s2_on; + + PF_Boolean nl_on; + PF_Boolean s1l_on; + PF_Boolean s2l_on; + + A_u_short alpha; + A_u_short hi; + A_u_short sdw1; + A_u_short sdw2; + + PF_Pixel16 hiCol; + PF_Pixel16 norCol; + PF_Pixel16 sdw1Col; + PF_Pixel16 sdw2Col; + + A_long lineWeight; + PF_Pixel16 norLine; + PF_Pixel16 sdw1Line; + PF_Pixel16 sdw2Line; +} ParamInfo16, *ParamInfo16P, **ParamInfo16H; +typedef struct ParamInfo32 { + PF_Boolean a_on; + PF_Boolean h_on; + PF_Boolean s1_on; + PF_Boolean s2_on; + + PF_Boolean nl_on; + PF_Boolean s1l_on; + PF_Boolean s2l_on; + + PF_FpShort alpha; + PF_FpShort hi; + PF_FpShort sdw1; + PF_FpShort sdw2; + + PF_PixelFloat hiCol; + PF_PixelFloat norCol; + PF_PixelFloat sdw1Col; + PF_PixelFloat sdw2Col; + + A_long lineWeight; + PF_PixelFloat norLine; + PF_PixelFloat sdw1Line; + PF_PixelFloat sdw2Line; +} 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 // smokeThreshold_H diff --git a/smokeThreshold/smokeThresholdPiPL.r b/smokeThreshold/smokeThresholdPiPL.r new file mode 100644 index 0000000..98b2313 --- /dev/null +++ b/smokeThreshold/smokeThresholdPiPL.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/sputteringAlpha/Fs_Entry.h b/sputteringAlpha/Fs_Entry.h new file mode 100644 index 0000000..ee3be89 --- /dev/null +++ b/sputteringAlpha/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/sputteringAlpha/Fs_Target.h b/sputteringAlpha/Fs_Target.h new file mode 100644 index 0000000..48fbf83 --- /dev/null +++ b/sputteringAlpha/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 sputteringAlpha" + +//----------------------------------------------------------------------------------- +//プラグインの説明に使われる文字 +#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/sputteringAlpha/Win/sputteringAlpha.vcxproj b/sputteringAlpha/Win/sputteringAlpha.vcxproj new file mode 100644 index 0000000..a1d56d4 --- /dev/null +++ b/sputteringAlpha/Win/sputteringAlpha.vcxproj @@ -0,0 +1,591 @@ +サソ + + + + Debug + Win32 + + + Debug + x64 + + + Release-MD + Win32 + + + Release-MD + x64 + + + Release + Win32 + + + Release + x64 + + + + {68A7D7A6-8D9A-471F-A03C-D136B84D87A9} + sputteringAlpha + sputteringAlpha + 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/sputteringAlpha.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/sputteringAlpha.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/sputteringAlpha.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/sputteringAlpha.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/sputteringAlpha.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/sputteringAlpha.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/sputteringAlpha/Win/sputteringAlpha.vcxproj.filters b/sputteringAlpha/Win/sputteringAlpha.vcxproj.filters new file mode 100644 index 0000000..e7b8362 --- /dev/null +++ b/sputteringAlpha/Win/sputteringAlpha.vcxproj.filters @@ -0,0 +1,166 @@ +サソ + + + + {f874816d-f7a3-41e3-a832-f44a0d324b10} + h;hpp;hxx;hm;inl;fi;fd + + + {3f428961-d7b3-4bb9-8ea5-6c6ef6caf3d2} + + + {7f227d3d-2de0-4103-873d-8a225715b872} + ico;cur;bmp;dlg;rc2;rct;bin;cnt;rtf;gif;jpg;jpeg;jpe + + + {bb1ed5c4-395d-4159-86a8-98f587d0ea46} + + + {96dbdb97-1b26-4e72-aa8a-e1f9d6c2145d} + + + {1d50a212-b7ef-4b27-aae7-bc86ecc5dc54} + + + {6153a68f-c866-4ffe-8adb-ca719eeac9de} + + + {57ee8d47-0991-4ca6-b3f0-9654ce6ab277} + + + + + 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 + + + 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/sputteringAlpha/Win/sputteringAlphaPiPL.rc b/sputteringAlpha/Win/sputteringAlphaPiPL.rc new file mode 100644 index 0000000..20e228f --- /dev/null +++ b/sputteringAlpha/Win/sputteringAlphaPiPL.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 sputteringAlpha", + + "MIB8", + "gtac", + 0, 0x0, + 20, 0x0, + "\x10F's Plugins-Draw\0\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 sputteringAlpha", + + "MIB8", + 0x6165464CL, + 0L, + 4L + 0L, + + +END + diff --git a/sputteringAlpha/sputteringAlpha.cpp b/sputteringAlpha/sputteringAlpha.cpp new file mode 100644 index 0000000..f4a5fed --- /dev/null +++ b/sputteringAlpha/sputteringAlpha.cpp @@ -0,0 +1,326 @@ +//----------------------------------------------------------------------------------- +/* + F's Plugins for VS2010/VS2012 +*/ +//----------------------------------------------------------------------------------- + +#include "sputteringAlpha.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( UI_SEED, //パラメータの名前 + 0, //数値入力する場合の最小値 + 32000, //数値入力する場合の最大値 + 0, //スライダーの最小値 + 144, //スライダーの最大値 + 0, //デフォルトの値 + ID_SEED + ); + //----------------- + AEFX_CLR_STRUCT(def); + PF_ADD_FIXED( UI_VALUE, //パラメータの名前 + 0, //数値入力する場合の最小値 + 100, //数値入力する場合の最大値 + 0, //スライダーの最小値 + 100, //スライダーの最大値 + 10, //デフォルトの値 + 1, //表示される小数の桁数 + 0, + 0, + ID_VALUE + ); + //----------------- + AEFX_CLR_STRUCT(def); + PF_ADD_FIXED( UI_EDGE_VALUE, //パラメータの名前 + 0, //数値入力する場合の最小値 + 100, //数値入力する場合の最大値 + 0, //スライダーの最小値 + 200, //スライダーの最大値 + 15, //デフォルトの値 + 1, //表示される小数の桁数 + 0, + 0, + ID_EDGE_VALUE + ); + //----------------- + AEFX_CLR_STRUCT(def); + PF_ADD_FIXED( UI_OPA_RND, //パラメータの名前 + 0, //数値入力する場合の最小値 + 5, //数値入力する場合の最大値 + 0, //スライダーの最小値 + 2, //スライダーの最大値 + 1, //デフォルトの値 + 2, //表示される小数の桁数 + 0, + 0, + ID_OPACITY_RAND + ); + //----------------- + AEFX_CLR_STRUCT(def); + PF_ADD_SLIDER( UI_POINT_VALUE, //パラメータの名前 + 1, //数値入力する場合の最小値 + 100, //数値入力する場合の最大値 + 1, //スライダーの最小値 + 50, //スライダーの最大値 + 20, //デフォルトの値 + ID_POINT_VALUE + ); + //----------------- + AEFX_CLR_STRUCT(def); + PF_ADD_SLIDER( UI_POINT_LENGTH, //パラメータの名前 + 1, //数値入力する場合の最小値 + 1000, //数値入力する場合の最大値 + 5, //スライダーの最小値 + 200, //スライダーの最大値 + 100, //デフォルトの値 + ID_POINT_LENGTH + ); + //----------------- + //ポップアップ + AEFX_CLR_STRUCT(def); + PF_ADD_POPUP( UI_SIZE1, + UI_SIZE_COUNT, //メニューの数 + UI_SIZE_DFLT, //デフォルト + UI_SIZE2, + ID_SIZE + ); + + //----------------- + AEFX_CLR_STRUCT(def); + PF_ADD_COLOR( UI_COLOR1, + PF_MAX_CHAN8, // Red + PF_MAX_CHAN8, //Green + PF_MAX_CHAN8, //Blue + ID_COLOR1 + ); + + //----------------- + //トピック表示の開始 + AEFX_CLR_STRUCT(def); + def.flags = PF_ParamFlag_START_COLLAPSED; // + PF_ADD_TOPIC( UI_COLOR_TOPIC, + ID_COLOR_TOPIC + ); + //----------------- + AEFX_CLR_STRUCT(def); + PF_ADD_SLIDER( UI_COLOR_MAX, //パラメータの名前 + 1, //数値入力する場合の最小値 + UI_COLOR_MAX_V, //数値入力する場合の最大値 + 1, //スライダーの最小値 + UI_COLOR_MAX_V, //スライダーの最大値 + 20, //デフォルトの値 + ID_COLOR_MAX + ); + + //----------------- + AEFX_CLR_STRUCT(def); + PF_ADD_COLOR( UI_COLOR2, + PF_MAX_CHAN8, // Red + PF_MAX_CHAN8, //Green + 0, //Blue + ID_COLOR2 + ); + //----------------- + AEFX_CLR_STRUCT(def); + PF_ADD_COLOR( UI_COLOR3, + PF_MAX_CHAN8, // Red + 0, //Green + PF_MAX_CHAN8, //Blue + ID_COLOR3 + ); + //----------------- + AEFX_CLR_STRUCT(def); + PF_ADD_COLOR( UI_COLOR4, + 0, // Red + PF_MAX_CHAN8, //Green + PF_MAX_CHAN8, //Blue + ID_COLOR4 + ); + //----------------- + //トピック表示の終わり + AEFX_CLR_STRUCT(def); + PF_END_TOPIC(ID_COLOR_TOPIC_END); + //----------------- + //チェックボックス + AEFX_CLR_STRUCT(def); + PF_ADD_CHECKBOX(UI_ORG1, + UI_ORG2, + FALSE, + 0, + ID_ORG + ); + + //----------------- + out_data->num_params = ID_NUM_PARAMS; + + return err; +} + +//------------------------------------------------------------------------------------------------- +static PF_Err GetParams(CFsAE *ae, ParamInfo *infoP) +{ + PF_Err err = PF_Err_NONE; + + ERR(ae->GetADD(ID_SEED,&infoP->seed)); + ERR(ae->GetFIXED_PER2ONE(ID_VALUE,&infoP->value)); + ERR(ae->GetFIXED_PER2ONE(ID_EDGE_VALUE,&infoP->edge_value)); + ERR(ae->GetFIXED(ID_OPACITY_RAND,&infoP->opa)); + + ERR(ae->GetADD(ID_POINT_VALUE,&infoP->point_value)); + ERR(ae->GetADD(ID_POINT_LENGTH,&infoP->point_length)); + if (!err){ + infoP->point_length = ae->downScale(infoP->point_length); + if (infoP->point_length <2) infoP->point_length = 2; + } + + ERR(ae->GetPOPUP(ID_SIZE,&infoP->size)); + ERR(ae->GetADD(ID_COLOR_MAX,&infoP->color_max)); + ERR(ae->GetCOLOR(ID_COLOR1,&infoP->colors[0])); + ERR(ae->GetCOLOR(ID_COLOR2,&infoP->colors[1])); + ERR(ae->GetCOLOR(ID_COLOR3,&infoP->colors[2])); + ERR(ae->GetCOLOR(ID_COLOR4,&infoP->colors[3])); + + ERR(ae->GetCHECKBOX(ID_ORG,&infoP->org)); + + return err; +} +//------------------------------------------------------------------------------------------------- +static PF_Err + Exec (CFsAE *ae , ParamInfo *infoP) +{ + PF_Err err = PF_Err_NONE; + + if (infoP->org == TRUE) { + ERR( ae->CopyInToOut()); + }else{ + ERR(ae->out->clear()); + } + if ( ((infoP->value>0)&&(infoP->edge_value>0))&&(infoP->opa>0) ){ + CFsBuffer buf1 = ae->NewBuffer( ae->out->width() *(ae->out->height()+8)*sizeof(A_u_char));// + SPD_RAND_MAX + if (buf1.alive()==FALSE){ + ae->out_data->out_flags |= PF_OutFlag_DISPLAY_ERROR_MESSAGE; + err = PF_Err_INTERNAL_STRUCT_DAMAGED; + return err; + } + CFsBuffer buf2 = ae->NewBuffer((SPD_RAND_MAX+8)*sizeof(A_u_char));// + + if (buf2.alive()==FALSE){ + buf1.Dispose(); + ae->out_data->out_flags |= PF_OutFlag_DISPLAY_ERROR_MESSAGE; + err = PF_Err_INTERNAL_STRUCT_DAMAGED; + return err; + } + infoP->buf = buf1.bufA_u_char(); + infoP->sputRandTable = buf2.bufA_u_char(); + SetupSputData(infoP->size,infoP->sputRandTable); + + switch(ae->pixelFormat()) + { + case PF_PixelFormat_ARGB128: + ERR(MainRender32(ae,infoP)); + break; + case PF_PixelFormat_ARGB64: + ERR(MainRender16(ae,infoP)); + break; + case PF_PixelFormat_ARGB32: + ERR(MainRender8(ae,infoP)); + break; + } + buf1.Dispose(); + buf2.Dispose(); + } + + 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" diff --git a/sputteringAlpha/sputteringAlpha.h b/sputteringAlpha/sputteringAlpha.h new file mode 100644 index 0000000..3f4e32c --- /dev/null +++ b/sputteringAlpha/sputteringAlpha.h @@ -0,0 +1,150 @@ +//----------------------------------------------------------------------------------- +/* + PluginSkeleton for VS2010 +*/ +//----------------------------------------------------------------------------------- +#pragma once +#ifndef sputteringAlpha_H +#define sputteringAlpha_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/FsSputtering.h" + + +//----------------------------------------------------------------------------- +//ParamsSetup用の定数 +enum { + ID_INPUT = 0, + + ID_SEED, //乱数の基準 + ID_VALUE, //量 + ID_EDGE_VALUE, //量 + ID_OPACITY_RAND, //量 + + ID_POINT_VALUE, //一回の描画で打つ点の数 + ID_POINT_LENGTH, //点の距離 + + ID_SIZE, + + ID_COLOR1, + ID_COLOR_TOPIC, + ID_COLOR_MAX, + ID_COLOR2, + ID_COLOR3, + ID_COLOR4, + ID_COLOR_TOPIC_END, + ID_ORG, + + ID_NUM_PARAMS +}; +//----------------------------------------------------------------------------- +//パラメータUI用の文字列 +#define UI_SEED "seed" +#define UI_VALUE "value(%)" +#define UI_EDGE_VALUE "edge_value(%)" +#define UI_OPA_RND "opacity_rand" + +#define UI_POINT_VALUE "PointValue" +#define UI_POINT_LENGTH "PointLength" +#define UI_POINT_LEN_SYSNC1 "Point_length_sysnc" +#define UI_POINT_LEN_SYSNC2 "ON" + +#define UI_SIZE1 "size" +#define UI_SIZE2 "極小|小|中|大|特大" +#define UI_SIZE_COUNT 5 +#define UI_SIZE_DFLT 2 + +#define UI_COLOR1 "Color1" +#define UI_COLOR_TOPIC "ExtraColors" +#define UI_COLOR_MAX "ColorMax" +#define UI_COLOR_MAX_V 4 +#define UI_COLOR2 "Color2" +#define UI_COLOR3 "Color3" +#define UI_COLOR4 "Color4" +#define UI_ORG1 "Blend with original" +#define UI_ORG2 "ON" + + + +//----------------------------------------------------------------------------- +#define SPD_RAND_MAX 200 +#define SPD_VSMALL_VALUE 255 + + +#define EDGE_BORDER8 (PF_MAX_CHAN8 * 8 /10) +#define EDGE_BORDER16 (PF_MAX_CHAN16 * 8 /10) +#define EDGE_BORDER32 (0.8) + +#define TARGET_EDGE (PF_MAX_CHAN8) +#define TARGET_SOLID (PF_HALF_CHAN8) + +typedef struct +{ + A_long seed; + PF_Fixed value; + PF_Fixed edge_value; + PF_Fixed opa; + + A_long point_value; + A_long point_length; + A_long size; + A_long color_max; + PF_Pixel colors[UI_COLOR_MAX_V]; + A_u_char *sputRandTable; + A_u_char *buf; + PF_Boolean org; +} ParamInfo; + + +//----------------------------------------------------------------------------- +//関数の宣言 +PF_Err MainRender8 (CFsAE *ae, ParamInfo *prm); +PF_Err MainRender16 (CFsAE *ae, ParamInfo *prm); +PF_Err MainRender32 (CFsAE *ae, ParamInfo *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 *extra); +} +//----------------------------------------------------------------------------- + +#endif // sputteringAlpha_H \ No newline at end of file diff --git a/sputteringAlpha/sputteringAlpha16.cpp b/sputteringAlpha/sputteringAlpha16.cpp new file mode 100644 index 0000000..d984172 --- /dev/null +++ b/sputteringAlpha/sputteringAlpha16.cpp @@ -0,0 +1,135 @@ +//----------------------------------------------------------------------------- +/* + AEP Project用のプラグイン + sputteringAlpha + 描画のみ +*/ +//----------------------------------------------------------------------------- +#include "sputteringAlpha.h" +//----------------------------------------------------------------------------- +//----------------------------------------------------------------------------- +PF_Err MainRender16 (CFsAE *ae, ParamInfo *prm) +{ + PF_Err err = PF_Err_NONE; + + PF_Fixed value = prm->value /100; + PF_Fixed eValue = prm->edge_value /10; + A_long pValue = prm->point_value; + PF_Fixed pLen = prm->point_length; //値は整数 + A_long colRnd = prm->color_max -1; + A_long colR; + A_long i; + A_long x,y; + PF_Pixel16 colors[4]; + + for (i=0; icolors[i]); + + + //エッジの場所を探してoutputのalphaへ保存 + A_u_long targetIn =0; + A_u_long targetOut =0; + PF_Pixel16 *iD; + iD = (PF_Pixel16 *)ae->in->data(); + PF_Pixel16 *oD; + oD = (PF_Pixel16 *)ae->out->data(); + A_u_char *buf; + buf = prm->buf; + PF_Pixel16 c; + A_long we = ae->in->width()-1; + A_long he = ae->in->height()-1; + A_long offset[8]; + //テーブル作成 + offset[0] = -1 - ae->in->widthTrue(); + offset[1] = 0 - ae->in->widthTrue(); + offset[2] = 1 - ae->in->widthTrue(); + offset[3] = -1 ; + offset[4] = 1 ; + offset[5] = -1 + ae->in->widthTrue(); + offset[6] = 0 + ae->in->widthTrue(); + offset[7] = 1 + ae->in->widthTrue(); + /* + 透明なところは0 + エッジはTARGET_EDGE8 + 普通なところはTARGET_SOLID8 + をbufに書き込む + */ + A_u_char eg = 0; + for( y=0; yout->height(); y++){ + for( x=0; xout->width(); x++){ + c = iD[targetIn]; + eg = 0; + if (c.alpha>=EDGE_BORDER16){ + eg = TARGET_SOLID; + if ( (x>=1)&&(x=1)&&(yin->offsetWidth(); + targetOut += ae->out->offsetWidth(); + } + + //さぁ、描画だ + F_SRAND(prm->seed); + + sputDrawPrm sdp; + sdp.data = ae->out->data(); + sdp.width = ae->out->width(); + sdp.height = ae->out->height(); + sdp.widthTrue = ae->out->widthTrue(); + + CRotCalc rc(ae->in_data); + + targetOut =0; + A_long xx,yy; + for( y=0; yout->height(); y++){ + yy = y; + for( x=0; xout->width(); x++){ + xx = x; + A_u_char flg = buf[targetOut]; + A_long rnd = FM_RAND((1L<<16)); + A_long rndScale =1; + if (flg == TARGET_SOLID){ + if (value < rnd) { flg = 0;} + rndScale = 5; + }else if (flg == TARGET_EDGE) { + if (eValue < rnd) { flg = 0;} + rndScale = 3; + }else{ + flg = 0; + } + if (flg>0){ + for (i=0; iopa; + sdp.opa = (PF_FpShort)FM_RAND(opa)/65536; + sdp.sptIdx = prm->sputRandTable[FM_RAND(200-1)]; + colR = FM_RAND(colRnd); + SputDataDraw16(&sdp,colors[colR]); + } + } + targetOut++; + } + targetOut += ae->out->offsetWidth(); + } + return err; +} +//----------------------------------------------------------------------------- diff --git a/sputteringAlpha/sputteringAlpha32.cpp b/sputteringAlpha/sputteringAlpha32.cpp new file mode 100644 index 0000000..97e4f7f --- /dev/null +++ b/sputteringAlpha/sputteringAlpha32.cpp @@ -0,0 +1,135 @@ +//----------------------------------------------------------------------------- +/* + AEP Project用のプラグイン + sputteringAlpha + 描画のみ +*/ +//----------------------------------------------------------------------------- +#include "sputteringAlpha.h" +//----------------------------------------------------------------------------- +//----------------------------------------------------------------------------- +PF_Err MainRender32 (CFsAE *ae, ParamInfo *prm) +{ + PF_Err err = PF_Err_NONE; + + PF_Fixed value = prm->value /100; + PF_Fixed eValue = prm->edge_value /10; + A_long pValue = prm->point_value; + PF_Fixed pLen = prm->point_length; //値は整数 + A_long colRnd = prm->color_max -1; + A_long colR; + A_long i; + A_long x,y; + PF_PixelFloat colors[4]; + + for (i=0; icolors[i]); + + + //エッジの場所を探してoutputのalphaへ保存 + A_u_long targetIn =0; + A_u_long targetOut =0; + PF_PixelFloat *iD; + iD = (PF_PixelFloat *)ae->in->data(); + PF_PixelFloat *oD; + oD = (PF_PixelFloat *)ae->out->data(); + A_u_char *buf; + buf = prm->buf; + PF_PixelFloat c; + A_long we = ae->in->width()-1; + A_long he = ae->in->height()-1; + A_long offset[8]; + //テーブル作成 + offset[0] = -1 - ae->in->widthTrue(); + offset[1] = 0 - ae->in->widthTrue(); + offset[2] = 1 - ae->in->widthTrue(); + offset[3] = -1 ; + offset[4] = 1 ; + offset[5] = -1 + ae->in->widthTrue(); + offset[6] = 0 + ae->in->widthTrue(); + offset[7] = 1 + ae->in->widthTrue(); + /* + 透明なところは0 + エッジはTARGET_EDGE8 + 普通なところはTARGET_SOLID8 + をbufに書き込む + */ + A_u_char eg = 0; + for( y=0; yout->height(); y++){ + for( x=0; xout->width(); x++){ + c = iD[targetIn]; + eg = 0; + if (c.alpha>=EDGE_BORDER32){ + eg = TARGET_SOLID; + if ( (x>=1)&&(x=1)&&(yin->offsetWidth(); + targetOut += ae->out->offsetWidth(); + } + + //さぁ、描画だ + F_SRAND(prm->seed); + + sputDrawPrm sdp; + sdp.data = ae->out->data(); + sdp.width = ae->out->width(); + sdp.height = ae->out->height(); + sdp.widthTrue = ae->out->widthTrue(); + + CRotCalc rc(ae->in_data); + + targetOut =0; + A_long xx,yy; + for( y=0; yout->height(); y++){ + yy = y; + for( x=0; xout->width(); x++){ + xx = x; + A_u_char flg = buf[targetOut]; + A_long rnd = FM_RAND((1L<<16)); + A_long rndScale =1; + if (flg == TARGET_SOLID){ + if (value < rnd) { flg = 0;} + rndScale = 5; + }else if (flg == TARGET_EDGE) { + if (eValue < rnd) { flg = 0;} + rndScale = 3; + }else{ + flg = 0; + } + if (flg>0){ + for (i=0; iopa; + sdp.opa = (PF_FpShort)FM_RAND(opa)/65536; + sdp.sptIdx = prm->sputRandTable[FM_RAND(200-1)]; + colR = FM_RAND(colRnd); + SputDataDraw32(&sdp,colors[colR]); + } + } + targetOut++; + } + targetOut += ae->out->offsetWidth(); + } + return err; +} +//----------------------------------------------------------------------------- diff --git a/sputteringAlpha/sputteringAlpha8.cpp b/sputteringAlpha/sputteringAlpha8.cpp new file mode 100644 index 0000000..b93f88e --- /dev/null +++ b/sputteringAlpha/sputteringAlpha8.cpp @@ -0,0 +1,134 @@ +//----------------------------------------------------------------------------- +/* + AEP Project用のプラグイン + sputteringAlpha + 描画のみ +*/ +//----------------------------------------------------------------------------- +#include "sputteringAlpha.h" +//----------------------------------------------------------------------------- +//----------------------------------------------------------------------------- +PF_Err MainRender8 (CFsAE *ae, ParamInfo *prm) +{ + PF_Err err = PF_Err_NONE; + + PF_Fixed value = prm->value /100; + PF_Fixed eValue = prm->edge_value /10; + A_long pValue = prm->point_value; + PF_Fixed pLen = prm->point_length; //値は整数 + A_long colRnd = prm->color_max -1; + A_long colR; + + A_long i; + A_long x,y; + + //エッジの場所を探してoutputのalphaへ保存 + A_u_long targetIn =0; + A_u_long targetOut =0; + PF_Pixel *iD; + iD = ae->in->data(); + PF_Pixel *oD; + oD = ae->out->data(); + A_u_char *buf; + buf = prm->buf; + PF_Pixel c; + A_long we = ae->in->width()-1; + A_long he = ae->in->height()-1; + A_long offset[8]; + //テーブル作成 + offset[0] = -1 - ae->in->widthTrue(); + offset[1] = 0 - ae->in->widthTrue(); + offset[2] = 1 - ae->in->widthTrue(); + offset[3] = -1 ; + offset[4] = 1 ; + offset[5] = -1 + ae->in->widthTrue(); + offset[6] = 0 + ae->in->widthTrue(); + offset[7] = 1 + ae->in->widthTrue(); + /* + 透明なところは0 + エッジはTARGET_EDGE8 + 普通なところはTARGET_SOLID8 + をbufに書き込む + */ + A_u_char eg = 0; + for( y=0; yout->height(); y++){ + for( x=0; xout->width(); x++){ + c = iD[targetIn]; + eg = 0; + if (c.alpha>=EDGE_BORDER8){ + eg = TARGET_SOLID; + if ( (x>=1)&&(x=1)&&(yin->offsetWidth(); + targetOut += ae->out->offsetWidth(); + } + + //さぁ、描画だ + F_SRAND(prm->seed); + + sputDrawPrm sdp; + sdp.data = ae->out->data(); + sdp.width = ae->out->width(); + sdp.height = ae->out->height(); + sdp.widthTrue = ae->out->widthTrue(); + + CRotCalc rc(ae->in_data); + targetOut =0; + A_long xx,yy; + for( y=0; yout->height(); y++){ + yy = y; + for( x=0; xout->width(); x++){ + xx = x; + A_u_char flg = buf[targetOut]; + A_long rnd = FM_RAND((1L<<16)); + A_long rndScale =1; + if (flg == TARGET_SOLID){ + if (value < rnd) { flg = 0;} + rndScale = 5; + }else if (flg == TARGET_EDGE) { + if (eValue < rnd) { flg = 0;} + rndScale = 3; + }else{ + flg = 0; + } + if (flg>0){ + for (i=0; iopa; + sdp.opa = (PF_FpShort)FM_RAND(opa)/65536; + sdp.sptIdx = prm->sputRandTable[FM_RAND(200-1)]; + colR = FM_RAND(colRnd); + SputDataDraw8(&sdp,prm->colors[colR]); + } + } + targetOut++; + } + targetOut += ae->out->offsetWidth(); + } + return err; +} +//----------------------------------------------------------------------------- diff --git a/sputteringAlpha/sputteringAlphaPiPL.r b/sputteringAlpha/sputteringAlphaPiPL.r new file mode 100644 index 0000000..e184fa1 --- /dev/null +++ b/sputteringAlpha/sputteringAlphaPiPL.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 { + 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/sputteringCircle/Fs_Entry.h b/sputteringCircle/Fs_Entry.h new file mode 100644 index 0000000..ee3be89 --- /dev/null +++ b/sputteringCircle/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/sputteringCircle/Fs_Target.h b/sputteringCircle/Fs_Target.h new file mode 100644 index 0000000..58d84ab --- /dev/null +++ b/sputteringCircle/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 sputteringCircle" + +//----------------------------------------------------------------------------------- +//プラグインの説明に使われる文字 +#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/sputteringCircle/Win/sputteringCircle.vcxproj b/sputteringCircle/Win/sputteringCircle.vcxproj new file mode 100644 index 0000000..91ddbda --- /dev/null +++ b/sputteringCircle/Win/sputteringCircle.vcxproj @@ -0,0 +1,588 @@ +サソ + + + + Debug + Win32 + + + Debug + x64 + + + Release-MD + Win32 + + + Release-MD + x64 + + + Release + Win32 + + + Release + x64 + + + + {E892EF45-987E-4500-873A-DCEDF2AD78A8} + sputteringCircle + sputteringCircle + 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/sputteringCircle.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/sputteringCircle.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/sputteringCircle.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/sputteringCircle.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/sputteringCircle.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/sputteringCircle.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/sputteringCircle/Win/sputteringCircle.vcxproj.filters b/sputteringCircle/Win/sputteringCircle.vcxproj.filters new file mode 100644 index 0000000..5a6182f --- /dev/null +++ b/sputteringCircle/Win/sputteringCircle.vcxproj.filters @@ -0,0 +1,161 @@ + + + + + {ff43918a-de15-49c7-8e64-70373e9fd6bd} + h;hpp;hxx;hm;inl;fi;fd + + + {7f94c8e4-8782-4337-a793-457b06527716} + + + {19b99ad4-0427-4ca0-8682-dfd16e8e6b31} + ico;cur;bmp;dlg;rc2;rct;bin;cnt;rtf;gif;jpg;jpeg;jpe + + + {6639f27d-552d-4e8d-b8b6-95ad6491121c} + + + {a5feb0e5-8ef5-43ea-8f3f-da910681c1ca} + + + {5b3d0531-b359-4b54-ae41-3b106f1c3188} + + + {54088c1c-b8a1-4fcd-a486-b29e61143b74} + + + {480a5e95-6c85-4755-96ae-edbe6f581a51} + + + + + 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 + + + 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/sputteringCircle/Win/sputteringCirclePiPL.rc b/sputteringCircle/Win/sputteringCirclePiPL.rc new file mode 100644 index 0000000..fe0a0ed --- /dev/null +++ b/sputteringCircle/Win/sputteringCirclePiPL.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, + "\x14F's sputteringCircle\0\0\0", + + "MIB8", + "gtac", + 0, 0x0, + 20, 0x0, + "\x10F's Plugins-Draw\0\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, + "\x14F's sputteringCircle\0\0\0", + + "MIB8", + 0x6165464CL, + 0L, + 4L + 0L, + + +END + diff --git a/sputteringCircle/sputteringCircle.cpp b/sputteringCircle/sputteringCircle.cpp new file mode 100644 index 0000000..b16726c --- /dev/null +++ b/sputteringCircle/sputteringCircle.cpp @@ -0,0 +1,381 @@ +//----------------------------------------------------------------------------------- +/* + F's Plugins for VS2010/VS2012 +*/ +//----------------------------------------------------------------------------------- + +#include "sputteringCircle.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( UI_SEED, //パラメータの名前 + 0, //数値入力する場合の最小値 + 32000, //数値入力する場合の最大値 + 0, //スライダーの最小値 + 144, //スライダーの最大値 + 0, //デフォルトの値 + ID_SEED + ); + //----------------- + AEFX_CLR_STRUCT(def); + PF_ADD_SLIDER( UI_VALUE, //パラメータの名前 + 0, //数値入力する場合の最小値 + 32000, //数値入力する場合の最大値 + 0, //スライダーの最小値 + 100, //スライダーの最大値 + 20, //デフォルトの値 + ID_VALUE + ); + //----------------- + AEFX_CLR_STRUCT(def); + PF_ADD_FIXED( UI_OPA_RND, //パラメータの名前 + 0, //数値入力する場合の最小値 + 5, //数値入力する場合の最大値 + 0, //スライダーの最小値 + 2, //スライダーの最大値 + 1, //デフォルトの値 + 2, //表示される小数の桁数 + 0, + 0, + ID_OPACITY_RAND + ); + //----------------- + AEFX_CLR_STRUCT(def); + PF_ADD_POINT( UI_POS, + 50, // X(横の%) + 50, // Y(縦の%) + FALSE, // TRUEなら0.0から100.0の値に限定される + ID_POS + ); + //----------------- + AEFX_CLR_STRUCT(def); + PF_ADD_SLIDER( UI_RADIUS, //パラメータの名前 + 1, //数値入力する場合の最小値 + 32000, //数値入力する場合の最大値 + 1, //スライダーの最小値 + 800, //スライダーの最大値 + 100, //デフォルトの値 + ID_RADIUS + ); + //----------------- + AEFX_CLR_STRUCT(def); + PF_ADD_FIXED( UI_ASPECT, //パラメータの名前 + 0, //数値入力する場合の最小値 + 100, //数値入力する場合の最大値 + 0, //スライダーの最小値 + 2, //スライダーの最大値 + 1, //デフォルトの値 + 2, //表示される小数の桁数 + 0, + 0, + ID_ASPECT + ); + //----------------- + AEFX_CLR_STRUCT(def); + PF_ADD_FIXED( UI_LENGTH_SCALE,//パラメータの名前 + 0, //数値入力する場合の最小値 + 10000, //数値入力する場合の最大値 + 0, //スライダーの最小値 + 400, //スライダーの最大値 + 100, //デフォルトの値 + 1, //表示される小数の桁数 + 0, + 0, + ID_LENGTH_SCALE + ); + //----------------- + AEFX_CLR_STRUCT(def); + PF_ADD_CHECKBOX(UI_ANCHOR_ENABLED1, + UI_ANCHOR_ENABLED2, + FALSE, + 0, + ID_ANCHOR_ENABLED + ); + //----------------- + AEFX_CLR_STRUCT(def); + PF_ADD_POINT( UI_ANCHOR, + 50, // X(横の%) + 60, // Y(縦の%) + FALSE, // TRUEなら0.0から100.0の値に限定される + ID_ANCHOR + ); + //----------------- + AEFX_CLR_STRUCT(def); + PF_ADD_SLIDER( UI_POINT_VALUE, //パラメータの名前 + 1, //数値入力する場合の最小値 + 100, //数値入力する場合の最大値 + 1, //スライダーの最小値 + 50, //スライダーの最大値 + 20, //デフォルトの値 + ID_POINT_VALUE + ); + //----------------- + AEFX_CLR_STRUCT(def); + PF_ADD_SLIDER( UI_POINT_LENGTH, //パラメータの名前 + 5, //数値入力する場合の最小値 + 1000, //数値入力する場合の最大値 + 5, //スライダーの最小値 + 200, //スライダーの最大値 + 100, //デフォルトの値 + ID_POINT_LENGTH + ); + //----------------- + AEFX_CLR_STRUCT(def); + PF_ADD_CHECKBOX(UI_POINT_LEN_SYSNC1, + UI_POINT_LEN_SYSNC2, + TRUE, + 0, + ID_POINT_LEN_SYNC + ); + //----------------- + //ポップアップ + AEFX_CLR_STRUCT(def); + PF_ADD_POPUP( UI_SIZE1, + UI_SIZE_COUNT, //メニューの数 + UI_SIZE_DFLT, //デフォルト + UI_SIZE2, + ID_SIZE + ); + + //----------------- + AEFX_CLR_STRUCT(def); + PF_ADD_COLOR( UI_COLOR1, + PF_MAX_CHAN8, // Red + PF_MAX_CHAN8, //Green + PF_MAX_CHAN8, //Blue + ID_COLOR1 + ); + + //----------------- + //トピック表示の開始 + AEFX_CLR_STRUCT(def); + def.flags = PF_ParamFlag_START_COLLAPSED; // + PF_ADD_TOPIC( UI_COLOR_TOPIC, + ID_COLOR_TOPIC + ); + //----------------- + AEFX_CLR_STRUCT(def); + PF_ADD_SLIDER( UI_COLOR_MAX, //パラメータの名前 + 1, //数値入力する場合の最小値 + UI_COLOR_MAX_V, //数値入力する場合の最大値 + 1, //スライダーの最小値 + UI_COLOR_MAX_V, //スライダーの最大値 + 20, //デフォルトの値 + ID_COLOR_MAX + ); + + //----------------- + AEFX_CLR_STRUCT(def); + PF_ADD_COLOR( UI_COLOR2, + PF_MAX_CHAN8, // Red + PF_MAX_CHAN8, //Green + 0, //Blue + ID_COLOR2 + ); + //----------------- + AEFX_CLR_STRUCT(def); + PF_ADD_COLOR( UI_COLOR3, + PF_MAX_CHAN8, // Red + 0, //Green + PF_MAX_CHAN8, //Blue + ID_COLOR3 + ); + //----------------- + AEFX_CLR_STRUCT(def); + PF_ADD_COLOR( UI_COLOR4, + 0, // Red +- PF_MAX_CHAN8, //Green + PF_MAX_CHAN8, //Blue + ID_COLOR4 + ); + //----------------- + //トピック表示の終わり + AEFX_CLR_STRUCT(def); + PF_END_TOPIC(ID_COLOR_TOPIC_END); + //----------------- + //チェックボックス + AEFX_CLR_STRUCT(def); + PF_ADD_CHECKBOX(UI_ORG1, + UI_ORG2, + FALSE, + 0, + ID_ORG + ); + //----------------- + + out_data->num_params = ID_NUM_PARAMS; + + return err; +} + +//------------------------------------------------------------------------------------------------- +static PF_Err GetParams(CFsAE *ae, ParamInfo *infoP) +{ + PF_Err err = PF_Err_NONE; + + ERR(ae->GetADD(ID_SEED,&infoP->seed)); + ERR(ae->GetADD(ID_VALUE,&infoP->value)); + ERR(ae->GetFIXED(ID_OPACITY_RAND,&infoP->opa)); + + ERR(ae->GetFIXEDPOINT(ID_POS,&infoP->pos)); + if (!err) { + infoP->pos.x = infoP->pos.x >>16; + infoP->pos.y = infoP->pos.y >>16; + } + ERR(ae->GetADD(ID_RADIUS,&infoP->radius)); + if (!err) + infoP->radius = ae->downScale(infoP->radius); + ERR(ae->GetFIXED(ID_ASPECT,&infoP->aspect)); + ERR(ae->GetFIXED_PER2ONE(ID_LENGTH_SCALE,&infoP->length_scale)); + ERR(ae->GetCHECKBOX(ID_ANCHOR_ENABLED,&infoP->anchor_enabled)); + ERR(ae->GetFIXEDPOINT(ID_ANCHOR,&infoP->anchor)); + if (!err) { + infoP->anchor.x = infoP->anchor.x >>16; + infoP->anchor.y = infoP->anchor.y >>16; + } + ERR(ae->GetADD(ID_POINT_VALUE,&infoP->point_value)); + + ERR(ae->GetADD(ID_POINT_LENGTH,&infoP->point_length)); + if (!err) + infoP->point_length = ae->downScale(infoP->point_length); + ERR(ae->GetCHECKBOX(ID_POINT_LEN_SYNC,&infoP->point_len_sync)); + + ERR(ae->GetPOPUP(ID_SIZE,&infoP->size)); + + ERR(ae->GetADD(ID_COLOR_MAX,&infoP->color_max)); + ERR(ae->GetCOLOR(ID_COLOR1,&infoP->colors[0])); + ERR(ae->GetCOLOR(ID_COLOR2,&infoP->colors[1])); + ERR(ae->GetCOLOR(ID_COLOR3,&infoP->colors[2])); + ERR(ae->GetCOLOR(ID_COLOR4,&infoP->colors[3])); + ERR(ae->GetCHECKBOX(ID_ORG,&infoP->org)); + + + return err; +} +//----------------------------------------------------------------------------- +static PF_Err + Exec (CFsAE *ae , ParamInfo *infoP) +{ + PF_Err err = PF_Err_NONE; + + if (infoP->org == TRUE) { + ERR( ae->CopyInToOut()); + }else{ + ERR(ae->out->clear()); + } + if ( (infoP->value>0)&&(infoP->opa>0) ){ + CFsBuffer buf = ae->NewBuffer(SPD_RAND_MAX*sizeof(A_u_char));// + + if (buf.alive()==FALSE){ + ae->out_data->out_flags |= PF_OutFlag_DISPLAY_ERROR_MESSAGE; + err = PF_Err_INTERNAL_STRUCT_DAMAGED; + return err; + } + infoP->sputRandTable = buf.bufA_u_char(); + SetupSputData(infoP->size,infoP->sputRandTable); + + switch(ae->pixelFormat()) + { + case PF_PixelFormat_ARGB128: + ERR(MainRender32(ae,infoP)); + break; + case PF_PixelFormat_ARGB64: + ERR(MainRender16(ae,infoP)); + break; + case PF_PixelFormat_ARGB32: + ERR(MainRender8(ae,infoP)); + break; + } + buf.Dispose(); + } + + 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" diff --git a/sputteringCircle/sputteringCircle.h b/sputteringCircle/sputteringCircle.h new file mode 100644 index 0000000..844fb16 --- /dev/null +++ b/sputteringCircle/sputteringCircle.h @@ -0,0 +1,164 @@ +//----------------------------------------------------------------------------------- +/* + PluginSkeleton for VS2010 +*/ +//----------------------------------------------------------------------------------- + +#pragma once + +#ifndef sputteringCircle_H +#define sputteringCircle_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/FsSputtering.h" + + + +//----------------------------------------------------------------------------- +//ParamsSetup用の定数 +enum { + ID_INPUT = 0, + + ID_SEED, //乱数の基準 + ID_VALUE, //量 + ID_OPACITY_RAND, //透明度の最大値 + + ID_POS, //位置 + ID_RADIUS, //半径 + ID_ASPECT, //アスペクト + ID_LENGTH_SCALE, //スケール + + ID_ANCHOR_ENABLED, //アンカーポイントを有効にするか + ID_ANCHOR, //アンカーポイント + + ID_POINT_VALUE, //一回の描画で打つ点の数 + ID_POINT_LENGTH, //点の距離 + ID_POINT_LEN_SYNC, //点の距離 + + ID_SIZE, + + ID_COLOR1, + ID_COLOR_TOPIC, + ID_COLOR_MAX, + ID_COLOR2, + ID_COLOR3, + ID_COLOR4, + ID_COLOR_TOPIC_END, + + ID_ORG, + + ID_NUM_PARAMS +}; +//----------------------------------------------------------------------------- +//パラメータUI用の文字列 +#define UI_SEED "seed" +#define UI_VALUE "value" +#define UI_OPA_RND "opacity_rand" + +#define UI_POS "Position" +#define UI_RADIUS "Radius" +#define UI_ASPECT "Aspect" +#define UI_LENGTH_SCALE "Length_Scale" +#define UI_ANCHOR_ENABLED1 "Anchor_Enabled" +#define UI_ANCHOR_ENABLED2 "ON" +#define UI_ANCHOR "Anchor" + +#define UI_POINT_VALUE "PointValue" +#define UI_POINT_LENGTH "PointLength" +#define UI_POINT_LEN_SYSNC1 "Point_length_sysnc" +#define UI_POINT_LEN_SYSNC2 "ON" + +#define UI_SIZE1 "size" +#define UI_SIZE2 "極小|小|中|大|特大" +#define UI_SIZE_COUNT 5 +#define UI_SIZE_DFLT 2 + +#define UI_COLOR1 "Color1" +#define UI_COLOR_TOPIC "ExtraColors" +#define UI_COLOR_MAX "ColorMax" +#define UI_COLOR_MAX_V 4 +#define UI_COLOR2 "Color2" +#define UI_COLOR3 "Color3" +#define UI_COLOR4 "Color4" + +#define UI_ORG1 "Blend with original" +#define UI_ORG2 "ON" + +//----------------------------------------------------------------------------- + + +typedef struct +{ + A_long seed; + A_long value; + PF_Fixed opa; + PF_FixedPoint pos; + A_long radius; + PF_Fixed aspect; + PF_Fixed length_scale; + PF_Boolean anchor_enabled; + PF_FixedPoint anchor; + + A_long point_value; + A_long point_length; + PF_Boolean point_len_sync; + A_long size; + A_long color_max; + PF_Pixel colors[UI_COLOR_MAX_V]; + A_u_char *sputRandTable; + PF_Boolean org; +} ParamInfo; + + +//----------------------------------------------------------------------------- +//関数の宣言 +PF_Err MainRender8 (CFsAE *ae, ParamInfo *prm); +PF_Err MainRender16 (CFsAE *ae, ParamInfo *prm); +PF_Err MainRender32 (CFsAE *ae, ParamInfo *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 *extra); +} +//----------------------------------------------------------------------------- + +#endif // sputteringCircle_H \ No newline at end of file diff --git a/sputteringCircle/sputteringCircleMain.cpp b/sputteringCircle/sputteringCircleMain.cpp new file mode 100644 index 0000000..80935ab --- /dev/null +++ b/sputteringCircle/sputteringCircleMain.cpp @@ -0,0 +1,213 @@ +//----------------------------------------------------------------------------- +/* + AEP Project用のプラグイン + sputteringCircle + 描画のみ +*/ +#include "sputteringCircle.h" + +//----------------------------------------------------------------------------- +PF_Err MainRender8 (CFsAE *ae, ParamInfo *prm) +{ + PF_Err err = PF_Err_NONE; + + A_long i,j; + A_long value = prm->value; + A_long pValue = prm->point_value; + PF_Fixed scale = prm->length_scale; + PF_Fixed pLen = prm->point_length; //値は整数 + PF_Fixed opa = prm->opa; + A_long colRnd = prm->color_max -1; + A_long colR; + + F_SRAND(prm->seed); + sputDrawPrm sdp; + sdp.data = ae->out->data(); + sdp.width = ae->out->width(); + sdp.height = ae->out->height(); + sdp.widthTrue = ae->out->widthTrue(); + + CRotCalc rp(ae->in_data); + CRotCalc rp0(ae->in_data); + + A_long x,y; + + if (prm->point_len_sync == TRUE){ + pLen = pLen * scale >>16; + } + A_long xy0= -(prm->radius +prm->point_length); + A_long xx1= ae->out->width() + (prm->radius +prm->point_length); + A_long yy1= ae->out->height() + (prm->radius +prm->point_length); + + for ( i=0;iradius)); + PF_Fixed shiftX = rp0.pos().x; + PF_Fixed shiftY = rp0.pos().y * prm->aspect >> 16;//アスペクトの調整 + + if (prm->anchor_enabled == TRUE){ + x = prm->anchor.x + ((prm->pos.x +shiftX - prm->anchor.x) * scale >>16); + y = prm->anchor.y + ((prm->pos.y +shiftY - prm->anchor.y) * scale >>16); + }else{ + x = prm->pos.x + (shiftX * scale >>16); + y = prm->pos.y + (shiftY * scale >>16); + } + + for (j=0; jsputRandTable[FM_RAND(200-1)]; + colR = FM_RAND(colRnd); + if ( (x>=xy0)&&(x=xy0)&&(ycolors[colR]); + } + } + + return err; +} +//----------------------------------------------------------------------------- +PF_Err MainRender16 (CFsAE *ae, ParamInfo *prm) +{ + PF_Err err = PF_Err_NONE; + + A_long i,j; + A_long value = prm->value; + A_long pValue = prm->point_value; + PF_Fixed scale = prm->length_scale; + PF_Fixed pLen = prm->point_length; //値は整数 + PF_Fixed opa = prm->opa; + A_long colRnd = prm->color_max -1; + A_long colR; + PF_Pixel16 colors[4]; + for (i=0; icolors[i]); + + F_SRAND(prm->seed); + sputDrawPrm sdp; + sdp.data = ae->out->data(); + sdp.width = ae->out->width(); + sdp.height = ae->out->height(); + sdp.widthTrue = ae->out->widthTrue(); + + CRotCalc rp(ae->in_data); + CRotCalc rp0(ae->in_data); + + + A_long x,y; + + if (prm->point_len_sync == TRUE){ + pLen = pLen * scale >>16; + } + A_long xy0= -(prm->radius +prm->point_length); + A_long xx1= ae->out->width() + (prm->radius +prm->point_length); + A_long yy1= ae->out->height() + (prm->radius +prm->point_length); + + for ( i=0;iradius)); + PF_Fixed shiftX = rp0.pos().x; + PF_Fixed shiftY = rp0.pos().y * prm->aspect >> 16;//アスペクトの調整 + + if (prm->anchor_enabled == TRUE){ + x = prm->anchor.x + ((prm->pos.x +shiftX - prm->anchor.x) * scale >>16); + y = prm->anchor.y + ((prm->pos.y +shiftY - prm->anchor.y) * scale >>16); + }else{ + x = prm->pos.x + (shiftX * scale >>16); + y = prm->pos.y + (shiftY * scale >>16); + } + + + for (j=0; jsputRandTable[FM_RAND(200-1)]; + colR = FM_RAND(colRnd); + if ( (x>=xy0)&&(x=xy0)&&(yvalue; + A_long pValue = prm->point_value; + PF_Fixed scale = prm->length_scale; + PF_Fixed pLen = prm->point_length; //値は整数 + PF_Fixed opa = prm->opa; + A_long colRnd = prm->color_max -1; + A_long colR; + PF_PixelFloat colors[4]; + for (i=0; icolors[i]); + + F_SRAND(prm->seed); + sputDrawPrm sdp; + sdp.data = ae->out->data(); + sdp.width = ae->out->width(); + sdp.height = ae->out->height(); + sdp.widthTrue = ae->out->widthTrue(); + + CRotCalc rp(ae->in_data); + CRotCalc rp0(ae->in_data); + + + A_long x,y; + + if (prm->point_len_sync == TRUE){ + pLen = pLen * scale >>16; + } + A_long xy0= -(prm->radius +prm->point_length); + A_long xx1= ae->out->width() + (prm->radius +prm->point_length); + A_long yy1= ae->out->height() + (prm->radius +prm->point_length); + + for ( i=0;iradius)); + PF_Fixed shiftX = rp0.pos().x; + PF_Fixed shiftY = rp0.pos().y * prm->aspect >> 16;//アスペクトの調整 + + if (prm->anchor_enabled == TRUE){ + x = prm->anchor.x + ((prm->pos.x +shiftX - prm->anchor.x) * scale >>16); + y = prm->anchor.y + ((prm->pos.y +shiftY - prm->anchor.y) * scale >>16); + }else{ + x = prm->pos.x + (shiftX * scale >>16); + y = prm->pos.y + (shiftY * scale >>16); + } + + + for (j=0; jsputRandTable[FM_RAND(200-1)]; + colR = FM_RAND(colRnd); + if ( (x>=xy0)&&(x=xy0)&&(y +#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/sputteringRect/Fs_Target.h b/sputteringRect/Fs_Target.h new file mode 100644 index 0000000..8d68f3f --- /dev/null +++ b/sputteringRect/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 sputteringRect" + +//----------------------------------------------------------------------------------- +//プラグインの説明に使われる文字 +#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/sputteringRect/Tex_png_new/SPD_02_1.png b/sputteringRect/Tex_png_new/SPD_02_1.png new file mode 100644 index 0000000..5a8e54f Binary files /dev/null and b/sputteringRect/Tex_png_new/SPD_02_1.png differ diff --git a/sputteringRect/Tex_png_new/SPD_02_2.png b/sputteringRect/Tex_png_new/SPD_02_2.png new file mode 100644 index 0000000..475c414 Binary files /dev/null and b/sputteringRect/Tex_png_new/SPD_02_2.png differ diff --git a/sputteringRect/Tex_png_new/SPD_02_3.png b/sputteringRect/Tex_png_new/SPD_02_3.png new file mode 100644 index 0000000..1922268 Binary files /dev/null and b/sputteringRect/Tex_png_new/SPD_02_3.png differ diff --git a/sputteringRect/Tex_png_new/SPD_02_4.png b/sputteringRect/Tex_png_new/SPD_02_4.png new file mode 100644 index 0000000..fc2ec7f Binary files /dev/null and b/sputteringRect/Tex_png_new/SPD_02_4.png differ diff --git a/sputteringRect/Tex_png_new/SPD_03_1.png b/sputteringRect/Tex_png_new/SPD_03_1.png new file mode 100644 index 0000000..9c9e764 Binary files /dev/null and b/sputteringRect/Tex_png_new/SPD_03_1.png differ diff --git a/sputteringRect/Tex_png_new/SPD_03_2.png b/sputteringRect/Tex_png_new/SPD_03_2.png new file mode 100644 index 0000000..78ac779 Binary files /dev/null and b/sputteringRect/Tex_png_new/SPD_03_2.png differ diff --git a/sputteringRect/Tex_png_new/SPD_03_3.png b/sputteringRect/Tex_png_new/SPD_03_3.png new file mode 100644 index 0000000..8fcb1ed Binary files /dev/null and b/sputteringRect/Tex_png_new/SPD_03_3.png differ diff --git a/sputteringRect/Tex_png_new/SPD_03_4.png b/sputteringRect/Tex_png_new/SPD_03_4.png new file mode 100644 index 0000000..263d09b Binary files /dev/null and b/sputteringRect/Tex_png_new/SPD_03_4.png differ diff --git a/sputteringRect/Tex_png_new/SPD_04_1.png b/sputteringRect/Tex_png_new/SPD_04_1.png new file mode 100644 index 0000000..86ba6ba Binary files /dev/null and b/sputteringRect/Tex_png_new/SPD_04_1.png differ diff --git a/sputteringRect/Tex_png_new/SPD_04_2.png b/sputteringRect/Tex_png_new/SPD_04_2.png new file mode 100644 index 0000000..fb74e70 Binary files /dev/null and b/sputteringRect/Tex_png_new/SPD_04_2.png differ diff --git a/sputteringRect/Tex_png_new/SPD_04_3.png b/sputteringRect/Tex_png_new/SPD_04_3.png new file mode 100644 index 0000000..3245801 Binary files /dev/null and b/sputteringRect/Tex_png_new/SPD_04_3.png differ diff --git a/sputteringRect/Tex_png_new/SPD_04_4.png b/sputteringRect/Tex_png_new/SPD_04_4.png new file mode 100644 index 0000000..203d828 Binary files /dev/null and b/sputteringRect/Tex_png_new/SPD_04_4.png differ diff --git a/sputteringRect/Tex_png_new/SPD_05_1.png b/sputteringRect/Tex_png_new/SPD_05_1.png new file mode 100644 index 0000000..a741d1e Binary files /dev/null and b/sputteringRect/Tex_png_new/SPD_05_1.png differ diff --git a/sputteringRect/Tex_png_new/SPD_05_2.png b/sputteringRect/Tex_png_new/SPD_05_2.png new file mode 100644 index 0000000..a741d1e Binary files /dev/null and b/sputteringRect/Tex_png_new/SPD_05_2.png differ diff --git a/sputteringRect/Tex_png_new/SPD_05_3.png b/sputteringRect/Tex_png_new/SPD_05_3.png new file mode 100644 index 0000000..8c5ce0e Binary files /dev/null and b/sputteringRect/Tex_png_new/SPD_05_3.png differ diff --git a/sputteringRect/Tex_png_new/SPD_05_4.png b/sputteringRect/Tex_png_new/SPD_05_4.png new file mode 100644 index 0000000..01f5a1c Binary files /dev/null and b/sputteringRect/Tex_png_new/SPD_05_4.png differ diff --git a/sputteringRect/Tex_png_new/SPD_05_5.png b/sputteringRect/Tex_png_new/SPD_05_5.png new file mode 100644 index 0000000..e0d8085 Binary files /dev/null and b/sputteringRect/Tex_png_new/SPD_05_5.png differ diff --git a/sputteringRect/Tex_png_new/SPD_06_1.png b/sputteringRect/Tex_png_new/SPD_06_1.png new file mode 100644 index 0000000..7ffa09f Binary files /dev/null and b/sputteringRect/Tex_png_new/SPD_06_1.png differ diff --git a/sputteringRect/Tex_png_new/SPD_06_2.png b/sputteringRect/Tex_png_new/SPD_06_2.png new file mode 100644 index 0000000..7c60ba1 Binary files /dev/null and b/sputteringRect/Tex_png_new/SPD_06_2.png differ diff --git a/sputteringRect/Tex_png_new/SPD_06_3.png b/sputteringRect/Tex_png_new/SPD_06_3.png new file mode 100644 index 0000000..b9606d7 Binary files /dev/null and b/sputteringRect/Tex_png_new/SPD_06_3.png differ diff --git a/sputteringRect/Tex_png_new/SPD_06_4.png b/sputteringRect/Tex_png_new/SPD_06_4.png new file mode 100644 index 0000000..2541fd5 Binary files /dev/null and b/sputteringRect/Tex_png_new/SPD_06_4.png differ diff --git a/sputteringRect/Tex_png_new/SPD_07_1.png b/sputteringRect/Tex_png_new/SPD_07_1.png new file mode 100644 index 0000000..920f6f5 Binary files /dev/null and b/sputteringRect/Tex_png_new/SPD_07_1.png differ diff --git a/sputteringRect/Tex_png_new/SPD_07_2.png b/sputteringRect/Tex_png_new/SPD_07_2.png new file mode 100644 index 0000000..4561941 Binary files /dev/null and b/sputteringRect/Tex_png_new/SPD_07_2.png differ diff --git a/sputteringRect/Tex_png_new/SPD_07_3.png b/sputteringRect/Tex_png_new/SPD_07_3.png new file mode 100644 index 0000000..4c671c9 Binary files /dev/null and b/sputteringRect/Tex_png_new/SPD_07_3.png differ diff --git a/sputteringRect/Tex_png_new/SPD_07_4.png b/sputteringRect/Tex_png_new/SPD_07_4.png new file mode 100644 index 0000000..d0d46cc Binary files /dev/null and b/sputteringRect/Tex_png_new/SPD_07_4.png differ diff --git a/sputteringRect/Tex_png_new/SPD_07_5.png b/sputteringRect/Tex_png_new/SPD_07_5.png new file mode 100644 index 0000000..41cf3b1 Binary files /dev/null and b/sputteringRect/Tex_png_new/SPD_07_5.png differ diff --git a/sputteringRect/Tex_png_new/SPD_07_6.png b/sputteringRect/Tex_png_new/SPD_07_6.png new file mode 100644 index 0000000..ac3325d Binary files /dev/null and b/sputteringRect/Tex_png_new/SPD_07_6.png differ diff --git a/sputteringRect/Tex_png_new/SPD_07_7.png b/sputteringRect/Tex_png_new/SPD_07_7.png new file mode 100644 index 0000000..88eba43 Binary files /dev/null and b/sputteringRect/Tex_png_new/SPD_07_7.png differ diff --git a/sputteringRect/Tex_png_new/SPD_08_1.png b/sputteringRect/Tex_png_new/SPD_08_1.png new file mode 100644 index 0000000..e54c5cc Binary files /dev/null and b/sputteringRect/Tex_png_new/SPD_08_1.png differ diff --git a/sputteringRect/Tex_png_new/SPD_08_2.png b/sputteringRect/Tex_png_new/SPD_08_2.png new file mode 100644 index 0000000..6f98b12 Binary files /dev/null and b/sputteringRect/Tex_png_new/SPD_08_2.png differ diff --git a/sputteringRect/Tex_png_new/SPD_08_3.png b/sputteringRect/Tex_png_new/SPD_08_3.png new file mode 100644 index 0000000..6472a48 Binary files /dev/null and b/sputteringRect/Tex_png_new/SPD_08_3.png differ diff --git a/sputteringRect/Tex_png_new/SPD_08_4.png b/sputteringRect/Tex_png_new/SPD_08_4.png new file mode 100644 index 0000000..02b302a Binary files /dev/null and b/sputteringRect/Tex_png_new/SPD_08_4.png differ diff --git a/sputteringRect/Tex_png_new/SPD_08_5.png b/sputteringRect/Tex_png_new/SPD_08_5.png new file mode 100644 index 0000000..2fea1a7 Binary files /dev/null and b/sputteringRect/Tex_png_new/SPD_08_5.png differ diff --git a/sputteringRect/Tex_png_new/SPD_08_6.png b/sputteringRect/Tex_png_new/SPD_08_6.png new file mode 100644 index 0000000..12d0c04 Binary files /dev/null and b/sputteringRect/Tex_png_new/SPD_08_6.png differ diff --git a/sputteringRect/Tex_png_new/SPD_08_7.png b/sputteringRect/Tex_png_new/SPD_08_7.png new file mode 100644 index 0000000..37bcc1e Binary files /dev/null and b/sputteringRect/Tex_png_new/SPD_08_7.png differ diff --git a/sputteringRect/Tex_png_new/SPD_09_1.png b/sputteringRect/Tex_png_new/SPD_09_1.png new file mode 100644 index 0000000..4794f7c Binary files /dev/null and b/sputteringRect/Tex_png_new/SPD_09_1.png differ diff --git a/sputteringRect/Tex_png_new/SPD_09_2.png b/sputteringRect/Tex_png_new/SPD_09_2.png new file mode 100644 index 0000000..76e7468 Binary files /dev/null and b/sputteringRect/Tex_png_new/SPD_09_2.png differ diff --git a/sputteringRect/Tex_png_new/SPD_09_3.png b/sputteringRect/Tex_png_new/SPD_09_3.png new file mode 100644 index 0000000..f6981c1 Binary files /dev/null and b/sputteringRect/Tex_png_new/SPD_09_3.png differ diff --git a/sputteringRect/Tex_png_new/SPD_09_4.png b/sputteringRect/Tex_png_new/SPD_09_4.png new file mode 100644 index 0000000..cb62a6a Binary files /dev/null and b/sputteringRect/Tex_png_new/SPD_09_4.png differ diff --git a/sputteringRect/Tex_png_new/SPD_09_5.png b/sputteringRect/Tex_png_new/SPD_09_5.png new file mode 100644 index 0000000..5f838a1 Binary files /dev/null and b/sputteringRect/Tex_png_new/SPD_09_5.png differ diff --git a/sputteringRect/Tex_png_new/SPD_09_6.png b/sputteringRect/Tex_png_new/SPD_09_6.png new file mode 100644 index 0000000..1148153 Binary files /dev/null and b/sputteringRect/Tex_png_new/SPD_09_6.png differ diff --git a/sputteringRect/Tex_png_new/SPD_10_1.png b/sputteringRect/Tex_png_new/SPD_10_1.png new file mode 100644 index 0000000..08cdc88 Binary files /dev/null and b/sputteringRect/Tex_png_new/SPD_10_1.png differ diff --git a/sputteringRect/Tex_png_new/SPD_10_2.png b/sputteringRect/Tex_png_new/SPD_10_2.png new file mode 100644 index 0000000..8f78c8e Binary files /dev/null and b/sputteringRect/Tex_png_new/SPD_10_2.png differ diff --git a/sputteringRect/Tex_png_new/SPD_10_3.png b/sputteringRect/Tex_png_new/SPD_10_3.png new file mode 100644 index 0000000..03a84b8 Binary files /dev/null and b/sputteringRect/Tex_png_new/SPD_10_3.png differ diff --git a/sputteringRect/Tex_png_new/SPD_10_4.png b/sputteringRect/Tex_png_new/SPD_10_4.png new file mode 100644 index 0000000..25f4134 Binary files /dev/null and b/sputteringRect/Tex_png_new/SPD_10_4.png differ diff --git a/sputteringRect/Tex_png_new/SPD_11_1.png b/sputteringRect/Tex_png_new/SPD_11_1.png new file mode 100644 index 0000000..e4ee1be Binary files /dev/null and b/sputteringRect/Tex_png_new/SPD_11_1.png differ diff --git a/sputteringRect/Tex_png_new/SPD_11_2.png b/sputteringRect/Tex_png_new/SPD_11_2.png new file mode 100644 index 0000000..8d35d05 Binary files /dev/null and b/sputteringRect/Tex_png_new/SPD_11_2.png differ diff --git a/sputteringRect/Tex_png_new/SPD_11_3.png b/sputteringRect/Tex_png_new/SPD_11_3.png new file mode 100644 index 0000000..e1b03ad Binary files /dev/null and b/sputteringRect/Tex_png_new/SPD_11_3.png differ diff --git a/sputteringRect/Tex_png_new/SPD_11_4.png b/sputteringRect/Tex_png_new/SPD_11_4.png new file mode 100644 index 0000000..f46504e Binary files /dev/null and b/sputteringRect/Tex_png_new/SPD_11_4.png differ diff --git a/sputteringRect/Tex_png_new/SPD_12_1.png b/sputteringRect/Tex_png_new/SPD_12_1.png new file mode 100644 index 0000000..3def053 Binary files /dev/null and b/sputteringRect/Tex_png_new/SPD_12_1.png differ diff --git a/sputteringRect/Tex_png_new/SPD_12_2.png b/sputteringRect/Tex_png_new/SPD_12_2.png new file mode 100644 index 0000000..b1dfc9f Binary files /dev/null and b/sputteringRect/Tex_png_new/SPD_12_2.png differ diff --git a/sputteringRect/Tex_png_new/SPD_12_3.png b/sputteringRect/Tex_png_new/SPD_12_3.png new file mode 100644 index 0000000..ff87487 Binary files /dev/null and b/sputteringRect/Tex_png_new/SPD_12_3.png differ diff --git a/sputteringRect/Tex_png_new/SPD_12_4.png b/sputteringRect/Tex_png_new/SPD_12_4.png new file mode 100644 index 0000000..a81a5e7 Binary files /dev/null and b/sputteringRect/Tex_png_new/SPD_12_4.png differ diff --git a/sputteringRect/Tex_png_new/SPD_13_1.png b/sputteringRect/Tex_png_new/SPD_13_1.png new file mode 100644 index 0000000..2912cbf Binary files /dev/null and b/sputteringRect/Tex_png_new/SPD_13_1.png differ diff --git a/sputteringRect/Tex_png_new/SPD_13_2.png b/sputteringRect/Tex_png_new/SPD_13_2.png new file mode 100644 index 0000000..7422460 Binary files /dev/null and b/sputteringRect/Tex_png_new/SPD_13_2.png differ diff --git a/sputteringRect/Tex_png_new/SPD_13_3.png b/sputteringRect/Tex_png_new/SPD_13_3.png new file mode 100644 index 0000000..947902a Binary files /dev/null and b/sputteringRect/Tex_png_new/SPD_13_3.png differ diff --git a/sputteringRect/Tex_png_new/SPD_13_4.png b/sputteringRect/Tex_png_new/SPD_13_4.png new file mode 100644 index 0000000..ed41991 Binary files /dev/null and b/sputteringRect/Tex_png_new/SPD_13_4.png differ diff --git a/sputteringRect/Tex_png_new/SPD_14_1.png b/sputteringRect/Tex_png_new/SPD_14_1.png new file mode 100644 index 0000000..efc0779 Binary files /dev/null and b/sputteringRect/Tex_png_new/SPD_14_1.png differ diff --git a/sputteringRect/Tex_png_new/SPD_14_2.png b/sputteringRect/Tex_png_new/SPD_14_2.png new file mode 100644 index 0000000..80a020e Binary files /dev/null and b/sputteringRect/Tex_png_new/SPD_14_2.png differ diff --git a/sputteringRect/Tex_png_new/SPD_14_3.png b/sputteringRect/Tex_png_new/SPD_14_3.png new file mode 100644 index 0000000..e3427fd Binary files /dev/null and b/sputteringRect/Tex_png_new/SPD_14_3.png differ diff --git a/sputteringRect/Win/sputteringRect.vcxproj b/sputteringRect/Win/sputteringRect.vcxproj new file mode 100644 index 0000000..2b13f05 --- /dev/null +++ b/sputteringRect/Win/sputteringRect.vcxproj @@ -0,0 +1,588 @@ +サソ + + + + Debug + Win32 + + + Debug + x64 + + + Release-MD + Win32 + + + Release-MD + x64 + + + Release + Win32 + + + Release + x64 + + + + {0E98D15B-AF28-4F91-A6B0-8A544907D376} + sputteringRect + sputteringRect + 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/sputteringRect.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/sputteringRect.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/sputteringRect.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/sputteringRect.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/sputteringRect.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/sputteringRect.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/sputteringRect/Win/sputteringRect.vcxproj.filters b/sputteringRect/Win/sputteringRect.vcxproj.filters new file mode 100644 index 0000000..9c6d458 --- /dev/null +++ b/sputteringRect/Win/sputteringRect.vcxproj.filters @@ -0,0 +1,161 @@ + + + + + {86c50c4a-e077-430a-a66d-3acecca76233} + h;hpp;hxx;hm;inl;fi;fd + + + {03225f22-6e46-448f-952b-fca7283b9278} + + + {a1e6c331-9d80-4470-8bdc-c005a779ef22} + ico;cur;bmp;dlg;rc2;rct;bin;cnt;rtf;gif;jpg;jpeg;jpe + + + {7ad7391c-e148-4054-b95b-cf962cf9ae1f} + + + {1ba95038-c82e-4e7b-ba2e-4a514560ba3e} + + + {b06f0084-86e8-483d-8f98-426f84e99103} + + + {ef057796-2fc1-4087-be6c-069520dc2ccb} + + + {852eddda-a138-44e9-a5c7-7f8499aec056} + + + + + 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 + + + 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/sputteringRect/Win/sputteringRectPiPL.rc b/sputteringRect/Win/sputteringRectPiPL.rc new file mode 100644 index 0000000..7f1c9cb --- /dev/null +++ b/sputteringRect/Win/sputteringRectPiPL.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 sputteringRect\0", + + "MIB8", + "gtac", + 0, 0x0, + 20, 0x0, + "\x10F's Plugins-Draw\0\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, + "\x12F's sputteringRect\0", + + "MIB8", + 0x6165464CL, + 0L, + 4L + 0L, + + +END + diff --git a/sputteringRect/pic2c.exe b/sputteringRect/pic2c.exe new file mode 100644 index 0000000..541d600 Binary files /dev/null and b/sputteringRect/pic2c.exe differ diff --git a/sputteringRect/sputteringRect.cpp b/sputteringRect/sputteringRect.cpp new file mode 100644 index 0000000..1d083db --- /dev/null +++ b/sputteringRect/sputteringRect.cpp @@ -0,0 +1,324 @@ +//----------------------------------------------------------------------------------- +/* + F's Plugins for VS2010/VS2012 +*/ +//----------------------------------------------------------------------------------- + +#include "sputteringRect.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( UI_SEED, //パラメータの名前 + 0, //数値入力する場合の最小値 + 32000, //数値入力する場合の最大値 + 0, //スライダーの最小値 + 144, //スライダーの最大値 + 0, //デフォルトの値 + ID_SEED + ); + //----------------- + AEFX_CLR_STRUCT(def); + PF_ADD_SLIDER( UI_VALUE, //パラメータの名前 + 0, //数値入力する場合の最小値 + 32000, //数値入力する場合の最大値 + 0, //スライダーの最小値 + 100, //スライダーの最大値 + 20, //デフォルトの値 + ID_VALUE + ); + //----------------- + AEFX_CLR_STRUCT(def); + PF_ADD_FIXED( UI_OPA_RND, //パラメータの名前 + 0, //数値入力する場合の最小値 + 5, //数値入力する場合の最大値 + 0, //スライダーの最小値 + 2, //スライダーの最大値 + 1, //デフォルトの値 + 2, //表示される小数の桁数 + 0, + 0, + ID_OPACITY_RAND + ); + //----------------- + AEFX_CLR_STRUCT(def); + PF_ADD_POINT( UI_TOPLEFT, + 25, // X(横の%) + 25, // Y(縦の%) + FALSE, // TRUEなら0.0から100.0の値に限定される + ID_TOPLEFT + ); + //----------------- + AEFX_CLR_STRUCT(def); + PF_ADD_POINT( UI_BOTTOMRIGHT, + 75, // X(横の%) + 75, // Y(縦の%) + FALSE, // TRUEなら0.0から100.0の値に限定される + ID_BOTTOMRIGHT + ); + //----------------- + AEFX_CLR_STRUCT(def); + PF_ADD_SLIDER( UI_POINT_VALUE, //パラメータの名前 + 1, //数値入力する場合の最小値 + 100, //数値入力する場合の最大値 + 1, //スライダーの最小値 + 50, //スライダーの最大値 + 10, //デフォルトの値 + ID_POINT_VALUE + ); + //----------------- + AEFX_CLR_STRUCT(def); + PF_ADD_SLIDER( UI_POINT_LENGTH, //パラメータの名前 + 5, //数値入力する場合の最小値 + 1000, //数値入力する場合の最大値 + 5, //スライダーの最小値 + 200, //スライダーの最大値 + 50, //デフォルトの値 + ID_POINT_LENGTH + ); + //----------------- + //ポップアップ + AEFX_CLR_STRUCT(def); + PF_ADD_POPUP( UI_SIZE1, + UI_SIZE_COUNT, //メニューの数 + UI_SIZE_DFLT, //デフォルト + UI_SIZE2, + ID_SIZE + ); + + //----------------- + AEFX_CLR_STRUCT(def); + PF_ADD_COLOR( UI_COLOR1, + PF_MAX_CHAN8, // Red + PF_MAX_CHAN8, //Green + PF_MAX_CHAN8, //Blue + ID_COLOR1 + ); + + //----------------- + //トピック表示の開始 + AEFX_CLR_STRUCT(def); + def.flags = PF_ParamFlag_START_COLLAPSED; // + PF_ADD_TOPIC( UI_COLOR_TOPIC, + ID_COLOR_TOPIC + ); + //----------------- + AEFX_CLR_STRUCT(def); + PF_ADD_SLIDER( UI_COLOR_MAX, //パラメータの名前 + 1, //数値入力する場合の最小値 + UI_COLOR_MAX_V, //数値入力する場合の最大値 + 1, //スライダーの最小値 + UI_COLOR_MAX_V, //スライダーの最大値 + 20, //デフォルトの値 + ID_COLOR_MAX + ); + + //----------------- + AEFX_CLR_STRUCT(def); + PF_ADD_COLOR( UI_COLOR2, + PF_MAX_CHAN8, // Red + PF_MAX_CHAN8, //Green + 0, //Blue + ID_COLOR2 + ); + //----------------- + AEFX_CLR_STRUCT(def); + PF_ADD_COLOR( UI_COLOR3, + PF_MAX_CHAN8, // Red + 0, //Green + PF_MAX_CHAN8, //Blue + ID_COLOR3 + ); + //----------------- + AEFX_CLR_STRUCT(def); + PF_ADD_COLOR( UI_COLOR4, + 0, // Red + PF_MAX_CHAN8, //Green + PF_MAX_CHAN8, //Blue + ID_COLOR4 + ); + //----------------- + //トピック表示の終わり + AEFX_CLR_STRUCT(def); + PF_END_TOPIC(ID_COLOR_TOPIC_END); + //----------------- + //チェックボックス + AEFX_CLR_STRUCT(def); + PF_ADD_CHECKBOX(UI_ORG1, + UI_ORG2, + FALSE, + 0, + ID_ORG + ); + //----------------- + + out_data->num_params = ID_NUM_PARAMS; + + return err; +} +//------------------------------------------------------------------------------------------------- +static PF_Err GetParams(CFsAE *ae, ParamInfo *infoP) +{ + PF_Err err = PF_Err_NONE; + + ERR(ae->GetADD(ID_SEED,&infoP->seed)); + ERR(ae->GetADD(ID_VALUE,&infoP->value)); + ERR(ae->GetFIXED(ID_OPACITY_RAND,&infoP->opa)); + + PF_FixedPoint tl,br; + ERR(ae->GetFIXEDPOINT(ID_TOPLEFT,&tl)); + ERR(ae->GetFIXEDPOINT(ID_BOTTOMRIGHT,&br)); + if (!err){ + infoP->rect.left = tl.x >>16; + infoP->rect.top = tl.y >>16; + infoP->rect.right = br.x >>16; + infoP->rect.bottom = br.y >>16; + if(infoP->rect.left>infoP->rect.right) swapLong(&infoP->rect.left,&infoP->rect.right); + if(infoP->rect.top>infoP->rect.bottom) swapLong(&infoP->rect.top,&infoP->rect.bottom); + } + + ERR(ae->GetADD(ID_POINT_VALUE,&infoP->point_value)); + ERR(ae->GetADD(ID_POINT_LENGTH,&infoP->point_length)); + if (!err){ + infoP->point_length = ae->downScale(infoP->point_length); + if (infoP->point_length<2) infoP->point_length = 2; + } + ERR(ae->GetPOPUP(ID_SIZE,&infoP->size)); + ERR(ae->GetADD(ID_COLOR_MAX,&infoP->color_max)); + + ERR(ae->GetCOLOR(ID_COLOR1,&infoP->colors[0])); + ERR(ae->GetCOLOR(ID_COLOR2,&infoP->colors[1])); + ERR(ae->GetCOLOR(ID_COLOR3,&infoP->colors[2])); + ERR(ae->GetCOLOR(ID_COLOR4,&infoP->colors[3])); + + ERR(ae->GetCHECKBOX(ID_ORG,&infoP->org)); + + return err; +} +//------------------------------------------------------------------------------------------------- +static PF_Err + Exec (CFsAE *ae , ParamInfo *infoP) +{ + PF_Err err = PF_Err_NONE; + + if (infoP->org == TRUE) { + ERR( ae->CopyInToOut()); + }else{ + ERR(ae->out->clear()); + } + if (infoP->value>0){ + CFsBuffer buf = ae->NewBuffer(SPD_RAND_MAX*sizeof(A_u_char));// + SPD_RAND_MAX + if (buf.alive()==FALSE){ + ae->out_data->out_flags |= PF_OutFlag_DISPLAY_ERROR_MESSAGE; + err = PF_Err_INTERNAL_STRUCT_DAMAGED; + return err; + } + infoP->sputRandTable = buf.bufA_u_char(); + SetupSputData(infoP->size,infoP->sputRandTable); + + F_SRAND(infoP->seed); + switch(ae->pixelFormat()) + { + case PF_PixelFormat_ARGB128: + ERR(MainRender32(ae,infoP)); + break; + case PF_PixelFormat_ARGB64: + ERR(MainRender16(ae,infoP)); + break; + case PF_PixelFormat_ARGB32: + ERR(MainRender8(ae,infoP)); + break; + } + buf.Dispose(); + } + 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/sputteringRect/sputteringRect.h b/sputteringRect/sputteringRect.h new file mode 100644 index 0000000..0a93e37 --- /dev/null +++ b/sputteringRect/sputteringRect.h @@ -0,0 +1,137 @@ +//----------------------------------------------------------------------------------- +/* + PluginSkeleton for VS2010 +*/ +//----------------------------------------------------------------------------------- + +#pragma once +#ifndef sputteringRect_H +#define sputteringRect_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/FsSputtering.h" + +//----------------------------------------------------------------------------- +//----------------------------------------------------------------------------- +//ParamsSetup用の定数 +enum { + ID_INPUT = 0, + + ID_SEED, //乱数の基準 + ID_VALUE, //量 + ID_OPACITY_RAND, //量 + + ID_TOPLEFT, //範囲 + ID_BOTTOMRIGHT, + + ID_POINT_VALUE, //一回の描画で打つ点の数 + ID_POINT_LENGTH, //点の距離 + + + ID_SIZE, + + ID_COLOR1, + ID_COLOR_TOPIC, + ID_COLOR_MAX, + ID_COLOR2, + ID_COLOR3, + ID_COLOR4, + ID_COLOR_TOPIC_END, + + ID_ORG, + + ID_NUM_PARAMS +}; +//----------------------------------------------------------------------------- +//パラメータUI用の文字列 +#define UI_SEED "seed" +#define UI_VALUE "value" +#define UI_OPA_RND "opacity_rand" + +#define UI_TOPLEFT "TopLeft" +#define UI_BOTTOMRIGHT "BottomRight" + +#define UI_POINT_VALUE "PointValue" +#define UI_POINT_LENGTH "PointLength" + +#define UI_SIZE1 "size" +#define UI_SIZE2 "極小|小|中|大|特大" +#define UI_SIZE_COUNT 5 +#define UI_SIZE_DFLT 2 + +#define UI_COLOR1 "Color1" +#define UI_COLOR_TOPIC "ExtraColors" +#define UI_COLOR_MAX "ColorMax" +#define UI_COLOR_MAX_V 4 +#define UI_COLOR2 "Color2" +#define UI_COLOR3 "Color3" +#define UI_COLOR4 "Color4" + +#define UI_ORG1 "Blend with original" +#define UI_ORG2 "ON" + + +//----------------------------------------------------------------------------- + +typedef struct +{ + A_long seed; + A_long value; + PF_Fixed opa; + A_Rect rect; + A_long point_value; + A_long point_length; + A_long size; + A_long color_max; + PF_Pixel colors[UI_COLOR_MAX_V]; + A_u_char *sputRandTable; + PF_Boolean org; +} ParamInfo; + + +//----------------------------------------------------------------------------- +//関数の宣言 +PF_Err MainRender8 (CFsAE *ae, ParamInfo *infoP); +PF_Err MainRender16 (CFsAE *ae, ParamInfo *infoP); +PF_Err MainRender32 (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 // sputteringRect_H \ No newline at end of file diff --git a/sputteringRect/sputteringRectMain.cpp b/sputteringRect/sputteringRectMain.cpp new file mode 100644 index 0000000..555bdd2 --- /dev/null +++ b/sputteringRect/sputteringRectMain.cpp @@ -0,0 +1,183 @@ +//----------------------------------------------------------------------------- +/* + AEP Project用のプラグイン + sputteringRect + 描画のみ +*/ +#include "sputteringRect.h" +//----------------------------------------------------------------------------- +PF_Err MainRender8 (CFsAE *ae, ParamInfo *prm) +{ + PF_Err err = PF_Err_NONE; + + A_long i,j; + A_long value = prm->value; + A_long pValue = prm->point_value; + A_long pLen = prm->point_length; + A_long colRnd = prm->color_max -1; + A_long colR; + A_long opa = prm->opa; + + //範囲 + A_long x0 = prm->rect.left; + A_long y0 = prm->rect.top; + A_long dx = prm->rect.right - prm->rect.left -1; + A_long dy = prm->rect.bottom - prm->rect.top -1; + F_SRAND(prm->seed); + sputDrawPrm sdp; + sdp.data = ae->out->data(); + sdp.width = ae->out->width(); + sdp.height = ae->out->height(); + sdp.widthTrue = ae->out->widthTrue(); + + CRotCalc rp(ae->in_data); + A_long xy0= -pLen; + A_long xx1= ae->out->width() + pLen; + A_long yy1= ae->out->height() + pLen; + + + + for ( i=0;isputRandTable[FM_RAND(200-1)]; + colR = FM_RAND(colRnd); + if ( (x>=xy0)&&(x=xy0)&&(ycolors[colR]); + } + } + + return err; +} +//----------------------------------------------------------------------------- +PF_Err MainRender16 (CFsAE *ae, ParamInfo *prm) +{ + PF_Err err = PF_Err_NONE; + + A_long i,j; + A_long value = prm->value; + A_long pValue = prm->point_value; + PF_Fixed pLen = prm->point_length; + A_long colRnd = prm->color_max -1; + A_long colR; + A_long opa = prm->opa; + PF_Pixel16 colors[4]; + for (i=0; icolors[i]); + + //範囲 + A_long x0 = prm->rect.left; + A_long y0 = prm->rect.top; + A_long dx = prm->rect.right - prm->rect.left -1; + A_long dy = prm->rect.bottom - prm->rect.top -1; + F_SRAND(prm->seed); + sputDrawPrm sdp; + sdp.data = ae->out->data(); + sdp.width = ae->out->width(); + sdp.height = ae->out->height(); + sdp.widthTrue = ae->out->widthTrue(); + + CRotCalc rp(ae->in_data); + + A_long xy0= -pLen; + A_long xx1= ae->out->width() + pLen; + A_long yy1= ae->out->height() + pLen; + + + for ( i=0;isputRandTable[FM_RAND(200-1)]; + colR = FM_RAND(colRnd); + if ( (x>=xy0)&&(x=xy0)&&(yvalue; + A_long pValue = prm->point_value; + PF_Fixed pLen = prm->point_length; + A_long colRnd = prm->color_max -1; + A_long colR; + A_long opa = prm->opa; + PF_PixelFloat colors[4]; + for (i=0; icolors[i]); + + //範囲 + A_long x0 = prm->rect.left; + A_long y0 = prm->rect.top; + A_long dx = prm->rect.right - prm->rect.left -1; + A_long dy = prm->rect.bottom - prm->rect.top -1; + F_SRAND(prm->seed); + sputDrawPrm sdp; + sdp.data = ae->out->data(); + sdp.width = ae->out->width(); + sdp.height = ae->out->height(); + sdp.widthTrue = ae->out->widthTrue(); + + CRotCalc rp(ae->in_data); + + A_long xy0= -pLen; + A_long xx1= ae->out->width() + pLen; + A_long yy1= ae->out->height() + pLen; + + + for ( i=0;isputRandTable[FM_RAND(200-1)]; + colR = FM_RAND(colRnd); + if ( (x>=xy0)&&(x=xy0)&&(y +#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/sputteringSplash/Fs_Target.h b/sputteringSplash/Fs_Target.h new file mode 100644 index 0000000..8f5beba --- /dev/null +++ b/sputteringSplash/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 sputteringSplash" + +//----------------------------------------------------------------------------------- +//プラグインの説明に使われる文字 +#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/sputteringSplash/Win/sputteringSplash.vcxproj b/sputteringSplash/Win/sputteringSplash.vcxproj new file mode 100644 index 0000000..c8605a7 --- /dev/null +++ b/sputteringSplash/Win/sputteringSplash.vcxproj @@ -0,0 +1,587 @@ +サソ + + + + Debug + Win32 + + + Debug + x64 + + + Release-MD + Win32 + + + Release-MD + x64 + + + Release + Win32 + + + Release + x64 + + + + {5E900A0B-E91E-401B-8B1C-A1AF7067CFBE} + sputteringSplash + sputteringSplash + 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/sputteringSplash.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/sputteringSplash.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/sputteringSplash.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/sputteringSplash.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/sputteringSplash.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/sputteringSplash.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/sputteringSplash/Win/sputteringSplash.vcxproj.filters b/sputteringSplash/Win/sputteringSplash.vcxproj.filters new file mode 100644 index 0000000..cc163ff --- /dev/null +++ b/sputteringSplash/Win/sputteringSplash.vcxproj.filters @@ -0,0 +1,158 @@ + + + + + {2da7710c-2635-4f27-ae22-f637a076c51d} + h;hpp;hxx;hm;inl;fi;fd + + + {22c06f0f-aba9-45e9-a1f1-f5f767680577} + + + {c909c6d1-93b0-4a6c-bef7-ee97db5c0ab5} + ico;cur;bmp;dlg;rc2;rct;bin;cnt;rtf;gif;jpg;jpeg;jpe + + + {40a74c74-ba0d-4780-8c75-ed91f303c220} + + + {fe66e621-ac06-4f7e-837b-8a9ff2e96f1e} + + + {c8c6d5ec-80b6-45fa-bf80-94d19c3f1ddc} + + + {f90e700e-55db-4a9a-be47-c250891c7822} + + + {4db3bb97-c9a1-4345-b18e-a2cf72c28f32} + + + + + 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/sputteringSplash/Win/sputteringSplashPiPL.rc b/sputteringSplash/Win/sputteringSplashPiPL.rc new file mode 100644 index 0000000..06541d8 --- /dev/null +++ b/sputteringSplash/Win/sputteringSplashPiPL.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, + "\x14F's sputteringSplash\0\0\0", + + "MIB8", + "gtac", + 0, 0x0, + 20, 0x0, + "\x10F's Plugins-Draw\0\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, + "\x14F's sputteringSplash\0\0\0", + + "MIB8", + 0x6165464CL, + 0L, + 4L + 0L, + + +END + diff --git a/sputteringSplash/sputteringSplash.cpp b/sputteringSplash/sputteringSplash.cpp new file mode 100644 index 0000000..2fd8f17 --- /dev/null +++ b/sputteringSplash/sputteringSplash.cpp @@ -0,0 +1,319 @@ +//----------------------------------------------------------------------------------- +/* + F's Plugins for VS2010/VS2012 +*/ +//----------------------------------------------------------------------------------- + +#include "sputteringSplash.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( UI_SEED, //パラメータの名前 + 0, //数値入力する場合の最小値 + 32000, //数値入力する場合の最大値 + 0, //スライダーの最小値 + 144, //スライダーの最大値 + 0, //デフォルトの値 + ID_SEED + ); + //----------------- + AEFX_CLR_STRUCT(def); + PF_ADD_FIXED( UI_VALUE, //パラメータの名前 + 0, //数値入力する場合の最小値 + 200, //数値入力する場合の最大値 + 0, //スライダーの最小値 + 100, //スライダーの最大値 + 50, //デフォルトの値 + 1, //表示される小数の桁数 + 0, + 0, + ID_VALUE + ); + //----------------- + //ポップアップ + AEFX_CLR_STRUCT(def); + PF_ADD_POPUP( UI_DIR1, + UI_DIR_COUNT, //メニューの数 + UI_DIR_DFLT, //デフォルト + UI_DIR2, + ID_DIR + ); + //----------------- + AEFX_CLR_STRUCT(def); + PF_ADD_FIXED( UI_OPA_RND, //パラメータの名前 + 0, //数値入力する場合の最小値 + 5, //数値入力する場合の最大値 + 0, //スライダーの最小値 + 2, //スライダーの最大値 + 1, //デフォルトの値 + 2, //表示される小数の桁数 + 0, + 0, + ID_OPACITY_RAND + ); + //----------------- + AEFX_CLR_STRUCT(def); + PF_ADD_SLIDER( UI_POINT_VALUE, //パラメータの名前 + 1, //数値入力する場合の最小値 + 100, //数値入力する場合の最大値 + 1, //スライダーの最小値 + 50, //スライダーの最大値 + 10, //デフォルトの値 + ID_POINT_VALUE + ); + //----------------- + AEFX_CLR_STRUCT(def); + PF_ADD_SLIDER( UI_POINT_LENGTH, //パラメータの名前 + 1, //数値入力する場合の最小値 + 1000, //数値入力する場合の最大値 + 5, //スライダーの最小値 + 200, //スライダーの最大値 + 15, //デフォルトの値 + ID_POINT_LENGTH + ); + //----------------- + //ポップアップ + AEFX_CLR_STRUCT(def); + PF_ADD_POPUP( UI_SIZE1, + UI_SIZE_COUNT, //メニューの数 + UI_SIZE_DFLT, //デフォルト + UI_SIZE2, + ID_SIZE + ); + + //----------------- + AEFX_CLR_STRUCT(def); + PF_ADD_COLOR( UI_COLOR1, + 0xD6, // Red D6E6FF + 0xE6, //Green + 0xFF, //Blue + ID_COLOR1 + ); + + //----------------- + //トピック表示の開始 + AEFX_CLR_STRUCT(def); + def.flags = PF_ParamFlag_START_COLLAPSED; // + PF_ADD_TOPIC( UI_COLOR_TOPIC, + ID_COLOR_TOPIC + ); + //----------------- + AEFX_CLR_STRUCT(def); + PF_ADD_SLIDER( UI_COLOR_MAX, //パラメータの名前 + 1, //数値入力する場合の最小値 + UI_COLOR_MAX_V, //数値入力する場合の最大値 + 1, //スライダーの最小値 + UI_COLOR_MAX_V, //スライダーの最大値 + 20, //デフォルトの値 + ID_COLOR_MAX + ); + + //----------------- + AEFX_CLR_STRUCT(def); + PF_ADD_COLOR( UI_COLOR2, + 0x99, // Red99C7FF + 0xC7, //Green + 0xFF, //Blue + ID_COLOR2 + ); + //----------------- + AEFX_CLR_STRUCT(def); + PF_ADD_COLOR( UI_COLOR3, + 0x52, // Red52A3FF + 0xA3, //Green + 0xFF, //Blue + ID_COLOR3 + ); + //----------------- + AEFX_CLR_STRUCT(def); + PF_ADD_COLOR( UI_COLOR4, + 0x04, // Red048D + 0x8D, //Green + 0xE3, //Blue + ID_COLOR4 + ); + //----------------- + //トピック表示の終わり + AEFX_CLR_STRUCT(def); + PF_END_TOPIC(ID_COLOR_TOPIC_END); + //----------------- + //チェックボックス + AEFX_CLR_STRUCT(def); + PF_ADD_CHECKBOX(UI_ORG1, + UI_ORG2, + FALSE, + 0, + ID_ORG + ); + + //----------------- + out_data->num_params = ID_NUM_PARAMS; + + return err; +} +//------------------------------------------------------------------------------------------------- +static PF_Err GetParams(CFsAE *ae, ParamInfo *infoP) +{ + PF_Err err = PF_Err_NONE; + + ERR(ae->GetADD(ID_SEED,&infoP->seed)); + ERR(ae->GetFIXED_PER2ONE(ID_VALUE,&infoP->value)); + ERR(ae->GetPOPUP(ID_DIR,&infoP->dir)); + ERR(ae->GetFIXED(ID_OPACITY_RAND,&infoP->opa)); + + ERR(ae->GetADD(ID_POINT_VALUE,&infoP->point_value)); + ERR(ae->GetADD(ID_POINT_LENGTH,&infoP->point_length)); + if (!err){ + infoP->point_length = ae->downScale(infoP->point_length); + if (infoP->point_length<2) infoP->point_length = 2; + } + ERR(ae->GetPOPUP(ID_SIZE,&infoP->size)); + ERR(ae->GetADD(ID_COLOR_MAX,&infoP->color_max)); + + ERR(ae->GetCOLOR(ID_COLOR1,&infoP->colors[0])); + ERR(ae->GetCOLOR(ID_COLOR2,&infoP->colors[1])); + ERR(ae->GetCOLOR(ID_COLOR3,&infoP->colors[2])); + ERR(ae->GetCOLOR(ID_COLOR4,&infoP->colors[3])); + + ERR(ae->GetCHECKBOX(ID_ORG,&infoP->org)); + + return err; +} +//------------------------------------------------------------------------------------------------- +static PF_Err + Exec (CFsAE *ae , ParamInfo *infoP) +{ + PF_Err err = PF_Err_NONE; + + if (infoP->org == TRUE) { + ERR( ae->CopyInToOut()); + }else{ + ERR(ae->out->clear()); + } + if (infoP->value>0){ + CFsBuffer buf = ae->NewBuffer((SPD_RAND_MAX+3)*sizeof(A_u_char));// + SPD_RAND_MAX + if (buf.alive()==FALSE){ + ae->out_data->out_flags |= PF_OutFlag_DISPLAY_ERROR_MESSAGE; + err = PF_Err_INTERNAL_STRUCT_DAMAGED; + return err; + } + CFsBuffer buf1 = ae->NewBuffer(ae->out->width() * (ae->out->height()+8) *sizeof(A_u_char));// + SPD_RAND_MAX + if (buf1.alive()==FALSE){ + buf.Dispose(); + ae->out_data->out_flags |= PF_OutFlag_DISPLAY_ERROR_MESSAGE; + err = PF_Err_INTERNAL_STRUCT_DAMAGED; + return err; + } + infoP->sputRandTable = buf.bufA_u_char(); + SetupSputData(infoP->size,infoP->sputRandTable); + infoP->buf = buf1.bufA_u_char(); + + F_SRAND(infoP->seed); + switch(ae->pixelFormat()) + { + case PF_PixelFormat_ARGB128: + ERR(MainRender32(ae,infoP)); + break; + case PF_PixelFormat_ARGB64: + ERR(MainRender16(ae,infoP)); + break; + case PF_PixelFormat_ARGB32: + ERR(MainRender8(ae,infoP)); + break; + } + buf.Dispose(); + buf1.Dispose(); + } + 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" +//------------------------------------------------------------------------------------------------- diff --git a/sputteringSplash/sputteringSplash.h b/sputteringSplash/sputteringSplash.h new file mode 100644 index 0000000..ae50d56 --- /dev/null +++ b/sputteringSplash/sputteringSplash.h @@ -0,0 +1,150 @@ +//----------------------------------------------------------------------------------- +/* + PluginSkeleton for VS2010 +*/ +//----------------------------------------------------------------------------------- + +#pragma once + +#ifndef sputteringSplash_H +#define sputteringSplash_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/FsSputtering.h" + +//----------------------------------------------------------------------------- +//ParamsSetup用の定数 +enum { + ID_INPUT = 0, + + ID_SEED, //乱数の基準 + ID_VALUE, //量 + ID_DIR, //向き + ID_OPACITY_RAND, //量 + + ID_POINT_VALUE, //一回の描画で打つ点の数 + ID_POINT_LENGTH, //点の距離 + + ID_SIZE, + + ID_COLOR1, + ID_COLOR_TOPIC, + ID_COLOR_MAX, + ID_COLOR2, + ID_COLOR3, + ID_COLOR4, + ID_COLOR_TOPIC_END, + ID_ORG, + + ID_NUM_PARAMS +}; +//----------------------------------------------------------------------------- +//パラメータUI用の文字列 +#define UI_SEED "seed" +#define UI_VALUE "value(%)" +#define UI_DIR1 "direction" +#define UI_DIR2 "上(0)|右上(45)|右(90)|右下(135)|下(180)|左下(235)|左(270)|左上(315)" +#define UI_DIR_COUNT 8 +#define UI_DIR_DFLT 1 +#define UI_OPA_RND "opacity_rand" + +#define UI_POINT_VALUE "PointValue" +#define UI_POINT_LENGTH "PointLength" +#define UI_POINT_LEN_SYSNC1 "Point_length_sysnc" +#define UI_POINT_LEN_SYSNC2 "ON" + +#define UI_SIZE1 "size" +#define UI_SIZE2 "極小|小|中|大|特大" +#define UI_SIZE_COUNT 5 +#define UI_SIZE_DFLT 2 + +#define UI_COLOR1 "Color1" +#define UI_COLOR_TOPIC "ExtraColors" +#define UI_COLOR_MAX "ColorMax" +#define UI_COLOR_MAX_V 4 +#define UI_COLOR2 "Color2" +#define UI_COLOR3 "Color3" +#define UI_COLOR4 "Color4" +#define UI_ORG1 "Blend with original" +#define UI_ORG2 "ON" + + +//----------------------------------------------------------------------------- + + +#define EDGE_BORDER8 (PF_MAX_CHAN8 * 9 /10) +#define EDGE_BORDER16 (PF_MAX_CHAN16 * 9 /10) +#define EDGE_BORDER32 (0.9) + +#define TARGET_EDGE (PF_MAX_CHAN8) +#define TARGET_SOLID (PF_HALF_CHAN8) + +typedef struct +{ + A_long seed; + PF_Fixed value; + A_long dir; + PF_Fixed opa; + + A_long point_value; + A_long point_length; + A_long size; + A_long color_max; + PF_Pixel colors[UI_COLOR_MAX_V]; + A_u_char *sputRandTable; + A_u_char *buf; + PF_Boolean org; +} ParamInfo; + + +//----------------------------------------------------------------------------- +//関数の宣言 +PF_Err MainRender8 (CFsAE *ae, ParamInfo *prm); +PF_Err MainRender16 (CFsAE *ae, ParamInfo *prm); +PF_Err MainRender32 (CFsAE *ae, ParamInfo *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 *extra); +} +//----------------------------------------------------------------------------- + +#endif // sputteringSplash_H \ No newline at end of file diff --git a/sputteringSplash/sputteringSplashMain.cpp b/sputteringSplash/sputteringSplashMain.cpp new file mode 100644 index 0000000..dcd2a20 --- /dev/null +++ b/sputteringSplash/sputteringSplashMain.cpp @@ -0,0 +1,442 @@ +//----------------------------------------------------------------------------- +/* + AEP Project用のプラグイン + sputteringSplash + 描画のみ +*/ +#include "sputteringSplash.h" + +//----------------------------------------------------------------------------- +PF_Err MainRender8 (CFsAE *ae, ParamInfo *prm) +{ + PF_Err err = PF_Err_NONE; + + PF_Fixed value = prm->value /10; + A_long pValue = prm->point_value; + PF_Fixed pLen = prm->point_length; //値は整数 + A_long colRnd = prm->color_max -1; + A_long colR; + + A_long i; + A_long x,y; + A_long w = ae->out->width(); + A_long h = ae->out->height(); + + //エッジの場所を探してoutputのalphaへ保存 + A_u_long targetIn =0; + A_u_long targetOut =0; + PF_Pixel *iD; + iD = ae->in->data(); + PF_Pixel *oD; + oD = ae->out->data(); + A_u_char *buf; + buf = prm->buf; + PF_Pixel c; + A_long we = w-1; + A_long he = h-1; + A_long offset[3]; + switch(prm->dir){ + case 2: + offset[0] = 0 - ae->in->widthTrue(); + offset[1] = +1 - ae->in->widthTrue(); + offset[2] = +1; + break; + case 3: + offset[0] = +1 ; + offset[1] = 0; + offset[2] = 0; + break; + case 4: + offset[0] = +1; + offset[1] = +1 + ae->in->widthTrue(); + offset[2] = 0 + ae->in->widthTrue(); + break; + case 5: + offset[0] = 0 + ae->in->widthTrue(); + offset[1] = 0; + offset[2] = 0; + break; + case 6: + offset[0] = -1; + offset[1] = -1 + ae->in->widthTrue(); + offset[2] = 0 + ae->in->widthTrue(); + break; + case 7: + offset[0] = -1; + offset[1] = 0; + offset[2] = 0; + break; + case 8: + offset[0] = -1; + offset[1] = -1 - ae->in->widthTrue(); + offset[2] = 0 - ae->in->widthTrue(); + break; + case 1: + default: + offset[0] = 0 - ae->in->widthTrue(); + offset[1] = 0; + offset[2] = 0; + break; + } + A_u_char eg = 0; + for( y=0; y=EDGE_BORDER8){ + if ( (x>=1)&&(x=1)&&(yin->offsetWidth(); + targetOut += ae->out->offsetWidth(); + } + + //さぁ、描画だ + F_SRAND(prm->seed); + + sputDrawPrm sdp; + sdp.data = ae->out->data(); + sdp.width = ae->out->width(); + sdp.height = ae->out->height(); + sdp.widthTrue = ae->out->widthTrue(); + + CRotCalc rp(ae->in_data); + + targetOut =0; + for( y=0; y0){ + A_long rnd = FM_RAND((1L<<16)); + if (value > rnd){ + for (i=0; iopa; + sdp.opa = (PF_FpShort)FM_RAND(opa)/65536; + sdp.sptIdx = prm->sputRandTable[FM_RAND(200-1)]; + colR = FM_RAND(colRnd); + SputDataDraw8(&sdp,prm->colors[colR]); + } + } + } + targetOut++; + + } + targetOut += ae->out->offsetWidth(); + } + return err; +} +//----------------------------------------------------------------------------- +PF_Err MainRender16 (CFsAE *ae, ParamInfo *prm) +{ + PF_Err err = PF_Err_NONE; + + PF_Fixed value = prm->value / 10; + A_long pValue = prm->point_value; + PF_Fixed pLen = prm->point_length; //値は整数 + A_long colRnd = prm->color_max -1; + A_long colR; + A_long i; + A_long x,y; + + A_long w = ae->out->width(); + A_long h = ae->out->height(); + + PF_Pixel16 colors[4]; + + for (i=0; icolors[i]); + + + //エッジの場所を探してoutputのalphaへ保存 + A_u_long targetIn =0; + A_u_long targetOut =0; + PF_Pixel16 *iD; + iD = (PF_Pixel16 *)ae->in->data(); + PF_Pixel16 *oD; + oD = (PF_Pixel16 *)ae->out->data(); + A_u_char *buf; + buf = prm->buf; + PF_Pixel16 c; + A_long we = w-1; + A_long he = h-1; + A_long offset[3]; + A_long inwt = ae->in->widthTrue(); + switch(prm->dir){ + case 2: + offset[0] = 0 - inwt; + offset[1] = +1 - inwt; + offset[2] = +1; + break; + case 3: + offset[0] = +1 ; + offset[1] = 0; + offset[2] = 0; + break; + case 4: + offset[0] = +1; + offset[1] = +1 + inwt; + offset[2] = 0 + inwt; + break; + case 5: + offset[0] = 0 + inwt; + offset[1] = 0; + offset[2] = 0; + break; + case 6: + offset[0] = -1; + offset[1] = -1 + inwt; + offset[2] = 0 + inwt; + break; + case 7: + offset[0] = -1; + offset[1] = 0; + offset[2] = 0; + break; + case 8: + offset[0] = -1; + offset[1] = -1 - inwt; + offset[2] = 0 - inwt; + break; + case 1: + default: + offset[0] = 0 - inwt; + offset[1] = 0; + offset[2] = 0; + break; + } + A_u_char eg = 0; + for( y=0; y=EDGE_BORDER16){ + if ( (x>=1)&&(x=1)&&(yin->offsetWidth(); + targetOut += ae->out->offsetWidth(); + } + + //さぁ、描画だ + F_SRAND(prm->seed); + + sputDrawPrm sdp; + sdp.data = ae->out->data(); + sdp.width = ae->out->width(); + sdp.height = ae->out->height(); + sdp.widthTrue = ae->out->widthTrue(); + + CRotCalc rp(ae->in_data); + + targetOut =0; + for( y=0; y0){ + A_long rnd = FM_RAND((1L<<16)); + if (value > rnd){ + for (i=0; iopa; + sdp.opa = (PF_FpShort)FM_RAND(opa)/65536; + sdp.sptIdx = prm->sputRandTable[FM_RAND(200-1)]; + colR = FM_RAND(colRnd); + SputDataDraw16(&sdp,colors[colR]); + } + } + } + targetOut++; + } + targetOut += ae->out->offsetWidth(); + } + return err; +} +//----------------------------------------------------------------------------- +//----------------------------------------------------------------------------- +PF_Err MainRender32 (CFsAE *ae, ParamInfo *prm) +{ + PF_Err err = PF_Err_NONE; + + PF_Fixed value = prm->value / 10; + A_long pValue = prm->point_value; + PF_Fixed pLen = prm->point_length; //値は整数 + A_long colRnd = prm->color_max -1; + A_long colR; + A_long i; + A_long x,y; + + A_long w = ae->out->width(); + A_long h = ae->out->height(); + + PF_PixelFloat colors[4]; + + for (i=0; icolors[i]); + + + //エッジの場所を探してoutputのalphaへ保存 + A_u_long targetIn =0; + A_u_long targetOut =0; + PF_PixelFloat *iD; + iD = (PF_PixelFloat *)ae->in->data(); + PF_PixelFloat *oD; + oD = (PF_PixelFloat *)ae->out->data(); + A_u_char *buf; + buf = prm->buf; + PF_PixelFloat c; + A_long we = w-1; + A_long he = h-1; + A_long offset[3]; + A_long inwt = ae->in->widthTrue(); + switch(prm->dir){ + case 2: + offset[0] = 0 - inwt; + offset[1] = +1 - inwt; + offset[2] = +1; + break; + case 3: + offset[0] = +1 ; + offset[1] = 0; + offset[2] = 0; + break; + case 4: + offset[0] = +1; + offset[1] = +1 + inwt; + offset[2] = 0 + inwt; + break; + case 5: + offset[0] = 0 + inwt; + offset[1] = 0; + offset[2] = 0; + break; + case 6: + offset[0] = -1; + offset[1] = -1 + inwt; + offset[2] = 0 + inwt; + break; + case 7: + offset[0] = -1; + offset[1] = 0; + offset[2] = 0; + break; + case 8: + offset[0] = -1; + offset[1] = -1 - inwt; + offset[2] = 0 - inwt; + break; + case 1: + default: + offset[0] = 0 - inwt; + offset[1] = 0; + offset[2] = 0; + break; + } + A_u_char eg = 0; + for( y=0; y=EDGE_BORDER32){ + if ( (x>=1)&&(x=1)&&(yin->offsetWidth(); + targetOut += ae->out->offsetWidth(); + } + + //さぁ、描画だ + F_SRAND(prm->seed); + + sputDrawPrm sdp; + sdp.data = ae->out->data(); + sdp.width = ae->out->width(); + sdp.height = ae->out->height(); + sdp.widthTrue = ae->out->widthTrue(); + + CRotCalc rp(ae->in_data); + + targetOut =0; + for( y=0; y0){ + A_long rnd = FM_RAND((1L<<16)); + if (value > rnd){ + for (i=0; iopa; + sdp.opa = (PF_FpShort)FM_RAND(opa)/65536; + sdp.sptIdx = prm->sputRandTable[FM_RAND(200-1)]; + colR = FM_RAND(colRnd); + SputDataDraw32(&sdp,colors[colR]); + } + } + } + targetOut++; + } + targetOut += ae->out->offsetWidth(); + } + return err; +} +//----------------------------------------------------------------------------- diff --git a/sputteringSplash/sputteringSplashPiPL.r b/sputteringSplash/sputteringSplashPiPL.r new file mode 100644 index 0000000..e184fa1 --- /dev/null +++ b/sputteringSplash/sputteringSplashPiPL.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 { + 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/whiteInOut/Fs_Entry.h b/whiteInOut/Fs_Entry.h new file mode 100644 index 0000000..a220858 --- /dev/null +++ b/whiteInOut/Fs_Entry.h @@ -0,0 +1,227 @@ +//----------------------------------------------------------------------------------- +/* + whiteInOut 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/whiteInOut/Fs_Target.h b/whiteInOut/Fs_Target.h new file mode 100644 index 0000000..7597175 --- /dev/null +++ b/whiteInOut/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 whiteInOut" + +//----------------------------------------------------------------------------------- +//プラグインの説明に使われる文字 +#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/whiteInOut/Win/ClassDiagram1.cd b/whiteInOut/Win/ClassDiagram1.cd new file mode 100644 index 0000000..0519ecb --- /dev/null +++ b/whiteInOut/Win/ClassDiagram1.cd @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/whiteInOut/Win/PluginSkeletonPiPL.rc b/whiteInOut/Win/PluginSkeletonPiPL.rc new file mode 100644 index 0000000..e3b4389 --- /dev/null +++ b/whiteInOut/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, 9, + + "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/whiteInOut/Win/whiteInOut.sln b/whiteInOut/Win/whiteInOut.sln new file mode 100644 index 0000000..31fe7a5 --- /dev/null +++ b/whiteInOut/Win/whiteInOut.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}") = "whiteInOut", "whiteInOut.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/whiteInOut/Win/whiteInOut.vcxproj b/whiteInOut/Win/whiteInOut.vcxproj new file mode 100644 index 0000000..35336ca --- /dev/null +++ b/whiteInOut/Win/whiteInOut.vcxproj @@ -0,0 +1,591 @@ +サソ + + + + Debug + Win32 + + + Debug + x64 + + + Release-MD + Win32 + + + Release-MD + x64 + + + Release + Win32 + + + Release + x64 + + + + {007D3F7D-3D91-4B4D-BECE-DC9F75F3B184} + whiteInOut + whiteInOut + 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/whiteInOut.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/whiteInOut.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/whiteInOut.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/whiteInOut.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/whiteInOut.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/whiteInOut.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/whiteInOut/Win/whiteInOut.vcxproj.filters b/whiteInOut/Win/whiteInOut.vcxproj.filters new file mode 100644 index 0000000..8bf7f91 --- /dev/null +++ b/whiteInOut/Win/whiteInOut.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/whiteInOut/Win/whiteInOutPiPL.rc b/whiteInOut/Win/whiteInOutPiPL.rc new file mode 100644 index 0000000..f8941a8 --- /dev/null +++ b/whiteInOut/Win/whiteInOutPiPL.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 whiteInOut\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 whiteInOut\0", + + "MIB8", + 0x6165464CL, + 0L, + 4L + 0L, + + +END + diff --git a/whiteInOut/whiteInOut.cpp b/whiteInOut/whiteInOut.cpp new file mode 100644 index 0000000..3dd893c --- /dev/null +++ b/whiteInOut/whiteInOut.cpp @@ -0,0 +1,337 @@ +//----------------------------------------------------------------------------------- +/* + F's Plugins for VS2010/VS2012 +*/ +//----------------------------------------------------------------------------------- + + +#include "whiteInOut.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_VALUE, //Name + 0, //VALID_MIN + 100, //VALID_MAX + 0, //SLIDER_MIN + 100, //SLIDER_MAX + 1, //CURVE_TOLERANCE + 0, //DFLT + 1, //PREC + 0, //DISP + 0, //WANT_PHASE + ID_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; + + 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); + if (niP->value >= 1.0) return err; + + PF_FpLong r = 1.0, g = 1.0, b = 1.0; + PF_FpLong ra = 1.0, ga = 1.0, ba = 1.0; + A_long rr, gg, bb; + rr = gg = bb = PF_MAX_CHAN8; + + if (niP->value > 0) { + r = (PF_FpLong)outP->red / PF_MAX_CHAN8; + g = (PF_FpLong)outP->green / PF_MAX_CHAN8; + b = (PF_FpLong)outP->blue / PF_MAX_CHAN8; + + ra = (1.0 - r)*OFFSET_VALUE * (1.0 - niP->value); + ga = (1.0 - g)*OFFSET_VALUE * (1.0 - niP->value); + ba = (1.0 - b)*OFFSET_VALUE * (1.0 - niP->value); + + r += ra; + g += ga; + b += ba; + + r /= niP->value; + g /= niP->value; + b /= niP->value; + rr = (A_long)(r*PF_MAX_CHAN8 + 0.5); + gg = (A_long)(g*PF_MAX_CHAN8 + 0.5); + bb = (A_long)(b*PF_MAX_CHAN8 + 0.5); + if (rr > PF_MAX_CHAN8) rr = PF_MAX_CHAN8; + if (gg > PF_MAX_CHAN8) gg = PF_MAX_CHAN8; + if (bb > PF_MAX_CHAN8) bb = PF_MAX_CHAN8; + } + + outP->red = (A_u_char)rr; + outP->green = (A_u_char)gg; + outP->blue = (A_u_char)bb; + + + 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->value >= 1.0) return err; + + PF_FpLong r = 1.0, g = 1.0, b = 1.0; + PF_FpLong ra = 1.0, ga = 1.0, ba = 1.0; + A_long rr, gg, bb; + rr = gg = bb = PF_MAX_CHAN16; + + if (niP->value > 0) { + r = (PF_FpLong)outP->red / PF_MAX_CHAN16; + g = (PF_FpLong)outP->green / PF_MAX_CHAN16; + b = (PF_FpLong)outP->blue / PF_MAX_CHAN16; + + ra = (1.0 - r)*OFFSET_VALUE * (1.0 - niP->value); + ga = (1.0 - g)*OFFSET_VALUE * (1.0 - niP->value); + ba = (1.0 - b)*OFFSET_VALUE * (1.0 - niP->value); + + r += ra; + g += ga; + b += ba; + + r /= niP->value; + g /= niP->value; + b /= niP->value; + + rr = (A_long)(r*PF_MAX_CHAN16 + 0.5); + gg = (A_long)(g*PF_MAX_CHAN16 + 0.5); + bb = (A_long)(b*PF_MAX_CHAN16 + 0.5); + if (rr > PF_MAX_CHAN16) rr = PF_MAX_CHAN16; + if (gg > PF_MAX_CHAN16) gg = PF_MAX_CHAN16; + if (bb > PF_MAX_CHAN16) bb = PF_MAX_CHAN16; + } + + outP->red = (A_u_short)rr; + outP->green = (A_u_short)gg; + outP->blue = (A_u_short)bb; + + + + 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->value >= 1.0) return err; + + PF_FpLong v = niP->value; + + + PF_FpLong r = 1.0, g = 1.0, b = 1.0; + PF_FpLong rx, gx, bx; + + rx = r = (PF_FpLong)outP->red; + gx = g = (PF_FpLong)outP->green; + bx = b = (PF_FpLong)outP->blue; + + if (rx > 1.0) rx = 1.0; + if (gx > 1.0) gx = 1.0; + if (bx > 1.0) bx = 1.0; + + + PF_FpLong ra = 1.0, ga = 1.0, ba = 1.0; + + ra = (1.0 - rx)*OFFSET_VALUE * (1.0 - v); + ga = (1.0 - gx)*OFFSET_VALUE * (1.0 - v); + ba = (1.0 - bx)*OFFSET_VALUE * (1.0 - v); + + r += ra; + g += ga; + b += ba; + + if (v <= 0) v = 0.001; + + r /= v; + g /= v; + b /= v; + + outP->red = (PF_FpShort)r; + outP->green = (PF_FpShort)g; + outP->blue = (PF_FpShort)b; + + + return err; +} +//------------------------------------------------------------------------------------------------- +static PF_Err GetParams(CFsAE *ae, ParamInfo *infoP) +{ + PF_Err err = PF_Err_NONE; + + ERR(ae->GetFLOAT(ID_VALUE,&infoP->value)); + infoP->value /= 100; + if (infoP->value < 0) infoP->value = 0; + else if (infoP->value > 1.0) infoP->value = 1.0; + infoP->value = 1.0 - infoP->value; + return err; +} +//------------------------------------------------------------------------------------------------- +static PF_Err + Exec (CFsAE *ae , ParamInfo *infoP) +{ + PF_Err err = PF_Err_NONE; + + //画面をコピー + ERR(ae->CopyInToOut()); + + if (infoP->value >= 1.0) return err; + + 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/whiteInOut/whiteInOut.h b/whiteInOut/whiteInOut.h new file mode 100644 index 0000000..241438d --- /dev/null +++ b/whiteInOut/whiteInOut.h @@ -0,0 +1,77 @@ +//----------------------------------------------------------------------------------- +/* + whiteInOut for VS2010 +*/ +//----------------------------------------------------------------------------------- + +#pragma once +#ifndef whiteInOut_H +#define whiteInOut_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 OFFSET_VALUE 0.2 + +//ユーザーインターフェースのID +//ParamsSetup関数とRender関数のparamsパラメータのIDになる +enum { + ID_INPUT = 0, // default input layer + + ID_VALUE, + ID_NUM_PARAMS +}; + +//UIの表示文字列 +#define STR_VALUE "value" + +//UIのパラメータ +typedef struct ParamInfo { + PF_FpLong value; + +} 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 // whiteInOut_H diff --git a/whiteInOut/whiteInOutPiPL.r b/whiteInOut/whiteInOutPiPL.r new file mode 100644 index 0000000..98b2313 --- /dev/null +++ b/whiteInOut/whiteInOutPiPL.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 + } + } +}; +