summaryrefslogtreecommitdiff
path: root/src/aftereffects
diff options
context:
space:
mode:
Diffstat (limited to 'src/aftereffects')
-rw-r--r--src/aftereffects/DrawbotBot.cpp239
-rw-r--r--src/aftereffects/DrawbotBot.h89
-rwxr-xr-xsrc/aftereffects/OpenColorIO_AE.cpp1133
-rwxr-xr-xsrc/aftereffects/OpenColorIO_AE.h227
-rw-r--r--src/aftereffects/OpenColorIO_AE_ArbData.cpp408
-rw-r--r--src/aftereffects/OpenColorIO_AE_Context.cpp1051
-rw-r--r--src/aftereffects/OpenColorIO_AE_Context.h153
-rw-r--r--src/aftereffects/OpenColorIO_AE_Dialogs.h60
-rw-r--r--src/aftereffects/OpenColorIO_AE_GL.h61
-rw-r--r--src/aftereffects/OpenColorIO_AE_PiPL.r102
-rw-r--r--src/aftereffects/OpenColorIO_AE_UI.cpp1229
-rwxr-xr-xsrc/aftereffects/mac/OpenColorIO_AE.plugin-Info.plist24
-rw-r--r--src/aftereffects/mac/OpenColorIO_AE_Dialogs_Cocoa.mm237
-rw-r--r--src/aftereffects/mac/OpenColorIO_AE_GL_Cocoa.mm178
-rw-r--r--src/aftereffects/mac/OpenColorIO_AE_Menu.h45
-rw-r--r--src/aftereffects/mac/OpenColorIO_AE_Menu.m114
-rw-r--r--src/aftereffects/mac/OpenColorIO_AE_MonitorProfileChooser.xib494
-rw-r--r--src/aftereffects/mac/OpenColorIO_AE_MonitorProfileChooser_Controller.h46
-rw-r--r--src/aftereffects/mac/OpenColorIO_AE_MonitorProfileChooser_Controller.m195
-rw-r--r--src/aftereffects/vc/vc9/OpenColorABI.h100
-rw-r--r--src/aftereffects/vc/vc9/OpenColorIO.vcproj667
-rw-r--r--src/aftereffects/vc/vc9/aftereffects/OpenColorIO_AE.sln57
-rw-r--r--src/aftereffects/vc/vc9/aftereffects/OpenColorIO_AE.vcproj448
-rw-r--r--src/aftereffects/vc/vc9/ext/glew.vcproj319
-rw-r--r--src/aftereffects/vc/vc9/ext/lcms.vcproj407
-rw-r--r--src/aftereffects/vc/vc9/ext/tinyxml.vcproj323
-rw-r--r--src/aftereffects/vc/vc9/ext/yaml.vcproj603
-rw-r--r--src/aftereffects/win/OpenColorIO.rc99
-rw-r--r--src/aftereffects/win/OpenColorIO_AE_Dialogs_Win.cpp564
-rw-r--r--src/aftereffects/win/OpenColorIO_AE_GL_Win.cpp212
-rw-r--r--src/aftereffects/win/resource.h17
-rw-r--r--src/aftereffects/xcode/OpenColorABI.h100
-rw-r--r--src/aftereffects/xcode/OpenColorIO.xcodeproj/project.pbxproj589
-rwxr-xr-xsrc/aftereffects/xcode/aftereffects/OpenColorIO_AE.xcodeproj/project.pbxproj509
-rw-r--r--src/aftereffects/xcode/ext/lcms.xcodeproj/project.pbxproj343
-rw-r--r--src/aftereffects/xcode/ext/tinyxml.xcodeproj/project.pbxproj248
-rw-r--r--src/aftereffects/xcode/ext/yaml.xcodeproj/project.pbxproj571
37 files changed, 12261 insertions, 0 deletions
diff --git a/src/aftereffects/DrawbotBot.cpp b/src/aftereffects/DrawbotBot.cpp
new file mode 100644
index 0000000..3d6cee6
--- /dev/null
+++ b/src/aftereffects/DrawbotBot.cpp
@@ -0,0 +1,239 @@
+/*
+Copyright (c) 2003-2012 Sony Pictures Imageworks Inc., et al.
+All Rights Reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are
+met:
+* Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in the
+ documentation and/or other materials provided with the distribution.
+* Neither the name of Sony Pictures Imageworks nor the names of its
+ contributors may be used to endorse or promote products derived from
+ this software without specific prior written permission.
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+
+
+#include "DrawbotBot.h"
+
+
+DrawbotBot::DrawbotBot(struct SPBasicSuite *pica_basicP, PF_ContextH contextH, A_long appl_id) :
+ suites(pica_basicP),
+ _appl_id(appl_id),
+ _suiteP(NULL),
+ _drawbot_ref(NULL),
+ _supplier_ref(NULL),
+ _surface_ref(NULL)
+{
+ suites.EffectCustomUISuite1()->PF_GetDrawingReference(contextH, &_drawbot_ref);
+
+ _suiteP = suites.SupplierSuiteCurrent();
+
+ suites.DrawbotSuiteCurrent()->GetSupplier(_drawbot_ref, &_supplier_ref);
+ suites.DrawbotSuiteCurrent()->GetSurface(_drawbot_ref, &_surface_ref);
+
+ _brush_pos.x = 0.f;
+ _brush_pos.y = 0.f;
+
+ SetColor(PF_App_Color_TEXT);
+
+ _suiteP->GetDefaultFontSize(_supplier_ref, &_font_size);
+}
+
+
+DrawbotBot::~DrawbotBot()
+{
+
+}
+
+
+void DrawbotBot::SetColor(PF_App_ColorType color, float a)
+{
+ if(_appl_id == 'FXTC')
+ {
+ PF_App_Color app_color;
+
+ suites.AppSuite4()->PF_AppGetColor(color, &app_color);
+
+ _brush_color.red = (float)app_color.red / (float)PF_MAX_CHAN16;
+ _brush_color.green = (float)app_color.green / (float)PF_MAX_CHAN16;
+ _brush_color.blue = (float)app_color.blue / (float)PF_MAX_CHAN16;
+ }
+ else
+ {
+ // Premiere isn't doing this properly, so I'll have to.
+ // Only supporting the colors I'm actually using at the moment.
+ switch(color)
+ {
+ case PF_App_Color_BLACK:
+ _brush_color.red = _brush_color.green = _brush_color.blue = 0.f;
+ break;
+
+ case PF_App_Color_WHITE:
+ _brush_color.red = _brush_color.green = _brush_color.blue = 1.f;
+ break;
+
+ case PF_App_Color_RED:
+ _brush_color.red = 1.f;
+ _brush_color.green = _brush_color.blue = 0.f;
+ break;
+
+ case PF_App_Color_TEXT_DISABLED:
+ _brush_color.red = _brush_color.green = _brush_color.blue = 0.6f;
+ break;
+
+ case PF_App_Color_SHADOW:
+ _brush_color.red = _brush_color.green = _brush_color.blue = 0.3f;
+ break;
+
+ case PF_App_Color_HILITE:
+ _brush_color.red = _brush_color.green = _brush_color.blue = 0.8f;
+ break;
+
+ case PF_App_Color_LIGHT_TINGE:
+ _brush_color.red = _brush_color.green = _brush_color.blue = 0.7f;
+ break;
+
+ case PF_App_Color_BUTTON_FILL:
+ _brush_color.red = _brush_color.green = _brush_color.blue = 0.5f;
+ break;
+
+ case PF_App_Color_BUTTON_PRESSED_FILL:
+ _brush_color.red = _brush_color.green = _brush_color.blue = 0.3f;
+ break;
+
+ case PF_App_Color_PANEL_BACKGROUND:
+ {
+ PF_App_Color app_color;
+ suites.AppSuite4()->PF_AppGetBgColor(&app_color);
+
+ _brush_color.red = (float)app_color.red / (float)65535;
+ _brush_color.green = (float)app_color.green / (float)65535;
+ _brush_color.blue = (float)app_color.blue / (float)65535;
+ }
+ break;
+
+ default:
+ _brush_color.red = _brush_color.green = _brush_color.blue = 0.9f;
+ break;
+ }
+ }
+
+ _brush_color.alpha = a;
+}
+
+
+void DrawbotBot::DrawLineTo(float x, float y, float brush_size)
+{
+ DRAWBOT_PathP pathP(_suiteP, _supplier_ref);
+ DRAWBOT_PenP penP(_suiteP, _supplier_ref, &_brush_color, brush_size);
+
+ suites.PathSuiteCurrent()->MoveTo(pathP.Get(), _brush_pos.x, _brush_pos.y);
+
+ suites.PathSuiteCurrent()->LineTo(pathP.Get(), x, y);
+
+ suites.SurfaceSuiteCurrent()->StrokePath(_surface_ref, penP.Get(), pathP.Get());
+
+ MoveTo(x, y);
+}
+
+
+void DrawbotBot::DrawRect(float w, float h, float brush_size) const
+{
+ DRAWBOT_PathP pathP(_suiteP, _supplier_ref);
+ DRAWBOT_PenP penP(_suiteP, _supplier_ref, &_brush_color, brush_size);
+
+ DRAWBOT_RectF32 rect;
+
+ rect.left = _brush_pos.x - 0.5f;
+ rect.top = _brush_pos.y - 0.5f;
+ rect.width = w;
+ rect.height = h;
+
+ suites.PathSuiteCurrent()->AddRect(pathP.Get(), &rect);
+
+ suites.SurfaceSuiteCurrent()->StrokePath(_surface_ref, penP.Get(), pathP.Get());
+}
+
+void DrawbotBot::PaintRect(float w, float h) const
+{
+ DRAWBOT_RectF32 rect;
+
+ rect.left = _brush_pos.x;
+ rect.top = _brush_pos.y;
+ rect.width = w;
+ rect.height = h;
+
+ suites.SurfaceSuiteCurrent()->PaintRect(_surface_ref, &_brush_color, &rect);
+}
+
+
+void DrawbotBot::PaintTriangle(float w, float h) const
+{
+ DRAWBOT_PathP pathP(_suiteP, _supplier_ref);
+ DRAWBOT_BrushP brushP(_suiteP, _supplier_ref, &_brush_color);
+
+ suites.PathSuiteCurrent()->MoveTo(pathP.Get(), _brush_pos.x, _brush_pos.y);
+
+ suites.PathSuiteCurrent()->LineTo(pathP.Get(), _brush_pos.x + w, _brush_pos.y);
+
+ suites.PathSuiteCurrent()->LineTo(pathP.Get(), _brush_pos.x + (w / 2.f),
+ _brush_pos.y + h);
+
+ suites.PathSuiteCurrent()->Close(pathP.Get());
+
+ suites.SurfaceSuiteCurrent()->FillPath(_surface_ref, brushP.Get(), pathP.Get(),
+ kDRAWBOT_FillType_Default);
+}
+
+
+void DrawbotBot::DrawString(
+ const DRAWBOT_UTF16Char *str,
+ DRAWBOT_TextAlignment align,
+ DRAWBOT_TextTruncation truncate,
+ float truncation_width) const
+{
+ DRAWBOT_BrushP brushP(_suiteP, _supplier_ref, &_brush_color);
+ DRAWBOT_FontP fontP(_suiteP, _supplier_ref, _font_size);
+
+ suites.SurfaceSuiteCurrent()->DrawString(_surface_ref, brushP.Get(), fontP.Get(), str,
+ &_brush_pos, align, truncate, truncation_width);
+}
+
+
+void DrawbotBot::DrawString(
+ const char *str,
+ DRAWBOT_TextAlignment align,
+ DRAWBOT_TextTruncation truncate,
+ float truncation_width) const
+{
+ DRAWBOT_UTF16Char u_str[256] = {'\0'};
+
+ DRAWBOT_UTF16Char *u = u_str;
+ const char *c = str;
+
+ if(*c != '\0')
+ {
+ do{
+ *u++ = *c++;
+
+ }while(*c != '\0');
+
+ *u = '\0';
+ }
+
+ DrawString(u_str, align, truncate, truncation_width);
+} \ No newline at end of file
diff --git a/src/aftereffects/DrawbotBot.h b/src/aftereffects/DrawbotBot.h
new file mode 100644
index 0000000..bd55ace
--- /dev/null
+++ b/src/aftereffects/DrawbotBot.h
@@ -0,0 +1,89 @@
+/*
+Copyright (c) 2003-2012 Sony Pictures Imageworks Inc., et al.
+All Rights Reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are
+met:
+* Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in the
+ documentation and/or other materials provided with the distribution.
+* Neither the name of Sony Pictures Imageworks nor the names of its
+ contributors may be used to endorse or promote products derived from
+ this software without specific prior written permission.
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+
+
+#ifndef _DRAWBOTBOT_H_
+#define _DRAWBOTBOT_H_
+
+#include "AEGP_SuiteHandler.h"
+
+
+class DrawbotBot
+{
+ public:
+
+ DrawbotBot(struct SPBasicSuite *pica_basicP, PF_ContextH contextH, A_long appl_id);
+ ~DrawbotBot();
+
+ void MoveTo(DRAWBOT_PointF32 pos) { _brush_pos = pos; }
+ void MoveTo(float x, float y) { _brush_pos.x = x; _brush_pos.y = y; }
+ void Move(float x = 0, float y = 0) { _brush_pos.x += x; _brush_pos.y += y; }
+
+ void SetColor(PF_App_ColorType color, float a = 1.f);
+ void SetColor(DRAWBOT_ColorRGBA color) { _brush_color = color; }
+ void SetColor(float r, float g, float b, float a = 1.f)
+ { _brush_color.red = r; _brush_color.green = g;
+ _brush_color.blue = b; _brush_color.alpha = a; }
+
+ DRAWBOT_PointF32 Pos() const { return _brush_pos; }
+ float FontSize() const { return _font_size; }
+
+ void DrawLineTo(float x, float y, float brush_size = 0.5f);
+
+ void DrawRect(float w, float h, float brush_size = 0.5f) const;
+ void PaintRect(float w, float h) const;
+
+ void PaintTriangle(float w, float h) const;
+
+ void DrawString(const DRAWBOT_UTF16Char *str,
+ DRAWBOT_TextAlignment align = kDRAWBOT_TextAlignment_Default,
+ DRAWBOT_TextTruncation truncate = kDRAWBOT_TextTruncation_None,
+ float truncation_width = 0.f) const;
+ void DrawString(const char *str,
+ DRAWBOT_TextAlignment align = kDRAWBOT_TextAlignment_Default,
+ DRAWBOT_TextTruncation truncate = kDRAWBOT_TextTruncation_None,
+ float truncation_width = 0.f) const;
+
+
+ private:
+ AEGP_SuiteHandler suites;
+ A_long _appl_id;
+
+ DRAWBOT_SupplierSuiteCurrent *_suiteP;
+
+ DRAWBOT_DrawRef _drawbot_ref;
+ DRAWBOT_SupplierRef _supplier_ref;
+ DRAWBOT_SurfaceRef _surface_ref;
+
+ DRAWBOT_PointF32 _brush_pos;
+ DRAWBOT_ColorRGBA _brush_color;
+ float _font_size;
+};
+
+
+#endif // _DRAWBOTBOT_H_ \ No newline at end of file
diff --git a/src/aftereffects/OpenColorIO_AE.cpp b/src/aftereffects/OpenColorIO_AE.cpp
new file mode 100755
index 0000000..cd89091
--- /dev/null
+++ b/src/aftereffects/OpenColorIO_AE.cpp
@@ -0,0 +1,1133 @@
+/*
+Copyright (c) 2003-2012 Sony Pictures Imageworks Inc., et al.
+All Rights Reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are
+met:
+* Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in the
+ documentation and/or other materials provided with the distribution.
+* Neither the name of Sony Pictures Imageworks nor the names of its
+ contributors may be used to endorse or promote products derived from
+ this software without specific prior written permission.
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+
+
+#include "OpenColorIO_AE.h"
+
+#include "OpenColorIO_AE_Context.h"
+#include "OpenColorIO_AE_Dialogs.h"
+
+#include "AEGP_SuiteHandler.h"
+
+// this lives in OpenColorIO_AE_UI.cpp
+std::string GetProjectDir(PF_InData *in_data);
+
+
+static PF_Err About(
+ PF_InData *in_data,
+ PF_OutData *out_data,
+ PF_ParamDef *params[],
+ PF_LayerDef *output )
+{
+ PF_SPRINTF( out_data->return_msg,
+ "OpenColorIO\r\r"
+ "opencolorio.org\r"
+ "version %s",
+ OCIO::GetVersion() );
+
+ return PF_Err_NONE;
+}
+
+
+static PF_Err GlobalSetup(
+ PF_InData *in_data,
+ PF_OutData *out_data,
+ PF_ParamDef *params[],
+ PF_LayerDef *output )
+{
+ out_data->my_version = PF_VERSION( MAJOR_VERSION,
+ MINOR_VERSION,
+ BUG_VERSION,
+ STAGE_VERSION,
+ BUILD_VERSION);
+
+ out_data->out_flags = PF_OutFlag_DEEP_COLOR_AWARE |
+ PF_OutFlag_PIX_INDEPENDENT |
+ PF_OutFlag_CUSTOM_UI |
+ PF_OutFlag_USE_OUTPUT_EXTENT |
+ PF_OutFlag_I_HAVE_EXTERNAL_DEPENDENCIES;
+
+ out_data->out_flags2 = PF_OutFlag2_PARAM_GROUP_START_COLLAPSED_FLAG |
+ PF_OutFlag2_SUPPORTS_SMART_RENDER |
+ PF_OutFlag2_FLOAT_COLOR_AWARE |
+ PF_OutFlag2_PPRO_DO_NOT_CLONE_SEQUENCE_DATA_FOR_RENDER;
+
+
+ GlobalSetup_GL();
+
+
+ if(in_data->appl_id == 'PrMr')
+ {
+ PF_PixelFormatSuite1 *pfS = NULL;
+
+ in_data->pica_basicP->AcquireSuite(kPFPixelFormatSuite,
+ kPFPixelFormatSuiteVersion1,
+ (const void **)&pfS);
+
+ if(pfS)
+ {
+ pfS->ClearSupportedPixelFormats(in_data->effect_ref);
+
+ pfS->AddSupportedPixelFormat(in_data->effect_ref,
+ PrPixelFormat_BGRA_4444_32f_Linear);
+
+ in_data->pica_basicP->ReleaseSuite(kPFPixelFormatSuite,
+ kPFPixelFormatSuiteVersion1);
+ }
+ }
+
+ return PF_Err_NONE;
+}
+
+
+static PF_Err GlobalSetdown(
+ PF_InData *in_data,
+ PF_OutData *out_data,
+ PF_ParamDef *params[],
+ PF_LayerDef *output )
+{
+ GlobalSetdown_GL();
+
+ 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;
+
+
+ // readout
+ AEFX_CLR_STRUCT(def);
+ // we can time_vary once we're willing to print and scan ArbData text
+ def.flags = PF_ParamFlag_CANNOT_TIME_VARY;
+
+ ArbNewDefault(in_data, out_data, NULL, &def.u.arb_d.dephault);
+
+ PF_ADD_ARBITRARY("OCIO",
+ UI_CONTROL_WIDTH,
+ UI_CONTROL_HEIGHT,
+ PF_PUI_CONTROL,
+ def.u.arb_d.dephault,
+ OCIO_DATA,
+ NULL);
+
+
+ AEFX_CLR_STRUCT(def);
+ PF_ADD_CHECKBOX("",
+ "Use GPU",
+ FALSE,
+ 0,
+ OCIO_GPU_ID);
+
+
+ out_data->num_params = OCIO_NUM_PARAMS;
+
+ // register custom UI
+ if (!err)
+ {
+ PF_CustomUIInfo ci;
+
+ AEFX_CLR_STRUCT(ci);
+
+ ci.events = PF_CustomEFlag_EFFECT;
+
+ ci.comp_ui_width = ci.comp_ui_height = 0;
+ ci.comp_ui_alignment = PF_UIAlignment_NONE;
+
+ ci.layer_ui_width = 0;
+ ci.layer_ui_height = 0;
+ ci.layer_ui_alignment = PF_UIAlignment_NONE;
+
+ ci.preview_ui_width = 0;
+ ci.preview_ui_height = 0;
+ ci.layer_ui_alignment = PF_UIAlignment_NONE;
+
+ err = (*(in_data->inter.register_ui))(in_data->effect_ref, &ci);
+ }
+
+
+ return err;
+}
+
+static PF_Err SequenceSetup(
+ PF_InData *in_data,
+ PF_OutData *out_data,
+ PF_ParamDef *params[],
+ PF_LayerDef *output )
+{
+ PF_Err err = PF_Err_NONE;
+
+ SequenceData *seq_data = NULL;
+
+ // set up sequence data
+ if( (in_data->sequence_data == NULL) )
+ {
+ out_data->sequence_data = PF_NEW_HANDLE( sizeof(SequenceData) );
+
+ seq_data = (SequenceData *)PF_LOCK_HANDLE(out_data->sequence_data);
+
+ seq_data->path[0] = '\0';
+ seq_data->relative_path[0] = '\0';
+ }
+ else // reset pre-existing sequence data
+ {
+ if( PF_GET_HANDLE_SIZE(in_data->sequence_data) != sizeof(SequenceData) )
+ {
+ PF_RESIZE_HANDLE(sizeof(SequenceData), &in_data->sequence_data);
+ }
+
+ seq_data = (SequenceData *)PF_LOCK_HANDLE(in_data->sequence_data);
+ }
+
+
+ seq_data->status = STATUS_UNKNOWN;
+ seq_data->gpu_err = GPU_ERR_NONE;
+ seq_data->prem_status = PREMIERE_UNKNOWN;
+ seq_data->context = NULL;
+
+
+ PF_UNLOCK_HANDLE(in_data->sequence_data);
+
+ return err;
+}
+
+
+static PF_Err SequenceSetdown(
+ PF_InData *in_data,
+ PF_OutData *out_data,
+ PF_ParamDef *params[],
+ PF_LayerDef *output )
+{
+ PF_Err err = PF_Err_NONE;
+
+ if(in_data->sequence_data)
+ {
+ SequenceData *seq_data = (SequenceData *)PF_LOCK_HANDLE(out_data->sequence_data);
+
+ if(seq_data->context)
+ {
+ delete seq_data->context;
+
+ seq_data->status = STATUS_UNKNOWN;
+ seq_data->gpu_err = GPU_ERR_NONE;
+ seq_data->prem_status = PREMIERE_UNKNOWN;
+ seq_data->context = NULL;
+ }
+
+ PF_DISPOSE_HANDLE(in_data->sequence_data);
+ }
+
+ return err;
+}
+
+
+static PF_Err SequenceFlatten(
+ PF_InData *in_data,
+ PF_OutData *out_data,
+ PF_ParamDef *params[],
+ PF_LayerDef *output )
+{
+ PF_Err err = PF_Err_NONE;
+
+ if(in_data->sequence_data)
+ {
+ SequenceData *seq_data = (SequenceData *)PF_LOCK_HANDLE(in_data->sequence_data);
+
+ if(seq_data->context)
+ {
+ delete seq_data->context;
+
+ seq_data->status = STATUS_UNKNOWN;
+ seq_data->gpu_err = GPU_ERR_NONE;
+ seq_data->prem_status = PREMIERE_UNKNOWN;
+ seq_data->context = NULL;
+ }
+
+ PF_UNLOCK_HANDLE(in_data->sequence_data);
+ }
+
+ return err;
+}
+
+
+
+static PF_Boolean IsEmptyRect(const PF_LRect *r){
+ return (r->left >= r->right) || (r->top >= r->bottom);
+}
+
+#ifndef mmin
+ #define mmin(a,b) ((a) < (b) ? (a) : (b))
+ #define mmax(a,b) ((a) > (b) ? (a) : (b))
+#endif
+
+
+static void UnionLRect(const PF_LRect *src, PF_LRect *dst)
+{
+ if (IsEmptyRect(dst)) {
+ *dst = *src;
+ } else if (!IsEmptyRect(src)) {
+ dst->left = mmin(dst->left, src->left);
+ dst->top = mmin(dst->top, src->top);
+ dst->right = mmax(dst->right, src->right);
+ dst->bottom = mmax(dst->bottom, src->bottom);
+ }
+}
+
+
+static PF_Err PreRender(
+ PF_InData *in_data,
+ PF_OutData *out_data,
+ PF_PreRenderExtra *extra)
+{
+ PF_Err err = PF_Err_NONE;
+ PF_RenderRequest req = extra->input->output_request;
+ PF_CheckoutResult in_result;
+
+ req.preserve_rgb_of_zero_alpha = TRUE;
+
+ ERR(extra->cb->checkout_layer( in_data->effect_ref,
+ OCIO_INPUT,
+ OCIO_INPUT,
+ &req,
+ in_data->current_time,
+ in_data->time_step,
+ in_data->time_scale,
+ &in_result));
+
+
+ UnionLRect(&in_result.result_rect, &extra->output->result_rect);
+ UnionLRect(&in_result.max_result_rect, &extra->output->max_result_rect);
+
+ return err;
+}
+
+#pragma mark-
+
+
+template <typename InFormat, typename OutFormat>
+static inline OutFormat Convert(InFormat in);
+
+template <>
+static inline float Convert<A_u_char, float>(A_u_char in)
+{
+ return (float)in / (float)PF_MAX_CHAN8;
+}
+
+template <>
+static inline float Convert<A_u_short, float>(A_u_short in)
+{
+ return (float)in / (float)PF_MAX_CHAN16;
+}
+
+template <>
+static inline float Convert<float, float>(float in)
+{
+ return in;
+}
+
+static inline float Clamp(float in)
+{
+ return (in > 1.f ? 1.f : in < 0.f ? 0.f : in);
+}
+
+template <>
+static inline A_u_char Convert<float, A_u_char>(float in)
+{
+ return ( Clamp(in) * (float)PF_MAX_CHAN8 ) + 0.5f;
+}
+
+template <>
+static inline A_u_short Convert<float, A_u_short>(float in)
+{
+ return ( Clamp(in) * (float)PF_MAX_CHAN16 ) + 0.5f;
+}
+
+
+
+typedef struct {
+ PF_InData *in_data;
+ void *in_buffer;
+ A_long in_rowbytes;
+ void *out_buffer;
+ A_long out_rowbytes;
+ int width;
+} IterateData;
+
+template <typename InFormat, typename OutFormat>
+static PF_Err CopyWorld_Iterate(
+ void *refconPV,
+ A_long thread_indexL,
+ A_long i,
+ A_long iterationsL)
+{
+ PF_Err err = PF_Err_NONE;
+
+ IterateData *i_data = (IterateData *)refconPV;
+ PF_InData *in_data = i_data->in_data;
+
+ InFormat *in_pix = (InFormat *)((char *)i_data->in_buffer + (i * i_data->in_rowbytes));
+ OutFormat *out_pix = (OutFormat *)((char *)i_data->out_buffer + (i * i_data->out_rowbytes));
+
+#ifdef NDEBUG
+ if(thread_indexL == 0)
+ err = PF_ABORT(in_data);
+#endif
+
+ for(int x=0; x < i_data->width; x++)
+ {
+ *out_pix++ = Convert<InFormat, OutFormat>( *in_pix++ );
+ }
+
+ return err;
+}
+
+
+typedef struct {
+ PF_InData *in_data;
+ void *in_buffer;
+ A_long in_rowbytes;
+ int width;
+} SwapData;
+
+static PF_Err Swap_Iterate(
+ void *refconPV,
+ A_long thread_indexL,
+ A_long i,
+ A_long iterationsL)
+{
+ PF_Err err = PF_Err_NONE;
+
+ SwapData *i_data = (SwapData *)refconPV;
+ PF_InData *in_data = i_data->in_data;
+
+ PF_PixelFloat *pix = (PF_PixelFloat *)((char *)i_data->in_buffer + (i * i_data->in_rowbytes));
+
+#ifdef NDEBUG
+ if(thread_indexL == 0)
+ err = PF_ABORT(in_data);
+#endif
+
+ for(int x=0; x < i_data->width; x++)
+ {
+ float temp;
+
+ // BGRA -> ARGB
+ temp = pix->alpha; // BGRA temp B
+ pix->alpha = pix->blue; // AGRA temp B
+ pix->blue = temp; // AGRB temp B
+ temp = pix->red; // AGRB temp G
+ pix->red = pix->green; // ARRB temp G
+ pix->green = temp; // ARGB temp G
+
+ pix++;
+ }
+
+ return err;
+}
+
+
+typedef struct {
+ PF_InData *in_data;
+ void *buffer;
+ A_long rowbytes;
+ int width;
+ OpenColorIO_AE_Context *context;
+} ProcessData;
+
+static PF_Err Process_Iterate(
+ void *refconPV,
+ A_long thread_indexL,
+ A_long i,
+ A_long iterationsL)
+{
+ PF_Err err = PF_Err_NONE;
+
+ ProcessData *i_data = (ProcessData *)refconPV;
+ PF_InData *in_data = i_data->in_data;
+
+ PF_PixelFloat *pix = (PF_PixelFloat *)((char *)i_data->buffer + (i * i_data->rowbytes));
+
+#ifdef NDEBUG
+ if(thread_indexL == 0)
+ err = PF_ABORT(in_data);
+#endif
+
+ try
+ {
+ float *rOut = &pix->red;
+
+ OCIO::PackedImageDesc img(rOut, i_data->width, 1, 4);
+
+ i_data->context->processor()->apply(img);
+ }
+ catch(...)
+ {
+ err = PF_Err_INTERNAL_STRUCT_DAMAGED;
+ }
+
+
+ return err;
+}
+
+
+// two functions below to get Premiere to run my functions multi-threaded
+// because they couldn't bother to give me PF_Iterate8Suite1->iterate_generic
+
+typedef PF_Err (*GenericIterator)(void *refconPV,
+ A_long thread_indexL,
+ A_long i,
+ A_long iterationsL);
+
+typedef struct {
+ PF_InData *in_data;
+ GenericIterator fn_func;
+ void *refconPV;
+ A_long height;
+} FakeData;
+
+static PF_Err MyFakeIterator(
+ void *refcon,
+ A_long x,
+ A_long y,
+ PF_Pixel *in,
+ PF_Pixel *out)
+{
+ PF_Err err = PF_Err_NONE;
+
+ FakeData *i_data = (FakeData *)refcon;
+ PF_InData *in_data = i_data->in_data;
+
+ err = i_data->fn_func(i_data->refconPV, 1, y, i_data->height);
+
+ return err;
+}
+
+typedef PF_Err (*GenericIterateFunc)(
+ A_long iterationsL,
+ void *refconPV,
+ GenericIterator fn_func);
+
+static PF_Err MyGenericIterateFunc(
+ A_long iterationsL,
+ void *refconPV,
+ GenericIterator fn_func)
+{
+ PF_Err err = PF_Err_NONE;
+
+ PF_InData **in_dataH = (PF_InData **)refconPV; // always put PF_InData first
+ PF_InData *in_data = *in_dataH;
+
+ PF_Iterate8Suite1 *i8sP = NULL;
+ in_data->pica_basicP->AcquireSuite(kPFIterate8Suite, kPFIterate8SuiteVersion1, (const void **)&i8sP);
+
+ if(i8sP && i8sP->iterate)
+ {
+ PF_EffectWorld fake_world;
+ PF_NEW_WORLD(1, iterationsL, PF_NewWorldFlag_NONE, &fake_world);
+
+
+ FakeData i_data = { in_data, fn_func, refconPV, iterationsL };
+
+ err = i8sP->iterate(in_data, 0, iterationsL, &fake_world, NULL,
+ (void *)&i_data, MyFakeIterator, &fake_world);
+
+
+ PF_DISPOSE_WORLD(&fake_world);
+
+ in_data->pica_basicP->ReleaseSuite(kPFIterate8Suite, kPFIterate8SuiteVersion1);
+ }
+ else
+ {
+ for(int i=0; i < iterationsL && !err; i++)
+ {
+ err = fn_func(refconPV, 0, i, iterationsL);
+ }
+ }
+
+ return err;
+}
+
+
+static PF_Err DoRender(
+ PF_InData *in_data,
+ PF_EffectWorld *input,
+ PF_ParamDef *OCIO_data,
+ PF_ParamDef *OCIO_gpu,
+ PF_OutData *out_data,
+ PF_EffectWorld *output)
+{
+ PF_Err err = PF_Err_NONE;
+
+ AEGP_SuiteHandler suites(in_data->pica_basicP);
+
+ PF_PixelFormatSuite1 *pfS = NULL;
+ PF_WorldSuite2 *wsP = NULL;
+
+ err = in_data->pica_basicP->AcquireSuite(kPFPixelFormatSuite, kPFPixelFormatSuiteVersion1, (const void **)&pfS);
+ err = in_data->pica_basicP->AcquireSuite(kPFWorldSuite, kPFWorldSuiteVersion2, (const void **)&wsP);
+
+ if(!err)
+ {
+ ArbitraryData *arb_data = (ArbitraryData *)PF_LOCK_HANDLE(OCIO_data->u.arb_d.value);
+ SequenceData *seq_data = (SequenceData *)PF_LOCK_HANDLE(in_data->sequence_data);
+
+ try
+ {
+ seq_data->status = STATUS_OK;
+
+ std::string dir = GetProjectDir(in_data);
+
+ // must always verify that our context lines up with the parameters
+ // things like undo can change them without notice
+ if(seq_data->context != NULL)
+ {
+ bool verified = seq_data->context->Verify(arb_data, dir);
+
+ if(!verified)
+ {
+ delete seq_data->context;
+
+ seq_data->status = STATUS_UNKNOWN;
+ seq_data->context = NULL;
+ }
+ }
+
+
+ if(arb_data->action == OCIO_ACTION_NONE)
+ {
+ seq_data->status = STATUS_NO_FILE;
+ }
+ else if(seq_data->context == NULL)
+ {
+ seq_data->source = arb_data->source;
+
+ if(arb_data->source == OCIO_SOURCE_ENVIRONMENT)
+ {
+ char *file = std::getenv("OCIO");
+
+ if(file == NULL)
+ seq_data->status = STATUS_FILE_MISSING;
+ }
+ else if(arb_data->source == OCIO_SOURCE_STANDARD)
+ {
+ std::string path = GetStdConfigPath(arb_data->path);
+
+ if( path.empty() )
+ {
+ seq_data->status = STATUS_FILE_MISSING;
+ }
+ else
+ {
+ strncpy(seq_data->path, arb_data->path, ARB_PATH_LEN);
+ strncpy(seq_data->relative_path, arb_data->relative_path, ARB_PATH_LEN);
+ }
+ }
+ else if(arb_data->source == OCIO_SOURCE_CUSTOM)
+ {
+ Path absolute_path(arb_data->path, dir);
+ Path relative_path(arb_data->relative_path, dir);
+ Path seq_absolute_path(seq_data->path, dir);
+ Path seq_relative_path(seq_data->relative_path, dir);
+
+ if( absolute_path.exists() )
+ {
+ seq_data->status = STATUS_USING_ABSOLUTE;
+
+ strncpy(seq_data->path, absolute_path.full_path().c_str(), ARB_PATH_LEN);
+ strncpy(seq_data->relative_path, absolute_path.relative_path(false).c_str(), ARB_PATH_LEN);
+ }
+ else if( relative_path.exists() )
+ {
+ seq_data->status = STATUS_USING_RELATIVE;
+
+ strncpy(seq_data->path, relative_path.full_path().c_str(), ARB_PATH_LEN);
+ strncpy(seq_data->relative_path, relative_path.relative_path(false).c_str(), ARB_PATH_LEN);
+ }
+ else if( seq_absolute_path.exists() )
+ {
+ // In some cases, we may have a good path in sequence options but not in
+ // the arbitrary parameter. An alert will not be provided because it is the
+ // sequence options that get checked. Therefore, we have to use the sequence
+ // options as a last resort. We copy the path back to arb data, but the change
+ // should not stick.
+ seq_data->status = STATUS_USING_ABSOLUTE;
+
+ strncpy(arb_data->path, seq_absolute_path.full_path().c_str(), ARB_PATH_LEN);
+ strncpy(arb_data->relative_path, seq_absolute_path.relative_path(false).c_str(), ARB_PATH_LEN);
+ }
+ else if( seq_relative_path.exists() )
+ {
+ seq_data->status = STATUS_USING_RELATIVE;
+
+ strncpy(arb_data->path, seq_relative_path.full_path().c_str(), ARB_PATH_LEN);
+ strncpy(arb_data->relative_path, seq_relative_path.relative_path(false).c_str(), ARB_PATH_LEN);
+ }
+ else
+ seq_data->status = STATUS_FILE_MISSING;
+ }
+
+
+ if(seq_data->status != STATUS_FILE_MISSING)
+ {
+ seq_data->context = new OpenColorIO_AE_Context(arb_data, dir);
+ }
+ }
+ }
+ catch(...)
+ {
+ seq_data->status = STATUS_OCIO_ERROR;
+ }
+
+
+ if(seq_data->status == STATUS_FILE_MISSING || seq_data->status == STATUS_OCIO_ERROR)
+ {
+ err = PF_Err_INTERNAL_STRUCT_DAMAGED;
+ }
+
+
+ if(!err)
+ {
+ if(seq_data->context == NULL || seq_data->context->processor()->isNoOp())
+ {
+ err = PF_COPY(input, output, NULL, NULL);
+ }
+ else
+ {
+ GenericIterateFunc iterate_generic = suites.Iterate8Suite1()->iterate_generic;
+
+ if(iterate_generic == NULL)
+ iterate_generic = MyGenericIterateFunc; // thanks a lot, Premiere
+
+ // OpenColorIO only does float worlds
+ // might have to create one
+ PF_EffectWorld *float_world = NULL;
+
+ PF_EffectWorld temp_world_data;
+ PF_EffectWorld *temp_world = NULL;
+ PF_Handle temp_worldH = NULL;
+
+
+ PF_PixelFormat format;
+ wsP->PF_GetPixelFormat(output, &format);
+
+ if(in_data->appl_id == 'PrMr' && pfS)
+ {
+ // the regular world suite function will give a bogus value for Premiere
+ pfS->GetPixelFormat(output, (PrPixelFormat *)&format);
+
+ seq_data->prem_status = (format == PrPixelFormat_BGRA_4444_32f_Linear ?
+ PREMIERE_LINEAR : PREMIERE_NON_LINEAR);
+ }
+
+
+ A_Boolean use_gpu = OCIO_gpu->u.bd.value;
+ seq_data->gpu_err = GPU_ERR_NONE;
+ A_long non_padded_rowbytes = sizeof(PF_PixelFloat) * output->width;
+
+
+ if(format == PF_PixelFormat_ARGB128 &&
+ (!use_gpu || output->rowbytes == non_padded_rowbytes)) // GPU doesn't do padding
+ {
+ err = PF_COPY(input, output, NULL, NULL);
+
+ float_world = output;
+ }
+ else
+ {
+ temp_worldH = PF_NEW_HANDLE(non_padded_rowbytes * (output->height + 1)); // little extra because we go over by a channel
+
+ if(temp_worldH)
+ {
+ temp_world_data.data = (PF_PixelPtr)PF_LOCK_HANDLE(temp_worldH);
+
+ temp_world_data.width = output->width;
+ temp_world_data.height = output->height;
+ temp_world_data.rowbytes = non_padded_rowbytes;
+
+ float_world = temp_world = &temp_world_data;
+
+ // convert to new temp float world
+ IterateData i_data = { in_data, input->data, input->rowbytes,
+ float_world->data, float_world->rowbytes,
+ float_world->width * 4 };
+
+ if(format == PF_PixelFormat_ARGB32 || format == PrPixelFormat_BGRA_4444_8u)
+ {
+ err = iterate_generic(float_world->height, &i_data,
+ CopyWorld_Iterate<A_u_char, float>);
+ }
+ else if(format == PF_PixelFormat_ARGB64)
+ {
+ err = iterate_generic(float_world->height, &i_data,
+ CopyWorld_Iterate<A_u_short, float>);
+ }
+ else if(format == PF_PixelFormat_ARGB128 ||
+ format == PrPixelFormat_BGRA_4444_32f ||
+ format == PrPixelFormat_BGRA_4444_32f_Linear)
+ {
+ err = iterate_generic(float_world->height, &i_data,
+ CopyWorld_Iterate<float, float>);
+ }
+
+ // switch BGRA to ARGB for premiere
+ if(!err &&
+ (format == PrPixelFormat_BGRA_4444_8u ||
+ format == PrPixelFormat_BGRA_4444_32f_Linear ||
+ format == PrPixelFormat_BGRA_4444_32f))
+ {
+ SwapData s_data = { in_data, float_world->data,
+ float_world->rowbytes, float_world->width };
+
+ err = iterate_generic(float_world->height, &s_data,
+ Swap_Iterate);
+ }
+ }
+ else
+ err = PF_Err_OUT_OF_MEMORY;
+ }
+
+
+ if(!err)
+ {
+ bool gpu_rendered = false;
+
+ // OpenColorIO processing
+ if(use_gpu)
+ {
+ if( HaveOpenGL() )
+ {
+ gpu_rendered = seq_data->context->ProcessWorldGL(float_world);
+
+ if(!gpu_rendered)
+ seq_data->gpu_err = GPU_ERR_RENDER_ERR;
+ }
+ else
+ seq_data->gpu_err = GPU_ERR_INSUFFICIENT;
+ }
+
+ if(!gpu_rendered)
+ {
+ ProcessData p_data = { in_data,
+ float_world->data,
+ float_world->rowbytes,
+ float_world->width,
+ seq_data->context };
+
+ err = iterate_generic(float_world->height, &p_data, Process_Iterate);
+ }
+ }
+
+
+ // copy back to non-float world and dispose
+ if(temp_world)
+ {
+ if(!err &&
+ (format == PrPixelFormat_BGRA_4444_8u ||
+ format == PrPixelFormat_BGRA_4444_32f_Linear ||
+ format == PrPixelFormat_BGRA_4444_32f))
+ {
+ SwapData s_data = { in_data, float_world->data,
+ float_world->rowbytes, float_world->width };
+
+ err = iterate_generic(float_world->height, &s_data, Swap_Iterate);
+ }
+
+ if(!err)
+ {
+ IterateData i_data = { in_data, float_world->data,
+ float_world->rowbytes, output->data,
+ output->rowbytes, output->width * 4 };
+
+ if(format == PF_PixelFormat_ARGB32 || format == PrPixelFormat_BGRA_4444_8u)
+ {
+ err = iterate_generic(output->height, &i_data,
+ CopyWorld_Iterate<float, A_u_char>);
+ }
+ else if(format == PF_PixelFormat_ARGB64)
+ {
+ err = iterate_generic(output->height, &i_data,
+ CopyWorld_Iterate<float, A_u_short>);
+ }
+ else if(format == PF_PixelFormat_ARGB128 ||
+ format == PrPixelFormat_BGRA_4444_32f ||
+ format == PrPixelFormat_BGRA_4444_32f_Linear)
+ {
+ err = iterate_generic(output->height, &i_data,
+ CopyWorld_Iterate<float, float>);
+ }
+
+ }
+
+ PF_DISPOSE_HANDLE(temp_worldH);
+ }
+
+
+ PF_UNLOCK_HANDLE(OCIO_data->u.arb_d.value);
+ PF_UNLOCK_HANDLE(in_data->sequence_data);
+
+
+ if(seq_data->gpu_err == GPU_ERR_INSUFFICIENT)
+ {
+ suites.AdvAppSuite2()->PF_AppendInfoText("OpenColorIO: GPU Insufficient");
+ }
+ else if(seq_data->gpu_err == GPU_ERR_RENDER_ERR)
+ {
+ suites.AdvAppSuite2()->PF_AppendInfoText("OpenColorIO: GPU Render Error");
+ }
+ }
+ }
+ }
+
+ if(pfS)
+ in_data->pica_basicP->ReleaseSuite(kPFPixelFormatSuite, kPFPixelFormatSuiteVersion1);
+
+ if(wsP)
+ in_data->pica_basicP->ReleaseSuite(kPFWorldSuite, kPFWorldSuiteVersion2);
+
+
+
+ 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;
+
+ PF_EffectWorld *input, *output;
+
+ PF_ParamDef OCIO_data, OCIO_gpu;
+
+ // zero-out parameters
+ AEFX_CLR_STRUCT(OCIO_data);
+ AEFX_CLR_STRUCT(OCIO_gpu);
+
+
+ // checkout input & output buffers.
+ ERR( extra->cb->checkout_layer_pixels( in_data->effect_ref, OCIO_INPUT, &input) );
+ ERR( extra->cb->checkout_output( in_data->effect_ref, &output) );
+
+
+ // bail before param checkout
+ if(err)
+ return err;
+
+#define PF_CHECKOUT_PARAM_NOW( PARAM, DEST ) \
+ PF_CHECKOUT_PARAM( in_data, (PARAM), in_data->current_time,\
+ in_data->time_step, in_data->time_scale, DEST )
+
+ // checkout the required params
+ ERR( PF_CHECKOUT_PARAM_NOW( OCIO_DATA, &OCIO_data ) );
+ ERR( PF_CHECKOUT_PARAM_NOW( OCIO_GPU, &OCIO_gpu ) );
+
+ ERR(DoRender( in_data,
+ input,
+ &OCIO_data,
+ &OCIO_gpu,
+ out_data,
+ output));
+
+ // Always check in, no matter what the error condition!
+ ERR2( PF_CHECKIN_PARAM(in_data, &OCIO_data ) );
+ ERR2( PF_CHECKIN_PARAM(in_data, &OCIO_gpu ) );
+
+
+ return err;
+
+}
+
+
+static PF_Err Render(
+ PF_InData *in_data,
+ PF_OutData *out_data,
+ PF_ParamDef *params[],
+ PF_LayerDef *output )
+{
+ return DoRender(in_data,
+ &params[OCIO_INPUT]->u.ld,
+ params[OCIO_DATA],
+ params[OCIO_GPU],
+ out_data,
+ output);
+}
+
+
+static PF_Err GetExternalDependencies(
+ PF_InData *in_data,
+ PF_OutData *out_data,
+ PF_ExtDependenciesExtra *extra)
+
+{
+ PF_Err err = PF_Err_NONE;
+
+ SequenceData *seq_data = (SequenceData *)PF_LOCK_HANDLE(in_data->sequence_data);
+
+ if(seq_data == NULL)
+ return PF_Err_BAD_CALLBACK_PARAM;
+
+
+ std::string dependency;
+
+ if(seq_data->source == OCIO_SOURCE_ENVIRONMENT)
+ {
+ if(extra->check_type == PF_DepCheckType_ALL_DEPENDENCIES)
+ {
+ dependency = "$OCIO environment variable";
+ }
+ else if(extra->check_type == PF_DepCheckType_MISSING_DEPENDENCIES)
+ {
+ char *file = std::getenv("OCIO");
+
+ if(!file)
+ dependency = "$OCIO environment variable";
+ }
+ }
+ else if(seq_data->source == OCIO_SOURCE_STANDARD)
+ {
+ if(extra->check_type == PF_DepCheckType_ALL_DEPENDENCIES)
+ {
+ dependency = "OCIO configuration " + std::string(seq_data->path);
+ }
+ else if(extra->check_type == PF_DepCheckType_MISSING_DEPENDENCIES)
+ {
+ std::string path = GetStdConfigPath(seq_data->path);
+
+ if( path.empty() )
+ dependency = "OCIO configuration " + std::string(seq_data->path);
+ }
+ }
+ else if(seq_data->source == OCIO_SOURCE_CUSTOM && seq_data->path[0] != '\0')
+ {
+ std::string dir = GetProjectDir(in_data);
+
+ Path absolute_path(seq_data->path, "");
+ Path relative_path(seq_data->relative_path, dir);
+
+ if(extra->check_type == PF_DepCheckType_ALL_DEPENDENCIES)
+ {
+ if( !absolute_path.exists() && relative_path.exists() )
+ {
+ dependency = relative_path.full_path();
+ }
+ else
+ dependency = absolute_path.full_path();
+ }
+ else if(extra->check_type == PF_DepCheckType_MISSING_DEPENDENCIES &&
+ !absolute_path.exists() && !relative_path.exists() )
+ {
+ dependency = absolute_path.full_path();
+ }
+ }
+
+
+ if( !dependency.empty() )
+ {
+ extra->dependencies_strH = PF_NEW_HANDLE(sizeof(char) * (dependency.size() + 1));
+
+ char *p = (char *)PF_LOCK_HANDLE(extra->dependencies_strH);
+
+ strcpy(p, dependency.c_str());
+ }
+
+
+ PF_UNLOCK_HANDLE(in_data->sequence_data);
+
+ return err;
+}
+
+
+DllExport PF_Err PluginMain(
+ 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;
+
+ try {
+ 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,out_data,params,output);
+ break;
+ case PF_Cmd_PARAMS_SETUP:
+ err = ParamsSetup(in_data,out_data,params,output);
+ break;
+ case PF_Cmd_SEQUENCE_SETUP:
+ case PF_Cmd_SEQUENCE_RESETUP:
+ err = SequenceSetup(in_data, out_data, params, output);
+ break;
+ case PF_Cmd_SEQUENCE_FLATTEN:
+ err = SequenceFlatten(in_data, out_data, params, output);
+ break;
+ case PF_Cmd_SEQUENCE_SETDOWN:
+ err = SequenceSetdown(in_data, out_data, params, output);
+ break;
+ case PF_Cmd_SMART_PRE_RENDER:
+ err = PreRender(in_data, out_data, (PF_PreRenderExtra*)extra);
+ break;
+ case PF_Cmd_SMART_RENDER:
+ err = SmartRender(in_data, out_data, (PF_SmartRenderExtra*)extra);
+ break;
+ case PF_Cmd_RENDER:
+ err = Render(in_data, out_data, params, output);
+ break;
+ case PF_Cmd_EVENT:
+ err = HandleEvent(in_data, out_data, params, output, (PF_EventExtra *)extra);
+ break;
+ case PF_Cmd_ARBITRARY_CALLBACK:
+ err = HandleArbitrary(in_data, out_data, params, output, (PF_ArbParamsExtra *)extra);
+ break;
+ case PF_Cmd_GET_EXTERNAL_DEPENDENCIES:
+ err = GetExternalDependencies(in_data, out_data, (PF_ExtDependenciesExtra *)extra);
+ break;
+ }
+ }
+ catch(PF_Err &thrown_err) { err = thrown_err; }
+ catch(...) { err = PF_Err_INTERNAL_STRUCT_DAMAGED; }
+
+ return err;
+}
diff --git a/src/aftereffects/OpenColorIO_AE.h b/src/aftereffects/OpenColorIO_AE.h
new file mode 100755
index 0000000..98eb314
--- /dev/null
+++ b/src/aftereffects/OpenColorIO_AE.h
@@ -0,0 +1,227 @@
+/*
+Copyright (c) 2003-2012 Sony Pictures Imageworks Inc., et al.
+All Rights Reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are
+met:
+* Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in the
+ documentation and/or other materials provided with the distribution.
+* Neither the name of Sony Pictures Imageworks nor the names of its
+ contributors may be used to endorse or promote products derived from
+ this software without specific prior written permission.
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+
+#pragma once
+
+#ifndef _OPENCOLORIO_AE_H_
+#define _OPENCOLORIO_AE_H_
+
+
+//#define PF_DEEP_COLOR_AWARE 1 // do we really still need this?
+
+#include "AEConfig.h"
+#include "entry.h"
+#include "SPTypes.h"
+#include "PrSDKAESupport.h"
+#include "AE_Macros.h"
+#include "Param_Utils.h"
+#include "AE_Effect.h"
+#include "AE_EffectUI.h"
+#include "AE_EffectCB.h"
+
+
+#ifdef MSWindows
+ #include <Windows.h>
+#else
+ #ifndef __MACH__
+ #include "string.h"
+ #endif
+#endif
+
+
+// Versioning information
+#define MAJOR_VERSION 1
+#define MINOR_VERSION 0
+#define BUG_VERSION 0
+#define STAGE_VERSION PF_Stage_RELEASE
+#define BUILD_VERSION 0
+
+// Paramater constants
+enum {
+ OCIO_INPUT = 0,
+ OCIO_DATA,
+ OCIO_GPU,
+
+ OCIO_NUM_PARAMS
+};
+
+enum {
+ OCIO_DATA_ID = 1,
+ OCIO_GPU_ID
+};
+
+
+// Our Arbitrary Data struct
+
+#define CURRENT_ARB_VERSION 1
+#define ARB_PATH_LEN 255
+#define ARB_SPACE_LEN 63
+
+enum {
+ OCIO_ACTION_NONE = 0,
+ OCIO_ACTION_LUT,
+ OCIO_ACTION_CONVERT,
+ OCIO_ACTION_DISPLAY
+};
+typedef A_u_char OCIO_Action;
+
+enum {
+ OCIO_STORAGE_NONE = 0,
+ OCIO_STORAGE_ZIP_FILE
+};
+typedef A_u_char OCIO_Storage;
+
+enum {
+ OCIO_SOURCE_NONE = 0,
+ OCIO_SOURCE_ENVIRONMENT,
+ OCIO_SOURCE_STANDARD,
+ OCIO_SOURCE_CUSTOM
+};
+typedef A_u_char OCIO_Source;
+
+enum {
+ OCIO_INTERP_UNKNOWN = 0,
+ OCIO_INTERP_NEAREST = 1,
+ OCIO_INTERP_LINEAR = 2,
+ OCIO_INTERP_TETRAHEDRAL = 3,
+ OCIO_INTERP_BEST = 255
+};
+typedef A_u_char OCIO_Interp;
+
+typedef struct {
+ A_u_char version; // version of this data structure
+ OCIO_Action action;
+ A_Boolean invert; // only used for LUTs
+ OCIO_Storage storage; // storage not used...yet
+ A_u_long storage_size;
+ OCIO_Source source;
+ OCIO_Interp interpolation;
+ A_u_char reserved[54]; // 64 pre-path bytes
+ char path[ARB_PATH_LEN+1];
+ char relative_path[ARB_PATH_LEN+1];
+ char input[ARB_SPACE_LEN+1];
+ char output[ARB_SPACE_LEN+1];
+ char transform[ARB_SPACE_LEN+1];
+ char device[ARB_SPACE_LEN+1];
+ char look[ARB_SPACE_LEN+1]; // not used currently
+ A_u_char storage_buf[1];
+} ArbitraryData;
+
+
+#ifdef __cplusplus
+
+class OpenColorIO_AE_Context;
+
+enum {
+ STATUS_UNKNOWN = 0,
+ STATUS_OK,
+ STATUS_NO_FILE,
+ STATUS_USING_ABSOLUTE,
+ STATUS_USING_RELATIVE,
+ STATUS_FILE_MISSING,
+ STATUS_OCIO_ERROR
+};
+typedef A_u_char FileStatus;
+
+enum {
+ GPU_ERR_NONE = 0,
+ GPU_ERR_INSUFFICIENT,
+ GPU_ERR_RENDER_ERR
+};
+typedef A_u_char GPUErr;
+
+enum {
+ PREMIERE_UNKNOWN = 0,
+ PREMIERE_LINEAR,
+ PREMIERE_NON_LINEAR
+};
+typedef A_u_char PremiereStatus;
+
+typedef struct {
+ FileStatus status;
+ GPUErr gpu_err;
+ PremiereStatus prem_status;
+ OCIO_Source source;
+ OpenColorIO_AE_Context *context;
+ char path[ARB_PATH_LEN+1];
+ char relative_path[ARB_PATH_LEN+1];
+} SequenceData;
+
+#endif
+
+
+
+#define UI_CONTROL_HEIGHT 200
+#define UI_CONTROL_WIDTH 500
+
+
+#ifdef __cplusplus
+ extern "C" {
+#endif
+
+
+// Prototypes
+
+DllExport PF_Err PluginMain(
+ PF_Cmd cmd,
+ PF_InData *in_data,
+ PF_OutData *out_data,
+ PF_ParamDef *params[],
+ PF_LayerDef *output,
+ void *extra) ;
+
+
+PF_Err HandleEvent(
+ PF_InData *in_data,
+ PF_OutData *out_data,
+ PF_ParamDef *params[],
+ PF_LayerDef *output,
+ PF_EventExtra *extra );
+
+
+PF_Err ArbNewDefault( // needed by ParamSetup()
+ PF_InData *in_data,
+ PF_OutData *out_data,
+ void *refconPV,
+ PF_ArbitraryH *arbPH);
+
+PF_Err HandleArbitrary(
+ PF_InData *in_data,
+ PF_OutData *out_data,
+ PF_ParamDef *params[],
+ PF_LayerDef *output,
+ PF_ArbParamsExtra *extra);
+
+
+#ifdef __cplusplus
+ }
+#endif
+
+
+
+#endif // _OPENCOLORIO_AE_H_ \ No newline at end of file
diff --git a/src/aftereffects/OpenColorIO_AE_ArbData.cpp b/src/aftereffects/OpenColorIO_AE_ArbData.cpp
new file mode 100644
index 0000000..0e55541
--- /dev/null
+++ b/src/aftereffects/OpenColorIO_AE_ArbData.cpp
@@ -0,0 +1,408 @@
+/*
+Copyright (c) 2003-2012 Sony Pictures Imageworks Inc., et al.
+All Rights Reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are
+met:
+* Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in the
+ documentation and/or other materials provided with the distribution.
+* Neither the name of Sony Pictures Imageworks nor the names of its
+ contributors may be used to endorse or promote products derived from
+ this software without specific prior written permission.
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+
+
+#include "OpenColorIO_AE.h"
+
+#include "OpenColorIO_AE_Context.h"
+
+#include <assert.h>
+
+
+PF_Err ArbNewDefault(PF_InData *in_data, PF_OutData *out_data,
+ void *refconPV,
+ PF_ArbitraryH *arbPH)
+{
+ PF_Err err = PF_Err_NONE;
+
+ if(arbPH)
+ {
+ *arbPH = PF_NEW_HANDLE( sizeof(ArbitraryData) );
+
+ if(*arbPH)
+ {
+ ArbitraryData *arb_data = (ArbitraryData *)PF_LOCK_HANDLE(*arbPH);
+
+ // set up defaults
+ arb_data->version = CURRENT_ARB_VERSION;
+
+ arb_data->action = OCIO_ACTION_NONE;
+ arb_data->invert = FALSE;
+
+ arb_data->storage = OCIO_STORAGE_NONE;
+ arb_data->storage_size = 0;
+ arb_data->source = OCIO_SOURCE_NONE;
+ arb_data->interpolation = OCIO_INTERP_LINEAR;
+
+ arb_data->path[0] = '\0';
+ arb_data->relative_path[0] = '\0';
+
+ arb_data->input[0] = '\0';
+ arb_data->output[0] = '\0';
+ arb_data->transform[0] = '\0';
+ arb_data->device[0] = '\0';
+ arb_data->look[0] = '\0';
+
+
+ // set default with environment variable if it's set
+ char *file = std::getenv("OCIO");
+
+ if(file)
+ {
+ try
+ {
+ OpenColorIO_AE_Context context(file, OCIO_SOURCE_ENVIRONMENT);
+
+ strncpy(arb_data->path, file, ARB_PATH_LEN);
+
+ arb_data->action = context.getAction();
+ arb_data->source = OCIO_SOURCE_ENVIRONMENT;
+
+ if(arb_data->action != OCIO_ACTION_LUT)
+ {
+ strncpy(arb_data->input, context.getInput().c_str(), ARB_SPACE_LEN);
+ strncpy(arb_data->output, context.getOutput().c_str(), ARB_SPACE_LEN);
+ strncpy(arb_data->transform, context.getTransform().c_str(), ARB_SPACE_LEN);
+ strncpy(arb_data->device, context.getDevice().c_str(), ARB_SPACE_LEN);
+ }
+ }
+ catch(...) {}
+ }
+
+
+ PF_UNLOCK_HANDLE(*arbPH);
+ }
+ }
+
+ return err;
+}
+
+
+static PF_Err ArbDispose(PF_InData *in_data, PF_OutData *out_data,
+ void *refconPV,
+ PF_ArbitraryH arbH)
+{
+ if(arbH)
+ PF_DISPOSE_HANDLE(arbH);
+
+ return PF_Err_NONE;
+}
+
+
+static void CopyArbData(ArbitraryData *out_arb_data, ArbitraryData *in_arb_data)
+{
+ // copy contents
+ out_arb_data->version = in_arb_data->version;
+
+ out_arb_data->action = in_arb_data->action;
+
+ out_arb_data->invert = in_arb_data->invert;
+
+ out_arb_data->storage = in_arb_data->storage;
+ out_arb_data->storage_size = in_arb_data->storage_size;
+
+ out_arb_data->source = in_arb_data->source;
+
+ out_arb_data->interpolation = in_arb_data->interpolation;
+
+ strcpy(out_arb_data->path, in_arb_data->path);
+ strcpy(out_arb_data->relative_path, in_arb_data->relative_path);
+
+ strcpy(out_arb_data->input, in_arb_data->input);
+ strcpy(out_arb_data->output, in_arb_data->output);
+ strcpy(out_arb_data->transform, in_arb_data->transform);
+ strcpy(out_arb_data->device, in_arb_data->device);
+ strcpy(out_arb_data->look, in_arb_data->look);
+}
+
+
+static PF_Err ArbCopy(PF_InData *in_data, PF_OutData *out_data,
+ void *refconPV,
+ PF_ArbitraryH src_arbH,
+ PF_ArbitraryH *dst_arbPH)
+{
+ PF_Err err = PF_Err_NONE;
+
+ if(src_arbH && dst_arbPH)
+ {
+ // allocate using the creation function
+ err = ArbNewDefault(in_data, out_data, refconPV, dst_arbPH);
+
+ if(!err)
+ {
+ ArbitraryData *in_arb_data = (ArbitraryData *)PF_LOCK_HANDLE(src_arbH),
+ *out_arb_data = (ArbitraryData *)PF_LOCK_HANDLE(*dst_arbPH);
+
+ CopyArbData(out_arb_data, in_arb_data);
+
+ PF_UNLOCK_HANDLE(src_arbH);
+ PF_UNLOCK_HANDLE(*dst_arbPH);
+ }
+ }
+
+ return err;
+}
+
+
+static PF_Err ArbFlatSize(PF_InData *in_data, PF_OutData *out_data,
+ void *refconPV,
+ PF_ArbitraryH arbH,
+ A_u_long *flat_data_sizePLu)
+{
+ // flat is the same size as inflated
+ if(arbH)
+ *flat_data_sizePLu = PF_GET_HANDLE_SIZE(arbH);
+
+ return PF_Err_NONE;
+}
+
+
+static void SwapArbData(ArbitraryData *arb_data)
+{
+
+}
+
+
+static PF_Err ArbFlatten(PF_InData *in_data, PF_OutData *out_data,
+ void *refconPV,
+ PF_ArbitraryH arbH,
+ A_u_long buf_sizeLu,
+ void *flat_dataPV)
+{
+ PF_Err err = PF_Err_NONE;
+
+ if(arbH && flat_dataPV)
+ {
+ // they provide the buffer, we just move data
+ ArbitraryData *in_arb_data = (ArbitraryData *)PF_LOCK_HANDLE(arbH),
+ *out_arb_data = (ArbitraryData *)flat_dataPV;
+
+ assert(buf_sizeLu >= PF_GET_HANDLE_SIZE(arbH));
+
+ CopyArbData(out_arb_data, in_arb_data);
+
+ #ifdef AE_BIG_ENDIAN
+ // not that we're doing a PPC version of this...
+ SwapArbData(out_arb_data);
+ #endif
+
+ PF_UNLOCK_HANDLE(arbH);
+ }
+
+ return err;
+}
+
+
+static PF_Err ArbUnFlatten(PF_InData *in_data, PF_OutData *out_data,
+ void *refconPV,
+ A_u_long buf_sizeLu,
+ const void *flat_dataPV,
+ PF_ArbitraryH *arbPH)
+{
+ PF_Err err = PF_Err_NONE;
+
+ if(arbPH && flat_dataPV)
+ {
+ // they provide a flat buffer, we have to make the handle
+ err = ArbNewDefault(in_data, out_data, refconPV, arbPH);
+
+ if(!err && *arbPH)
+ {
+ ArbitraryData *in_arb_data = (ArbitraryData *)flat_dataPV,
+ *out_arb_data = (ArbitraryData *)PF_LOCK_HANDLE(*arbPH);
+
+ assert(buf_sizeLu <= PF_GET_HANDLE_SIZE(*arbPH));
+
+ CopyArbData(out_arb_data, in_arb_data);
+
+ #ifdef AE_BIG_ENDIAN
+ SwapArbData(out_arb_data);
+ #endif
+
+ PF_UNLOCK_HANDLE(*arbPH);
+ }
+ }
+
+ return err;
+}
+
+static PF_Err ArbInterpolate(PF_InData *in_data, PF_OutData *out_data,
+ void *refconPV,
+ PF_ArbitraryH left_arbH,
+ PF_ArbitraryH right_arbH,
+ PF_FpLong tF,
+ PF_ArbitraryH *interpPH)
+{
+ PF_Err err = PF_Err_NONE;
+
+ assert(FALSE); // we shouldn't be doing this
+
+ if(left_arbH && right_arbH && interpPH)
+ {
+ // allocate using our own func
+ err = ArbNewDefault(in_data, out_data, refconPV, interpPH);
+
+ if(!err && *interpPH)
+ {
+ // we're just going to copy the left_data
+ ArbitraryData *in_arb_data = (ArbitraryData *)PF_LOCK_HANDLE(left_arbH),
+ *out_arb_data = (ArbitraryData *)PF_LOCK_HANDLE(*interpPH);
+
+ CopyArbData(out_arb_data, in_arb_data);
+
+ PF_UNLOCK_HANDLE(left_arbH);
+ PF_UNLOCK_HANDLE(*interpPH);
+ }
+ }
+
+ return err;
+}
+
+
+static PF_Err ArbCompare(PF_InData *in_data, PF_OutData *out_data,
+ void *refconPV,
+ PF_ArbitraryH a_arbH,
+ PF_ArbitraryH b_arbH,
+ PF_ArbCompareResult *compareP)
+{
+ PF_Err err = PF_Err_NONE;
+
+ if(a_arbH && b_arbH)
+ {
+ ArbitraryData *a_data = (ArbitraryData *)PF_LOCK_HANDLE(a_arbH),
+ *b_data = (ArbitraryData *)PF_LOCK_HANDLE(b_arbH);
+
+
+ if( a_data->version == b_data->version &&
+ a_data->action == b_data->action &&
+ a_data->invert == b_data->invert &&
+ a_data->source == b_data->source &&
+ a_data->interpolation == b_data->interpolation &&
+ !strcmp(a_data->path, b_data->path) &&
+ !strcmp(a_data->input, b_data->input) &&
+ !strcmp(a_data->output, b_data->output) &&
+ !strcmp(a_data->transform, b_data->transform) &&
+ !strcmp(a_data->device, b_data->device) &&
+ !strcmp(a_data->look, b_data->look) )
+ {
+ *compareP = PF_ArbCompare_EQUAL;
+ }
+ else
+ {
+ *compareP = PF_ArbCompare_NOT_EQUAL;
+ }
+
+
+ PF_UNLOCK_HANDLE(a_arbH);
+ PF_UNLOCK_HANDLE(b_arbH);
+ }
+
+ return err;
+}
+
+
+PF_Err HandleArbitrary(
+ PF_InData *in_data,
+ PF_OutData *out_data,
+ PF_ParamDef *params[],
+ PF_LayerDef *output,
+ PF_ArbParamsExtra *extra)
+{
+ PF_Err err = PF_Err_NONE;
+
+ if(extra->id == OCIO_DATA_ID)
+ {
+ switch(extra->which_function)
+ {
+ case PF_Arbitrary_NEW_FUNC:
+ err = ArbNewDefault(in_data, out_data,
+ extra->u.new_func_params.refconPV,
+ extra->u.new_func_params.arbPH);
+ break;
+ case PF_Arbitrary_DISPOSE_FUNC:
+ err = ArbDispose(in_data, out_data,
+ extra->u.dispose_func_params.refconPV,
+ extra->u.dispose_func_params.arbH);
+ break;
+ case PF_Arbitrary_COPY_FUNC:
+ err = ArbCopy(in_data, out_data, extra->u.copy_func_params.refconPV,
+ extra->u.copy_func_params.src_arbH,
+ extra->u.copy_func_params.dst_arbPH);
+ break;
+ case PF_Arbitrary_FLAT_SIZE_FUNC:
+ err = ArbFlatSize(in_data, out_data,
+ extra->u.flat_size_func_params.refconPV,
+ extra->u.flat_size_func_params.arbH,
+ extra->u.flat_size_func_params.flat_data_sizePLu);
+ break;
+ case PF_Arbitrary_FLATTEN_FUNC:
+ err = ArbFlatten(in_data, out_data,
+ extra->u.flatten_func_params.refconPV,
+ extra->u.flatten_func_params.arbH,
+ extra->u.flatten_func_params.buf_sizeLu,
+ extra->u.flatten_func_params.flat_dataPV);
+ break;
+ case PF_Arbitrary_UNFLATTEN_FUNC:
+ err = ArbUnFlatten(in_data, out_data,
+ extra->u.unflatten_func_params.refconPV,
+ extra->u.unflatten_func_params.buf_sizeLu,
+ extra->u.unflatten_func_params.flat_dataPV,
+ extra->u.unflatten_func_params.arbPH);
+ break;
+ case PF_Arbitrary_INTERP_FUNC:
+ err = ArbInterpolate(in_data, out_data,
+ extra->u.interp_func_params.refconPV,
+ extra->u.interp_func_params.left_arbH,
+ extra->u.interp_func_params.right_arbH,
+ extra->u.interp_func_params.tF,
+ extra->u.interp_func_params.interpPH);
+ break;
+ case PF_Arbitrary_COMPARE_FUNC:
+ err = ArbCompare(in_data, out_data,
+ extra->u.compare_func_params.refconPV,
+ extra->u.compare_func_params.a_arbH,
+ extra->u.compare_func_params.b_arbH,
+ extra->u.compare_func_params.compareP);
+ break;
+ // these are necessary for copying and pasting keyframes
+ // for now, we better not be called to do this
+ case PF_Arbitrary_PRINT_SIZE_FUNC:
+ assert(FALSE);
+ break;
+ case PF_Arbitrary_PRINT_FUNC:
+ assert(FALSE);
+ break;
+ case PF_Arbitrary_SCAN_FUNC:
+ assert(FALSE);
+ break;
+ }
+ }
+
+
+ return err;
+}
diff --git a/src/aftereffects/OpenColorIO_AE_Context.cpp b/src/aftereffects/OpenColorIO_AE_Context.cpp
new file mode 100644
index 0000000..1da7ee8
--- /dev/null
+++ b/src/aftereffects/OpenColorIO_AE_Context.cpp
@@ -0,0 +1,1051 @@
+/*
+Copyright (c) 2003-2012 Sony Pictures Imageworks Inc., et al.
+All Rights Reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are
+met:
+* Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in the
+ documentation and/or other materials provided with the distribution.
+* Neither the name of Sony Pictures Imageworks nor the names of its
+ contributors may be used to endorse or promote products derived from
+ this software without specific prior written permission.
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+
+
+#include "OpenColorIO_AE_Context.h"
+
+#include <fstream>
+#include <map>
+#include <sstream>
+
+#include "ocioicc.h"
+
+#include "OpenColorIO_AE_Dialogs.h"
+
+
+
+
+static const char mac_delimiter = '/';
+static const char win_delimiter = '\\';
+
+#ifdef WIN_ENV
+static const char delimiter = win_delimiter;
+#else
+static const char delimiter = mac_delimiter;
+#endif
+
+static const int LUT3D_EDGE_SIZE = 32;
+
+
+Path::Path(const std::string &path, const std::string &dir) :
+ _path(path),
+ _dir(dir)
+{
+
+}
+
+
+Path::Path(const Path &path)
+{
+ _path = path._path;
+ _dir = path._dir;
+}
+
+
+std::string Path::full_path() const
+{
+ if( is_relative(_path) && !_dir.empty() )
+ {
+ std::vector<std::string> path_vec = components( convert_delimiters(_path) );
+ std::vector<std::string> dir_vec = components(_dir);
+
+ int up_dirs = 0;
+ int down_dirs = 0;
+
+ while(down_dirs < path_vec.size() - 1 &&
+ (path_vec[down_dirs] == ".." || path_vec[down_dirs] == ".") )
+ {
+ down_dirs++;
+
+ if(path_vec[down_dirs] == "..")
+ up_dirs++;
+ }
+
+
+ std::string path;
+
+ if(path_type(_dir) == TYPE_MAC)
+ path += mac_delimiter;
+
+ for(int i=0; i < dir_vec.size() - up_dirs; i++)
+ {
+ path += dir_vec[i] + delimiter;
+ }
+
+ for(int i = down_dirs; i < path_vec.size() - 1; i++)
+ {
+ path += path_vec[i] + delimiter;
+ }
+
+ path += path_vec.back();
+
+ return path;
+ }
+ else
+ {
+ return _path;
+ }
+}
+
+
+std::string Path::relative_path(bool force) const
+{
+ if( is_relative(_path) || _dir.empty() || _path.empty() )
+ {
+ return _path;
+ }
+ else
+ {
+ std::vector<std::string> path_vec = components(_path);
+ std::vector<std::string> dir_vec = components(_dir);
+
+ int match_idx = 0;
+
+ while(match_idx < path_vec.size() &&
+ match_idx < dir_vec.size() &&
+ path_vec[match_idx] == dir_vec[match_idx])
+ match_idx++;
+
+ if(match_idx == 0)
+ {
+ // can't do relative path
+ if(force)
+ return _path;
+ else
+ return "";
+ }
+ else
+ {
+ std::string rel_path;
+
+ // is the file in a folder below or actually inside the dir?
+ if(match_idx == dir_vec.size())
+ {
+ rel_path += std::string(".") + delimiter;
+ }
+ else
+ {
+ for(int i = match_idx; i < dir_vec.size(); i++)
+ {
+ rel_path += std::string("..") + delimiter;
+ }
+ }
+
+ for(int i = match_idx; i < path_vec.size() - 1; i++)
+ {
+ rel_path += path_vec[i] + delimiter;
+ }
+
+ rel_path += path_vec.back();
+
+ return rel_path;
+ }
+ }
+}
+
+
+bool Path::exists() const
+{
+ std::string path = full_path();
+
+ if(path.empty())
+ return false;
+
+ std::ifstream f( path.c_str() );
+
+ return !!f;
+}
+
+
+Path::PathType Path::path_type(std::string path)
+{
+ if( path.empty() )
+ {
+ return TYPE_UNKNOWN;
+ }
+ if(path[0] == mac_delimiter)
+ {
+ return TYPE_MAC;
+ }
+ else if(path[1] == ':' && path[2] == win_delimiter)
+ {
+ return TYPE_WIN;
+ }
+ else if(path[0] == win_delimiter && path[1] == win_delimiter)
+ {
+ return TYPE_WIN;
+ }
+ else
+ {
+ size_t mac_pos = path.find(mac_delimiter);
+ size_t win_pos = path.find(win_delimiter);
+
+ if(mac_pos != std::string::npos && win_pos == std::string::npos)
+ {
+ return TYPE_MAC;
+ }
+ else if(mac_pos == std::string::npos && win_pos != std::string::npos)
+ {
+ return TYPE_WIN;
+ }
+ else if(mac_pos == std::string::npos && win_pos == std::string::npos)
+ {
+ return TYPE_UNKNOWN;
+ }
+ else // neither npos?
+ {
+ if(mac_pos < win_pos)
+ return TYPE_MAC;
+ else
+ return TYPE_WIN;
+ }
+ }
+}
+
+
+bool Path::is_relative(std::string path)
+{
+ Path::PathType type = path_type(path);
+
+ if(type == TYPE_MAC)
+ {
+ return (path[0] != mac_delimiter);
+ }
+ else if(type == TYPE_WIN)
+ {
+ return !( (path[1] == ':' && path[2] == win_delimiter) ||
+ (path[0] == win_delimiter && path[1] == win_delimiter) );
+ }
+ else
+ { // TYPE_UNKNOWN
+
+ // just a filename perhaps?
+ // should never have this: even a file in the same directory will be ./file.ocio
+ // we'll assume it's relative, but raise a stink during debugging
+ assert(type != TYPE_UNKNOWN);
+
+ return true;
+ }
+}
+
+
+std::string Path::convert_delimiters(std::string path)
+{
+#ifdef WIN_ENV
+ char search = mac_delimiter;
+ char replace = win_delimiter;
+#else
+ char search = win_delimiter;
+ char replace = mac_delimiter;
+#endif
+
+ for(int i=0; i < path.size(); i++)
+ {
+ if(path[i] == search)
+ path[i] = replace;
+ }
+
+ return path;
+}
+
+
+std::vector<std::string> Path::components(std::string path)
+{
+ std::vector<std::string> vec;
+
+ size_t pos = 0;
+ size_t len = path.size();
+
+ size_t start, finish;
+
+ while(path[pos] == delimiter && pos < len)
+ pos++;
+
+ while(pos < len)
+ {
+ start = pos;
+
+ while(path[pos] != delimiter && pos < len)
+ pos++;
+
+ finish = ((pos == len - 1) ? pos : pos - 1);
+
+ vec.push_back( path.substr(start, 1 + finish - start) );
+
+ while(path[pos] == delimiter && pos < len)
+ pos++;
+ }
+
+ return vec;
+}
+
+
+#pragma mark-
+
+
+OpenColorIO_AE_Context::OpenColorIO_AE_Context(const std::string &path, OCIO_Source source) :
+ _gl_init(false)
+{
+ _action = OCIO_ACTION_NONE;
+
+
+ _source = source;
+
+ if(_source == OCIO_SOURCE_ENVIRONMENT)
+ {
+ char *file = getenv("OCIO");
+
+ if(file)
+ {
+ _path = file;
+ }
+ else
+ throw OCIO::Exception("No $OCIO environment variable.");
+ }
+ else if(_source == OCIO_SOURCE_STANDARD)
+ {
+ _config_name = path;
+
+ _path = GetStdConfigPath(_config_name);
+
+ if( _path.empty() )
+ throw OCIO::Exception("Error getting config.");
+ }
+ else
+ {
+ _path = path;
+ }
+
+
+ if(!_path.empty())
+ {
+ std::string the_extension = _path.substr( _path.find_last_of('.') + 1 );
+
+ if(the_extension == "ocio")
+ {
+ _config = OCIO::Config::CreateFromFile( _path.c_str() );
+
+ _config->sanityCheck();
+
+ for(int i=0; i < _config->getNumColorSpaces(); ++i)
+ {
+ _inputs.push_back( _config->getColorSpaceNameByIndex(i) );
+ }
+
+
+ for(int i=0; i < _config->getNumDisplays(); ++i)
+ {
+ _devices.push_back( _config->getDisplay(i) );
+ }
+
+ const char * defaultDisplay = _config->getDefaultDisplay();
+ const char * defaultTransform = _config->getDefaultView(defaultDisplay);
+
+ for(int i=0; i < _config->getNumViews(defaultDisplay); ++i)
+ {
+ _transforms.push_back( _config->getView(defaultDisplay, i) );
+ }
+
+
+ OCIO::ConstColorSpaceRcPtr defaultInput = _config->getColorSpace(OCIO::ROLE_SCENE_LINEAR);
+
+ const char *defaultInputName = (defaultInput ? defaultInput->getName() : OCIO::ROLE_SCENE_LINEAR);
+
+
+ setupConvert(defaultInputName, defaultInputName);
+
+ _transform = defaultTransform;
+ _device = defaultDisplay;
+ }
+ else
+ {
+ _config = OCIO::Config::Create();
+
+ setupLUT(false, OCIO_INTERP_LINEAR);
+ }
+ }
+ else
+ throw OCIO::Exception("Got nothin");
+}
+
+
+OpenColorIO_AE_Context::OpenColorIO_AE_Context(const ArbitraryData *arb_data, const std::string &dir) :
+ _gl_init(false)
+{
+ _action = OCIO_ACTION_NONE;
+
+
+ _source = arb_data->source;
+
+ if(_source == OCIO_SOURCE_ENVIRONMENT)
+ {
+ char *file = getenv("OCIO");
+
+ if(file)
+ {
+ _path = file;
+ }
+ else
+ throw OCIO::Exception("No $OCIO environment variable.");
+ }
+ else if(_source == OCIO_SOURCE_STANDARD)
+ {
+ _config_name = arb_data->path;
+
+ _path = GetStdConfigPath(_config_name);
+
+ if( _path.empty() )
+ throw OCIO::Exception("Error getting config.");
+ }
+ else
+ {
+ Path absolute_path(arb_data->path, dir);
+ Path relative_path(arb_data->relative_path, dir);
+
+ if( absolute_path.exists() )
+ {
+ _path = absolute_path.full_path();
+ }
+ else
+ {
+ _path = relative_path.full_path();
+ }
+ }
+
+
+ if(!_path.empty())
+ {
+ std::string the_extension = _path.substr( _path.find_last_of('.') + 1 );
+
+ if(the_extension == "ocio")
+ {
+ _config = OCIO::Config::CreateFromFile( _path.c_str() );
+
+ _config->sanityCheck();
+
+ for(int i=0; i < _config->getNumColorSpaces(); ++i)
+ {
+ _inputs.push_back( _config->getColorSpaceNameByIndex(i) );
+ }
+
+
+ for(int i=0; i < _config->getNumDisplays(); ++i)
+ {
+ _devices.push_back( _config->getDisplay(i) );
+ }
+
+ const char * defaultDisplay = _config->getDefaultDisplay();
+ const char * defaultTransform = _config->getDefaultView(defaultDisplay);
+
+ for(int i=0; i < _config->getNumViews(defaultDisplay); ++i)
+ {
+ _transforms.push_back( _config->getView(defaultDisplay, i) );
+ }
+
+
+ if(arb_data->action == OCIO_ACTION_CONVERT)
+ {
+ setupConvert(arb_data->input, arb_data->output);
+
+ _transform = arb_data->transform;
+ _device = arb_data->device;
+ }
+ else
+ {
+ setupDisplay(arb_data->input, arb_data->transform, arb_data->device);
+
+ _output = arb_data->output;
+ }
+ }
+ else
+ {
+ _config = OCIO::Config::Create();
+
+ setupLUT(arb_data->invert, arb_data->interpolation);
+ }
+ }
+ else
+ throw OCIO::Exception("Got nothin");
+}
+
+
+OpenColorIO_AE_Context::~OpenColorIO_AE_Context()
+{
+ if(_gl_init)
+ {
+ glDeleteShader(_fragShader);
+ glDeleteProgram(_program);
+ glDeleteTextures(1, &_imageTexID);
+
+ if(_bufferWidth != 0 && _bufferHeight != 0)
+ glDeleteRenderbuffersEXT(1, &_renderBuffer);
+ }
+}
+
+
+bool OpenColorIO_AE_Context::Verify(const ArbitraryData *arb_data, const std::string &dir)
+{
+ if(_source != arb_data->source)
+ return false;
+
+ if(_source == OCIO_SOURCE_STANDARD)
+ {
+ if(_config_name != arb_data->path)
+ return false;
+ }
+ else if(_source == OCIO_SOURCE_CUSTOM)
+ {
+ // comparing the paths, cheking relative path only if necessary
+ if(_path != arb_data->path)
+ {
+ std::string rel_path(arb_data->relative_path);
+
+ if( !dir.empty() && !rel_path.empty() )
+ {
+ Path relative_path(rel_path, dir);
+
+ if( _path != relative_path.full_path() )
+ return false;
+ }
+ else
+ return false;
+ }
+ }
+
+ // we can switch between Convert and Display, but not LUT and non-LUT
+ if((arb_data->action == OCIO_ACTION_NONE) ||
+ (_action == OCIO_ACTION_LUT && arb_data->action != OCIO_ACTION_LUT) ||
+ (_action != OCIO_ACTION_LUT && arb_data->action == OCIO_ACTION_LUT) )
+ {
+ return false;
+ }
+
+ bool force_reset = (_action != arb_data->action);
+
+
+ // If the type and path are compatible, we can patch up
+ // differences here and return true.
+ // Returning false means the context will be deleted and rebuilt.
+ if(arb_data->action == OCIO_ACTION_LUT)
+ {
+ if(_invert != (bool)arb_data->invert ||
+ _interpolation != arb_data->interpolation ||
+ force_reset)
+ {
+ setupLUT(arb_data->invert, arb_data->interpolation);
+ }
+ }
+ else if(arb_data->action == OCIO_ACTION_CONVERT)
+ {
+ if(_input != arb_data->input ||
+ _output != arb_data->output ||
+ force_reset)
+ {
+ setupConvert(arb_data->input, arb_data->output);
+ }
+ }
+ else if(arb_data->action == OCIO_ACTION_DISPLAY)
+ {
+ if(_input != arb_data->input ||
+ _transform != arb_data->transform ||
+ _device != arb_data->device ||
+ force_reset)
+ {
+ setupDisplay(arb_data->input, arb_data->transform, arb_data->device);
+ }
+ }
+ else
+ throw OCIO::Exception("Bad OCIO type");
+
+
+ return true;
+}
+
+
+void OpenColorIO_AE_Context::setupConvert(const char *input, const char *output)
+{
+ OCIO::ColorSpaceTransformRcPtr transform = OCIO::ColorSpaceTransform::Create();
+
+ transform->setSrc(input);
+ transform->setDst(output);
+ transform->setDirection(OCIO::TRANSFORM_DIR_FORWARD);
+
+ _input = input;
+ _output = output;
+
+ _processor = _config->getProcessor(transform);
+
+ _action = OCIO_ACTION_CONVERT;
+
+ UpdateOCIOGLState();
+}
+
+
+void OpenColorIO_AE_Context::setupDisplay(const char *input, const char *xform, const char *device)
+{
+ OCIO::DisplayTransformRcPtr transform = OCIO::DisplayTransform::Create();
+
+ transform->setInputColorSpaceName(input);
+ transform->setView(xform);
+ transform->setDisplay(device);
+
+ _input = input;
+ _transform = xform;
+ _device = device;
+
+
+ _processor = _config->getProcessor(transform);
+
+ _action = OCIO_ACTION_DISPLAY;
+
+ UpdateOCIOGLState();
+}
+
+
+void OpenColorIO_AE_Context::setupLUT(bool invert, OCIO_Interp interpolation)
+{
+ OCIO::FileTransformRcPtr transform = OCIO::FileTransform::Create();
+
+ if(interpolation != OCIO_INTERP_NEAREST && interpolation != OCIO_INTERP_LINEAR &&
+ interpolation != OCIO_INTERP_TETRAHEDRAL && interpolation != OCIO_INTERP_BEST)
+ {
+ interpolation = OCIO_INTERP_LINEAR;
+ }
+
+ transform->setSrc( _path.c_str() );
+ transform->setInterpolation(static_cast<OCIO::Interpolation>(interpolation));
+ transform->setDirection(invert ? OCIO::TRANSFORM_DIR_INVERSE : OCIO::TRANSFORM_DIR_FORWARD);
+
+ _processor = _config->getProcessor(transform);
+
+ _invert = invert;
+ _interpolation = interpolation;
+
+ _action = OCIO_ACTION_LUT;
+
+ UpdateOCIOGLState();
+}
+
+
+bool OpenColorIO_AE_Context::ExportLUT(const std::string &path, const std::string &display_icc_path)
+{
+ std::string the_extension = path.substr( path.find_last_of('.') + 1 );
+
+ try{
+
+ if(the_extension == "icc")
+ {
+ int cubesize = 32;
+ int whitepointtemp = 6505;
+ std::string copyright = "OpenColorIO, Sony Imageworks";
+
+ // create a description tag from the filename
+ size_t filename_start = path.find_last_of(delimiter) + 1;
+ size_t filename_end = path.find_last_of('.') - 1;
+
+ std::string description = path.substr(path.find_last_of(delimiter) + 1,
+ 1 + filename_end - filename_start);
+
+ SaveICCProfileToFile(path, _processor, cubesize, whitepointtemp,
+ display_icc_path, description, copyright, false);
+ }
+ else
+ {
+ // this code lovingly pulled from ociobakelut
+
+ // need an extension->format map (yes, just did this one call up)
+ std::map<std::string, std::string> extensions;
+
+ for(int i=0; i < OCIO::Baker::getNumFormats(); ++i)
+ {
+ const char *extension = OCIO::Baker::getFormatExtensionByIndex(i);
+ const char *format = OCIO::Baker::getFormatNameByIndex(i);
+
+ extensions[ extension ] = format;
+ }
+
+ std::string format = extensions[ the_extension ];
+
+
+ OCIO::BakerRcPtr baker = OCIO::Baker::Create();
+
+ baker->setFormat(format.c_str());
+
+ if(_action == OCIO_ACTION_CONVERT)
+ {
+ baker->setConfig(_config);
+ baker->setInputSpace(_input.c_str());
+ baker->setTargetSpace(_output.c_str());
+
+ std::ofstream f(path.c_str());
+ baker->bake(f);
+ }
+ else if(_action == OCIO_ACTION_DISPLAY)
+ {
+ OCIO::ConfigRcPtr editableConfig = _config->createEditableCopy();
+
+ OCIO::ColorSpaceRcPtr inputColorSpace = OCIO::ColorSpace::Create();
+ std::string inputspace = "RawInput";
+ inputColorSpace->setName(inputspace.c_str());
+ editableConfig->addColorSpace(inputColorSpace);
+
+
+ OCIO::ColorSpaceRcPtr outputColorSpace = OCIO::ColorSpace::Create();
+ std::string outputspace = "ProcessedOutput";
+ outputColorSpace->setName(outputspace.c_str());
+
+ OCIO::DisplayTransformRcPtr transform = OCIO::DisplayTransform::Create();
+
+ transform->setInputColorSpaceName(_input.c_str());
+ transform->setView(_transform.c_str());
+ transform->setDisplay(_device.c_str());
+
+ outputColorSpace->setTransform(transform, OCIO::COLORSPACE_DIR_FROM_REFERENCE);
+
+ editableConfig->addColorSpace(outputColorSpace);
+
+
+ baker->setConfig(editableConfig);
+ baker->setInputSpace(inputspace.c_str());
+ baker->setTargetSpace(outputspace.c_str());
+
+ std::ofstream f(path.c_str());
+ baker->bake(f);
+ }
+ else if(_action == OCIO_ACTION_LUT)
+ {
+ OCIO::ConfigRcPtr editableConfig = OCIO::Config::Create();
+
+ OCIO::ColorSpaceRcPtr inputColorSpace = OCIO::ColorSpace::Create();
+ std::string inputspace = "RawInput";
+ inputColorSpace->setName(inputspace.c_str());
+ editableConfig->addColorSpace(inputColorSpace);
+
+
+ OCIO::ColorSpaceRcPtr outputColorSpace = OCIO::ColorSpace::Create();
+ std::string outputspace = "ProcessedOutput";
+ outputColorSpace->setName(outputspace.c_str());
+
+ OCIO::FileTransformRcPtr transform = OCIO::FileTransform::Create();
+
+ transform = OCIO::FileTransform::Create();
+ transform->setSrc(_path.c_str());
+ transform->setInterpolation(static_cast<OCIO::Interpolation>(_interpolation));
+ transform->setDirection(_invert ? OCIO::TRANSFORM_DIR_INVERSE : OCIO::TRANSFORM_DIR_FORWARD);
+
+ outputColorSpace->setTransform(transform, OCIO::COLORSPACE_DIR_FROM_REFERENCE);
+
+ editableConfig->addColorSpace(outputColorSpace);
+
+
+ baker->setConfig(editableConfig);
+ baker->setInputSpace(inputspace.c_str());
+ baker->setTargetSpace(outputspace.c_str());
+
+ std::ofstream f(path.c_str());
+ baker->bake(f);
+ }
+ }
+
+ }catch(...) { return false; }
+
+ return true;
+}
+
+
+void OpenColorIO_AE_Context::InitOCIOGL()
+{
+ if(!_gl_init)
+ {
+ SetPluginContext();
+
+ glGenTextures(1, &_imageTexID);
+ glGenTextures(1, &_lut3dTexID);
+
+ int num3Dentries = 3*LUT3D_EDGE_SIZE*LUT3D_EDGE_SIZE*LUT3D_EDGE_SIZE;
+ _lut3d.resize(num3Dentries);
+ memset(&_lut3d[0], 0, sizeof(float)*num3Dentries);
+
+ glActiveTexture(GL_TEXTURE1);
+ glBindTexture(GL_TEXTURE_3D, _lut3dTexID);
+ glTexParameteri(GL_TEXTURE_3D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
+ glTexParameteri(GL_TEXTURE_3D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
+ glTexParameteri(GL_TEXTURE_3D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
+ glTexParameteri(GL_TEXTURE_3D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
+ glTexParameteri(GL_TEXTURE_3D, GL_TEXTURE_WRAP_R, GL_CLAMP_TO_EDGE);
+ glTexImage3D(GL_TEXTURE_3D, 0, GL_RGBA32F_ARB,
+ LUT3D_EDGE_SIZE, LUT3D_EDGE_SIZE, LUT3D_EDGE_SIZE,
+ 0, GL_RGB,GL_FLOAT, &_lut3d[0]);
+
+ _fragShader = 0;
+ _program = 0;
+
+ _bufferWidth = _bufferHeight = 0;
+
+ _gl_init = true;
+
+ SetAEContext();
+ }
+}
+
+
+static const char * g_fragShaderText = ""
+"\n"
+"uniform sampler2D tex1;\n"
+"uniform sampler3D tex2;\n"
+"\n"
+"void main()\n"
+"{\n"
+" vec4 col = texture2D(tex1, gl_TexCoord[0].st);\n"
+" gl_FragColor = OCIODisplay(col, tex2);\n"
+"}\n";
+
+
+static GLuint CompileShaderText(GLenum shaderType, const char *text)
+{
+ GLuint shader;
+ GLint stat;
+
+ shader = glCreateShader(shaderType);
+ glShaderSource(shader, 1, (const GLchar **) &text, NULL);
+ glCompileShader(shader);
+ glGetShaderiv(shader, GL_COMPILE_STATUS, &stat);
+
+ if (!stat)
+ {
+ GLchar log[1000];
+ GLsizei len;
+ glGetShaderInfoLog(shader, 1000, &len, log);
+ return 0;
+ }
+
+ return shader;
+}
+
+
+static GLuint LinkShaders(GLuint fragShader)
+{
+ if (!fragShader) return 0;
+
+ GLuint program = glCreateProgram();
+
+ if (fragShader)
+ glAttachShader(program, fragShader);
+
+ glLinkProgram(program);
+
+ // check link
+ {
+ GLint stat;
+ glGetProgramiv(program, GL_LINK_STATUS, &stat);
+ if (!stat) {
+ GLchar log[1000];
+ GLsizei len;
+ glGetProgramInfoLog(program, 1000, &len, log);
+ //fprintf(stderr, "Shader link error:\n%s\n", log);
+ return 0;
+ }
+ }
+
+ return program;
+}
+
+
+void OpenColorIO_AE_Context::UpdateOCIOGLState()
+{
+ if(_gl_init)
+ {
+ SetPluginContext();
+
+ // Step 1: Create a GPU Shader Description
+ OCIO::GpuShaderDesc shaderDesc;
+ shaderDesc.setLanguage(OCIO::GPU_LANGUAGE_GLSL_1_0);
+ shaderDesc.setFunctionName("OCIODisplay");
+ shaderDesc.setLut3DEdgeLen(LUT3D_EDGE_SIZE);
+
+ // Step 2: Compute the 3D LUT
+ std::string lut3dCacheID = _processor->getGpuLut3DCacheID(shaderDesc);
+ if(lut3dCacheID != _lut3dcacheid)
+ {
+ _lut3dcacheid = lut3dCacheID;
+ _processor->getGpuLut3D(&_lut3d[0], shaderDesc);
+ }
+
+ // Step 3: Compute the Shader
+ std::string shaderCacheID = _processor->getGpuShaderTextCacheID(shaderDesc);
+ if(_program == 0 || shaderCacheID != _shadercacheid)
+ {
+ _shadercacheid = shaderCacheID;
+
+ std::ostringstream os;
+ os << _processor->getGpuShaderText(shaderDesc) << "\n";
+ os << g_fragShaderText;
+
+ if(_fragShader) glDeleteShader(_fragShader);
+ _fragShader = CompileShaderText(GL_FRAGMENT_SHADER, os.str().c_str());
+ if(_program) glDeleteProgram(_program);
+ _program = LinkShaders(_fragShader);
+ }
+
+ SetAEContext();
+ }
+}
+
+
+bool OpenColorIO_AE_Context::ProcessWorldGL(PF_EffectWorld *float_world)
+{
+ if(!_gl_init)
+ {
+ InitOCIOGL();
+ UpdateOCIOGLState();
+ }
+
+
+ if(_program == 0 || _fragShader == 0)
+ return false;
+
+
+ SetPluginContext();
+
+
+ GLint max;
+ glGetIntegerv(GL_MAX_TEXTURE_SIZE, &max);
+
+ if(max < float_world->width || max < float_world->height || GL_NO_ERROR != glGetError())
+ {
+ SetAEContext();
+ return false;
+ }
+
+
+ PF_PixelFloat *pix = (PF_PixelFloat *)float_world->data;
+ float *rgba_origin = &pix->red;
+
+
+ glActiveTexture(GL_TEXTURE0);
+ glBindTexture(GL_TEXTURE_2D, _imageTexID);
+ glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA32F_ARB, float_world->width, float_world->height, 0,
+ GL_RGBA, GL_FLOAT, rgba_origin);
+ glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
+ glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
+ glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP);
+ glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP);
+
+
+ glBindTexture(GL_TEXTURE_3D, _lut3dTexID);
+ glTexSubImage3D(GL_TEXTURE_3D, 0,
+ 0, 0, 0,
+ LUT3D_EDGE_SIZE, LUT3D_EDGE_SIZE, LUT3D_EDGE_SIZE,
+ GL_RGB, GL_FLOAT, &_lut3d[0]);
+
+
+ glUseProgram(_program);
+ glUniform1i(glGetUniformLocation(_program, "tex1"), 0);
+ glUniform1i(glGetUniformLocation(_program, "tex2"), 1);
+
+
+ if(GL_NO_ERROR != glGetError())
+ {
+ SetAEContext();
+ return false;
+ }
+
+
+ glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, GetFrameBuffer());
+
+ if(_bufferWidth != float_world->width || _bufferHeight != float_world->height)
+ {
+ if(_bufferWidth != 0 && _bufferHeight != 0)
+ glDeleteRenderbuffersEXT(1, &_renderBuffer);
+
+ _bufferWidth = float_world->width;
+ _bufferHeight = float_world->height;
+
+ glGenRenderbuffersEXT(1, &_renderBuffer);
+ glBindRenderbufferEXT(GL_RENDERBUFFER_EXT, _renderBuffer);
+ glRenderbufferStorageEXT(GL_RENDERBUFFER_EXT, GL_RGBA, _bufferWidth, _bufferHeight);
+
+ // attach renderbuffer to framebuffer
+ glFramebufferRenderbufferEXT(GL_FRAMEBUFFER_EXT, GL_COLOR_ATTACHMENT0_EXT,
+ GL_RENDERBUFFER_EXT, _renderBuffer);
+ }
+
+ if(GL_FRAMEBUFFER_COMPLETE_EXT != glCheckFramebufferStatusEXT(GL_FRAMEBUFFER_EXT))
+ {
+ SetAEContext();
+ return false;
+ }
+
+ glDrawBuffer(GL_COLOR_ATTACHMENT0_EXT);
+
+
+ glViewport(0, 0, float_world->width, float_world->height);
+ glMatrixMode(GL_PROJECTION);
+ glLoadIdentity();
+ glOrtho(0.0, float_world->width, 0.0, float_world->height, -100.0, 100.0);
+ glMatrixMode(GL_MODELVIEW);
+ glLoadIdentity();
+
+
+ glEnable(GL_TEXTURE_2D);
+ glClearColor(0.1f, 0.1f, 0.1f, 0.0f);
+ glClear(GL_COLOR_BUFFER_BIT);
+ glColor3f(1, 1, 1);
+
+ glPushMatrix();
+ glBegin(GL_QUADS);
+ glTexCoord2f(0.0f, 1.0f);
+ glVertex2f(0.0f, float_world->height);
+
+ glTexCoord2f(0.0f, 0.0f);
+ glVertex2f(0.0f, 0.0f);
+
+ glTexCoord2f(1.0f, 0.0f);
+ glVertex2f(float_world->width, 0.0f);
+
+ glTexCoord2f(1.0f, 1.0f);
+ glVertex2f(float_world->width, float_world->height);
+
+ glEnd();
+ glPopMatrix();
+
+ glDisable(GL_TEXTURE_2D);
+
+
+ glReadBuffer(GL_COLOR_ATTACHMENT0_EXT);
+ glReadPixels(0, 0, float_world->width, float_world->height,
+ GL_RGBA, GL_FLOAT, rgba_origin);
+
+
+ glFinish();
+
+
+ SetAEContext();
+
+ return true;
+}
diff --git a/src/aftereffects/OpenColorIO_AE_Context.h b/src/aftereffects/OpenColorIO_AE_Context.h
new file mode 100644
index 0000000..8a3bf42
--- /dev/null
+++ b/src/aftereffects/OpenColorIO_AE_Context.h
@@ -0,0 +1,153 @@
+/*
+Copyright (c) 2003-2012 Sony Pictures Imageworks Inc., et al.
+All Rights Reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are
+met:
+* Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in the
+ documentation and/or other materials provided with the distribution.
+* Neither the name of Sony Pictures Imageworks nor the names of its
+ contributors may be used to endorse or promote products derived from
+ this software without specific prior written permission.
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+
+
+#ifndef _OPENCOLORIO_AE_CONTEXT_H_
+#define _OPENCOLORIO_AE_CONTEXT_H_
+
+#include <string>
+#include <vector>
+
+#include "OpenColorIO_AE.h"
+#include "OpenColorIO_AE_GL.h"
+
+#include <OpenColorIO/OpenColorIO.h>
+namespace OCIO = OCIO_NAMESPACE;
+
+
+
+// yeah, this probably could/should go in a seperate file
+class Path
+{
+ public:
+ Path(const std::string &path, const std::string &dir);
+ Path(const Path &path);
+ ~Path() {}
+
+ std::string full_path() const;
+ std::string relative_path(bool force) const;
+
+ bool exists() const;
+
+ private:
+ std::string _path;
+ std::string _dir;
+
+ typedef enum {
+ TYPE_UNKNOWN = 0,
+ TYPE_MAC,
+ TYPE_WIN
+ } PathType;
+
+ static PathType path_type(std::string path);
+ static bool is_relative(std::string path);
+ static std::string convert_delimiters(std::string path);
+ static std::vector<std::string> components(std::string path);
+};
+
+
+class OpenColorIO_AE_Context
+{
+ public:
+ OpenColorIO_AE_Context(const std::string &path, OCIO_Source source);
+ OpenColorIO_AE_Context(const ArbitraryData *arb_data, const std::string &dir);
+ ~OpenColorIO_AE_Context();
+
+ bool Verify(const ArbitraryData *arb_data, const std::string &dir);
+
+ void setupConvert(const char *input, const char *output);
+ void setupDisplay(const char *input, const char *transform, const char *device);
+ void setupLUT(bool invert, OCIO_Interp interpolation);
+
+ typedef std::vector<std::string> SpaceVec;
+
+ OCIO_Action getAction() const { return _action; }
+ const std::string & getInput() const { return _input; }
+ const std::string & getOutput() const { return _output; }
+ const std::string & getTransform() const { return _transform; }
+ const std::string & getDevice() const { return _device; }
+ const SpaceVec & getInputs() const { return _inputs; }
+ const SpaceVec & getTransforms() const { return _transforms; }
+ const SpaceVec & getDevices() const { return _devices; }
+
+ const OCIO::ConstProcessorRcPtr & processor() const { return _processor; }
+
+ bool ExportLUT(const std::string &path, const std::string &display_icc_path);
+
+ bool ProcessWorldGL(PF_EffectWorld *float_world);
+
+ private:
+ std::string _path;
+ OCIO_Source _source;
+ std::string _config_name;
+
+ OCIO_Action _action;
+
+ std::string _input;
+ std::string _output;
+ std::string _transform;
+ std::string _device;
+ SpaceVec _inputs;
+ SpaceVec _transforms;
+ SpaceVec _devices;
+
+ bool _invert;
+ OCIO_Interp _interpolation;
+
+
+ OCIO::ConstConfigRcPtr _config;
+ OCIO::ConstProcessorRcPtr _processor;
+
+
+ bool _gl_init;
+
+ GLuint _fragShader;
+ GLuint _program;
+
+ GLuint _imageTexID;
+
+ GLuint _lut3dTexID;
+ std::vector<float> _lut3d;
+ std::string _lut3dcacheid;
+ std::string _shadercacheid;
+
+ std::string _inputColorSpace;
+ std::string _display;
+ std::string _transformName;
+
+
+ GLuint _renderBuffer;
+ int _bufferWidth;
+ int _bufferHeight;
+
+ void InitOCIOGL();
+ void UpdateOCIOGLState();
+};
+
+
+#endif // _OPENCOLORIO_AE_CONTEXT_H_ \ No newline at end of file
diff --git a/src/aftereffects/OpenColorIO_AE_Dialogs.h b/src/aftereffects/OpenColorIO_AE_Dialogs.h
new file mode 100644
index 0000000..a2e9f26
--- /dev/null
+++ b/src/aftereffects/OpenColorIO_AE_Dialogs.h
@@ -0,0 +1,60 @@
+/*
+Copyright (c) 2003-2012 Sony Pictures Imageworks Inc., et al.
+All Rights Reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are
+met:
+* Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in the
+ documentation and/or other materials provided with the distribution.
+* Neither the name of Sony Pictures Imageworks nor the names of its
+ contributors may be used to endorse or promote products derived from
+ this software without specific prior written permission.
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+
+#ifndef _OPENCOLORIC_AE_DIALOG_H_
+#define _OPENCOLORIC_AE_DIALOG_H_
+
+#include <string>
+#include <map>
+#include <vector>
+
+typedef std::map<std::string, std::string> ExtensionMap; // map[ ext ] = format
+
+bool OpenFile(char *path, int buf_len, const ExtensionMap &extensions, const void *hwnd);
+
+bool SaveFile(char *path, int buf_len, const ExtensionMap &extensions, const void *hwnd);
+
+bool GetMonitorProfile(char *path, int buf_len, const void *hwnd);
+
+
+typedef std::vector<std::string> ConfigVec;
+
+void GetStdConfigs(ConfigVec &configs);
+
+std::string GetStdConfigPath(const std::string &name);
+
+
+typedef std::vector<std::string> MenuVec;
+
+int PopUpMenu(const MenuVec &menu_items, int selected_index, const void *hwnd);
+
+
+void ErrorMessage(const char *message, const void *hwnd);
+
+
+#endif // _OPENCOLORIC_AE_DIALOG_H_ \ No newline at end of file
diff --git a/src/aftereffects/OpenColorIO_AE_GL.h b/src/aftereffects/OpenColorIO_AE_GL.h
new file mode 100644
index 0000000..2c9683c
--- /dev/null
+++ b/src/aftereffects/OpenColorIO_AE_GL.h
@@ -0,0 +1,61 @@
+/*
+Copyright (c) 2003-2012 Sony Pictures Imageworks Inc., et al.
+All Rights Reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are
+met:
+* Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in the
+ documentation and/or other materials provided with the distribution.
+* Neither the name of Sony Pictures Imageworks nor the names of its
+ contributors may be used to endorse or promote products derived from
+ this software without specific prior written permission.
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+
+
+#ifndef _OPENCOLORIO_AE_GL_H_
+#define _OPENCOLORIO_AE_GL_H_
+
+#include "AEConfig.h"
+
+#ifdef AE_OS_WIN
+ #include <GL/glew.h>
+ #include <GL/wglew.h>
+#elif defined(AE_OS_MAC)
+ #include <OpenGL/OpenGL.h>
+ #include <OpenGL/gl.h>
+ #include <OpenGL/glu.h>
+ #include <OpenGL/glext.h>
+ #include <AGL/agl.h>
+#endif
+
+
+void GlobalSetup_GL();
+
+bool HaveOpenGL();
+
+// must surround plug-in OpenGL calls with these functions so that AE
+// doesn't know we're borrowing the OpenGL renderer
+void SetPluginContext();
+void SetAEContext();
+
+GLuint GetFrameBuffer();
+
+void GlobalSetdown_GL();
+
+
+#endif // _OPENCOLORIO_AE_GL_H_ \ No newline at end of file
diff --git a/src/aftereffects/OpenColorIO_AE_PiPL.r b/src/aftereffects/OpenColorIO_AE_PiPL.r
new file mode 100644
index 0000000..3d08070
--- /dev/null
+++ b/src/aftereffects/OpenColorIO_AE_PiPL.r
@@ -0,0 +1,102 @@
+/*
+Copyright (c) 2003-2012 Sony Pictures Imageworks Inc., et al.
+All Rights Reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are
+met:
+* Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in the
+ documentation and/or other materials provided with the distribution.
+* Neither the name of Sony Pictures Imageworks nor the names of its
+ contributors may be used to endorse or promote products derived from
+ this software without specific prior written permission.
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+
+#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 {
+ "OpenColorIO"
+ },
+ /* [3] */
+ Category {
+ "Utility"
+ },
+
+#ifdef AE_OS_WIN
+ #ifdef AE_PROC_INTELx64
+ CodeWin64X86 {"PluginMain"},
+ #else
+ CodeWin32X86 {"PluginMain"},
+ #endif
+#else
+ #ifdef AE_PROC_INTELx64
+ CodeMacIntel64 {"PluginMain"},
+ #else
+ CodeMachOPowerPC {"PluginMain"},
+ CodeMacIntel32 {"PluginMain"},
+ #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 {
+ 525824 /* 2.0 */
+ },
+ /* [9] */
+ AE_Effect_Info_Flags {
+ 0
+ },
+ /* [10] */
+ AE_Effect_Global_OutFlags {
+ 50365504
+ },
+ AE_Effect_Global_OutFlags_2 {
+ 37896
+ },
+ /* [11] */
+ AE_Effect_Match_Name {
+ "OpenColorIO"
+ },
+ /* [12] */
+ AE_Reserved_Info {
+ 0
+ }
+ }
+};
+
+
+
diff --git a/src/aftereffects/OpenColorIO_AE_UI.cpp b/src/aftereffects/OpenColorIO_AE_UI.cpp
new file mode 100644
index 0000000..b5634bf
--- /dev/null
+++ b/src/aftereffects/OpenColorIO_AE_UI.cpp
@@ -0,0 +1,1229 @@
+/*
+Copyright (c) 2003-2012 Sony Pictures Imageworks Inc., et al.
+All Rights Reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are
+met:
+* Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in the
+ documentation and/or other materials provided with the distribution.
+* Neither the name of Sony Pictures Imageworks nor the names of its
+ contributors may be used to endorse or promote products derived from
+ this software without specific prior written permission.
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+
+
+#include "OpenColorIO_AE.h"
+
+#include "OpenColorIO_AE_Context.h"
+#include "OpenColorIO_AE_Dialogs.h"
+
+#include "DrawbotBot.h"
+
+
+
+// UI drawing constants
+
+#define LEFT_MARGIN 5
+#define TOP_MARGIN 5
+#define RIGHT_MARGIN 50
+
+#define FILE_LABEL_WIDTH 35
+
+#define FIELD_HEIGHT 22
+
+#define FIELD_TEXT_INDENT_H 10
+#define FIELD_TEXT_INDENT_V 4
+
+#define BUTTONS_INDENT_H (LEFT_MARGIN + 70)
+
+#define BUTTONS_GAP_V 20
+#define BUTTONS_GAP_H 30
+
+#define BUTTON_HEIGHT 20
+#define BUTTON_WIDTH 80
+
+#define BUTTON_TEXT_INDENT_V 2
+
+#define MENUS_INDENT_H 0
+
+#define MENUS_GAP_V 20
+
+#define MENU_LABEL_WIDTH 100
+#define MENU_LABEL_SPACE 5
+
+#define MENU_WIDTH 150
+#define MENU_HEIGHT 20
+
+#define MENU_TEXT_INDENT_H 10
+#define MENU_TEXT_INDENT_V 2
+
+#define MENU_ARROW_WIDTH 14
+#define MENU_ARROW_HEIGHT 7
+
+#define MENU_ARROW_SPACE_H 8
+#define MENU_ARROW_SPACE_V 7
+
+#define MENU_SHADOW_OFFSET 3
+
+#define MENU_SPACE_V 20
+
+#define TEXT_COLOR PF_App_Color_TEXT_DISABLED
+
+
+
+typedef enum {
+ REGION_NONE=0,
+ REGION_CONFIG_MENU,
+ REGION_PATH,
+ REGION_CONVERT_BUTTON,
+ REGION_DISPLAY_BUTTON,
+ REGION_EXPORT_BUTTON,
+ REGION_MENU1,
+ REGION_MENU2,
+ REGION_MENU3
+} UIRegion;
+
+
+static UIRegion WhichRegion(PF_Point ui_point, bool menus, bool third_menu)
+{
+ int field_top = TOP_MARGIN;
+ int field_bottom = field_top + FIELD_HEIGHT;
+
+ if(ui_point.v >= field_top && ui_point.v <= field_bottom)
+ {
+ int menu_left = LEFT_MARGIN + MENUS_INDENT_H + MENU_LABEL_WIDTH;
+ int menu_right = menu_left + MENU_WIDTH;
+
+ if(ui_point.h >= menu_left && ui_point.h <= menu_right)
+ {
+ return REGION_CONFIG_MENU;
+ }
+ else
+ {
+ int field_left = MENUS_INDENT_H + MENU_LABEL_WIDTH + MENU_LABEL_SPACE +
+ MENU_WIDTH + FIELD_TEXT_INDENT_H;
+
+ if(ui_point.h >= field_left)
+ return REGION_PATH;
+ }
+ }
+ else
+ {
+ int buttons_top = field_bottom + BUTTONS_GAP_V;
+ int buttons_bottom = buttons_top + BUTTON_HEIGHT;
+
+ if(ui_point.v >= buttons_top && ui_point.v <= buttons_bottom)
+ {
+ int convert_left = BUTTONS_INDENT_H;
+ int convert_right = convert_left + BUTTON_WIDTH;
+ int display_left = convert_right + BUTTONS_GAP_H;
+ int display_right = display_left + BUTTON_WIDTH;
+ int export_left = display_right + BUTTONS_GAP_H;
+ int export_right = export_left + BUTTON_WIDTH;
+
+ if(ui_point.h >= convert_left && ui_point.h <= convert_right)
+ return REGION_CONVERT_BUTTON;
+ else if(ui_point.h >= display_left && ui_point.h <= display_right)
+ return REGION_DISPLAY_BUTTON;
+ else if(ui_point.h >= export_left && ui_point.h <= export_right)
+ return REGION_EXPORT_BUTTON;
+ }
+ else if(menus)
+ {
+ int menu_left = LEFT_MARGIN + MENUS_INDENT_H + MENU_LABEL_WIDTH;
+ int menu_right = menu_left + MENU_WIDTH;
+
+ if(ui_point.h >= menu_left && ui_point.h <= menu_right)
+ {
+ int menu1_top = buttons_bottom + MENUS_GAP_V;
+ int menu1_bottom = menu1_top + MENU_HEIGHT;
+ int menu2_top = menu1_bottom + MENU_SPACE_V;
+ int menu2_bottom = menu2_top + MENU_HEIGHT;
+ int menu3_top = menu2_bottom + MENU_SPACE_V;
+ int menu3_bottom = menu3_top + MENU_HEIGHT;
+
+ if(ui_point.v >= menu1_top && ui_point.v <= menu1_bottom)
+ return REGION_MENU1;
+ else if(ui_point.v >= menu2_top && ui_point.v <= menu2_bottom)
+ return REGION_MENU2;
+ else if(third_menu && ui_point.v >= menu3_top && ui_point.v <= menu3_bottom)
+ return REGION_MENU3;
+ }
+ }
+ }
+
+ return REGION_NONE;
+}
+
+
+static void DrawMenu(DrawbotBot &bot, const char *label, const char *item)
+{
+ DRAWBOT_PointF32 original = bot.Pos();
+
+ float text_height = bot.FontSize();
+
+ bot.Move(MENU_LABEL_WIDTH, MENU_TEXT_INDENT_V + text_height);
+
+ bot.SetColor(TEXT_COLOR);
+ bot.DrawString(label, kDRAWBOT_TextAlignment_Right);
+
+ bot.Move(MENU_LABEL_SPACE, -(MENU_TEXT_INDENT_V + text_height));
+
+ DRAWBOT_PointF32 menu_corner = bot.Pos();
+
+ bot.Move(MENU_SHADOW_OFFSET, MENU_SHADOW_OFFSET);
+ bot.SetColor(PF_App_Color_BLACK, 0.3f);
+ bot.PaintRect(MENU_WIDTH, MENU_HEIGHT);
+ bot.MoveTo(menu_corner);
+
+ bot.SetColor(PF_App_Color_SHADOW);
+ bot.PaintRect(MENU_WIDTH, MENU_HEIGHT);
+
+ bot.SetColor(PF_App_Color_HILITE);
+ bot.DrawRect(MENU_WIDTH, MENU_HEIGHT);
+
+ bot.Move(MENU_TEXT_INDENT_H, MENU_TEXT_INDENT_V + text_height);
+
+ bot.SetColor(TEXT_COLOR);
+ bot.DrawString(item,
+ kDRAWBOT_TextAlignment_Left,
+ kDRAWBOT_TextTruncation_EndEllipsis,
+ MENU_WIDTH - MENU_TEXT_INDENT_H - MENU_TEXT_INDENT_H -
+ MENU_ARROW_WIDTH - MENU_ARROW_SPACE_H - MENU_ARROW_SPACE_H);
+
+ bot.MoveTo(menu_corner.x + MENU_WIDTH - MENU_ARROW_SPACE_H - MENU_ARROW_WIDTH,
+ menu_corner.y + MENU_ARROW_SPACE_V);
+
+ bot.SetColor(PF_App_Color_LIGHT_TINGE);
+ bot.PaintTriangle(MENU_ARROW_WIDTH, MENU_ARROW_HEIGHT);
+
+ bot.MoveTo(original);
+}
+
+
+static void DrawButton(DrawbotBot &bot, const char *label, int width, bool pressed)
+{
+ DRAWBOT_PointF32 original = bot.Pos();
+
+ float text_height = bot.FontSize();
+
+
+ PF_App_ColorType button_color = (pressed ? PF_App_Color_BUTTON_PRESSED_FILL : PF_App_Color_BUTTON_FILL);
+ PF_App_ColorType button_hilite = (pressed ? PF_App_Color_BLACK : PF_App_Color_HILITE);
+ PF_App_ColorType button_lowlite = (pressed ? PF_App_Color_HILITE : PF_App_Color_BLACK);
+
+
+ bot.SetColor(button_color);
+ bot.PaintRect(width, BUTTON_HEIGHT);
+
+ float brush_size = (pressed ? 1.f : 0.5f);
+
+ bot.SetColor(button_hilite);
+ bot.MoveTo(original.x + 1, original.y + BUTTON_HEIGHT - 1);
+
+ bot.DrawLineTo(original.x + 1, original.y + 1, brush_size);
+ bot.DrawLineTo(original.x + width - 1, original.y + 1, brush_size);
+
+ bot.MoveTo(original); // annoying corner pixel
+ bot.SetColor(button_hilite, 0.3f);
+ bot.PaintRect(1, 1);
+
+
+ brush_size = (pressed ? 0.5f : 1.f);
+
+ bot.SetColor(button_lowlite);
+ bot.MoveTo(original.x + 1, original.y + BUTTON_HEIGHT - 1);
+
+ bot.DrawLineTo(original.x + width - 1, original.y + BUTTON_HEIGHT - 1, brush_size);
+ bot.DrawLineTo(original.x + width - 1, original.y + 2, brush_size);
+
+ bot.MoveTo(original.x + width - 1, original.y + BUTTON_HEIGHT - 1); // corner
+ bot.SetColor(button_lowlite, 0.3f);
+ bot.PaintRect(1, 1);
+
+
+ bot.MoveTo(original.x + (width / 2), original.y + text_height + BUTTON_TEXT_INDENT_V);
+
+ if(pressed)
+ bot.Move(2, 2);
+
+ bot.SetColor(TEXT_COLOR);
+ bot.DrawString(label, kDRAWBOT_TextAlignment_Center);
+
+ bot.MoveTo(original);
+}
+
+
+static PF_Err DrawEvent(
+ PF_InData *in_data,
+ PF_OutData *out_data,
+ PF_ParamDef *params[],
+ PF_LayerDef *output,
+ PF_EventExtra *event_extra)
+{
+ PF_Err err = PF_Err_NONE;
+
+
+ if(!(event_extra->evt_in_flags & PF_EI_DONT_DRAW) &&
+ params[OCIO_DATA]->u.arb_d.value != NULL)
+ {
+ if(event_extra->effect_win.area == PF_EA_CONTROL)
+ {
+ ArbitraryData *arb_data = (ArbitraryData *)PF_LOCK_HANDLE(params[OCIO_DATA]->u.arb_d.value);
+ SequenceData *seq_data = (SequenceData *)PF_LOCK_HANDLE(in_data->sequence_data);
+
+ DrawbotBot bot(in_data->pica_basicP, event_extra->contextH, in_data->appl_id);
+
+
+ int panel_left = event_extra->effect_win.current_frame.left;
+ int panel_top = event_extra->effect_win.current_frame.top;
+ int panel_width = event_extra->effect_win.current_frame.right;
+ int panel_height = event_extra->effect_win.current_frame.bottom;
+ float text_height = bot.FontSize();
+
+ if(in_data->appl_id != 'FXTC')
+ {
+ // for Premiere we need to paint the background first
+ bot.SetColor(PF_App_Color_PANEL_BACKGROUND);
+ bot.MoveTo(panel_left, panel_top);
+ bot.PaintRect(panel_width, panel_height);
+ }
+
+
+ // configuration menu
+ bot.MoveTo(panel_left + MENUS_INDENT_H, panel_top + TOP_MARGIN);
+
+ std::string config_menu_text = arb_data->path;
+
+ if(arb_data->source == OCIO_SOURCE_NONE)
+ {
+ config_menu_text = "(none)";
+ }
+ if(arb_data->source == OCIO_SOURCE_ENVIRONMENT)
+ {
+ config_menu_text = "$OCIO";
+ }
+ else if(arb_data->source == OCIO_SOURCE_CUSTOM)
+ {
+ config_menu_text = (arb_data->action == OCIO_ACTION_LUT ? "LUT" : "Custom");
+ }
+
+ DrawMenu(bot, "Configuration:", config_menu_text.c_str());
+
+
+ if(arb_data->source == OCIO_SOURCE_CUSTOM ||
+ arb_data->source == OCIO_SOURCE_ENVIRONMENT)
+ {
+ // path text field
+ int field_left = panel_left + MENUS_INDENT_H + MENU_LABEL_WIDTH +
+ MENU_LABEL_SPACE + MENU_WIDTH + FIELD_TEXT_INDENT_H;
+
+ bot.MoveTo(field_left, panel_top + TOP_MARGIN);
+
+ int field_width = MAX(panel_width - field_left + panel_left - RIGHT_MARGIN, 60);
+
+ bot.SetColor(PF_App_Color_SHADOW);
+ bot.PaintRect(field_width, FIELD_HEIGHT);
+ bot.SetColor(PF_App_Color_BLACK);
+ bot.DrawRect(field_width, FIELD_HEIGHT);
+
+ bot.Move(FIELD_TEXT_INDENT_H, FIELD_TEXT_INDENT_V + text_height);
+
+ bot.SetColor(TEXT_COLOR);
+
+ std::string file_string = "(none)";
+
+ if(arb_data->source == OCIO_SOURCE_ENVIRONMENT)
+ {
+ char *file = std::getenv("OCIO");
+
+ if(file)
+ file_string = file;
+ }
+ else
+ {
+ file_string = (seq_data->status == STATUS_USING_RELATIVE ?
+ arb_data->relative_path : arb_data->path);
+ }
+
+
+ bot.DrawString(file_string.c_str(),
+ kDRAWBOT_TextAlignment_Default,
+ kDRAWBOT_TextTruncation_PathEllipsis,
+ field_width - (2 * FIELD_TEXT_INDENT_H));
+ }
+
+
+ if(seq_data->status == STATUS_FILE_MISSING)
+ {
+ bot.MoveTo(panel_left + MENU_LABEL_WIDTH + MENU_LABEL_SPACE,
+ panel_top + MENU_HEIGHT + BUTTONS_GAP_V + BUTTON_HEIGHT + BUTTONS_GAP_V);
+
+ bot.SetColor(PF_App_Color_RED);
+ bot.PaintRect(200, 50);
+
+ bot.Move(100, 25 + (bot.FontSize() / 2));
+ bot.SetColor(PF_App_Color_WHITE);
+
+ if(arb_data->source == OCIO_SOURCE_ENVIRONMENT)
+ bot.DrawString("$OCIO NOT SET", kDRAWBOT_TextAlignment_Center);
+ else
+ bot.DrawString("FILE MISSING", kDRAWBOT_TextAlignment_Center);
+ }
+ else
+ {
+ // buttons
+ int field_bottom = panel_top + TOP_MARGIN + FIELD_HEIGHT;
+ int buttons_top = field_bottom + BUTTONS_GAP_V;
+
+ // GPU alert
+ if(seq_data->gpu_err != GPU_ERR_NONE)
+ {
+ bot.MoveTo(panel_left + MENU_LABEL_WIDTH + MENU_LABEL_SPACE,
+ field_bottom + bot.FontSize() + BUTTON_TEXT_INDENT_V);
+
+ if(seq_data->gpu_err == GPU_ERR_INSUFFICIENT)
+ {
+ bot.DrawString("GPU Insufficient");
+ }
+ else if(seq_data->gpu_err == GPU_ERR_RENDER_ERR)
+ {
+ bot.DrawString("GPU Render Error");
+ }
+ }
+
+ #ifndef NDEBUG
+ // Premiere color space (only for debugging purposes)
+ if(in_data->appl_id == 'PrMr' && seq_data->prem_status != PREMIERE_UNKNOWN)
+ {
+ bot.MoveTo(panel_left + MENU_LABEL_WIDTH + MENU_LABEL_SPACE + 200,
+ field_bottom + bot.FontSize() + BUTTON_TEXT_INDENT_V);
+
+ bot.SetColor(PF_App_Color_WHITE);
+
+ if(seq_data->prem_status == PREMIERE_LINEAR)
+ {
+ bot.DrawString("Linear Float");
+ }
+ else if(seq_data->prem_status == PREMIERE_NON_LINEAR)
+ {
+ bot.DrawString("Non-Linear Float");
+ }
+ }
+ #endif
+
+ // Export button
+ if(arb_data->action != OCIO_ACTION_NONE)
+ {
+ bot.MoveTo(panel_left + BUTTONS_INDENT_H + (2 * (BUTTON_WIDTH + BUTTONS_GAP_H)), buttons_top);
+
+ DrawButton(bot, "Export...", BUTTON_WIDTH, false);
+ }
+
+ if(arb_data->action == OCIO_ACTION_LUT)
+ {
+ // Invert button
+ bot.MoveTo(panel_left + BUTTONS_INDENT_H, buttons_top);
+
+ DrawButton(bot, "Invert", BUTTON_WIDTH, arb_data->invert);
+
+ // interpolation menu
+ int buttons_bottom = buttons_top + BUTTON_HEIGHT;
+
+ bot.MoveTo(panel_left + MENUS_INDENT_H, buttons_bottom + MENUS_GAP_V);
+
+ const char *txt = arb_data->interpolation == OCIO_INTERP_NEAREST ? "Nearest Neighbor" :
+ arb_data->interpolation == OCIO_INTERP_LINEAR ? "Linear" :
+ arb_data->interpolation == OCIO_INTERP_TETRAHEDRAL ? "Tetrahedral" :
+ arb_data->interpolation == OCIO_INTERP_BEST ? "Best" :
+ "Unknown";
+
+ DrawMenu(bot, "Interpolation:", txt);
+ }
+ else if(arb_data->action == OCIO_ACTION_CONVERT ||
+ arb_data->action == OCIO_ACTION_DISPLAY)
+ {
+ // Convert/Display buttons
+ bot.MoveTo(panel_left + BUTTONS_INDENT_H, buttons_top);
+
+ DrawButton(bot, "Convert", BUTTON_WIDTH,
+ arb_data->action == OCIO_ACTION_CONVERT);
+
+ bot.Move(BUTTON_WIDTH + BUTTONS_GAP_H);
+
+ DrawButton(bot, "Display", BUTTON_WIDTH,
+ arb_data->action == OCIO_ACTION_DISPLAY);
+
+
+ // menus
+ int buttons_bottom = buttons_top + BUTTON_HEIGHT;
+
+ bot.MoveTo(panel_left + MENUS_INDENT_H, buttons_bottom + MENUS_GAP_V);
+
+ if(arb_data->action == OCIO_ACTION_CONVERT)
+ {
+ DrawMenu(bot, "Input Space:", arb_data->input);
+
+ bot.Move(0, MENU_HEIGHT + MENU_SPACE_V);
+
+ DrawMenu(bot, "Output Space:", arb_data->output);
+ }
+ else if(arb_data->action == OCIO_ACTION_DISPLAY)
+ {
+ // color space transformations
+ DrawMenu(bot, "Input Space:", arb_data->input);
+
+ bot.Move(0, MENU_HEIGHT + MENU_SPACE_V);
+
+ DrawMenu(bot, "Transform:", arb_data->transform);
+
+ bot.Move(0, MENU_HEIGHT + MENU_SPACE_V);
+
+ DrawMenu(bot, "Device:", arb_data->device);
+ }
+ }
+ }
+
+
+ event_extra->evt_out_flags = PF_EO_HANDLED_EVENT;
+
+ PF_UNLOCK_HANDLE(params[OCIO_DATA]->u.arb_d.value);
+ PF_UNLOCK_HANDLE(in_data->sequence_data);
+ }
+ }
+
+ return err;
+}
+
+
+std::string GetProjectDir(PF_InData *in_data)
+{
+ if(in_data->appl_id == 'PrMr')
+ return std::string("");
+
+ AEGP_SuiteHandler suites(in_data->pica_basicP);
+
+ AEGP_ProjectH projH = NULL;
+ suites.ProjSuite5()->AEGP_GetProjectByIndex(0, &projH);
+
+ AEGP_MemHandle pathH = NULL;
+ suites.ProjSuite5()->AEGP_GetProjectPath(projH, &pathH);
+
+ if(pathH)
+ {
+ std::string proj_dir;
+
+ A_UTF16Char *path = NULL;
+ suites.MemorySuite1()->AEGP_LockMemHandle(pathH, (void **)&path);
+
+ if(path)
+ {
+ // poor-man's unicode copy
+ char c_path[AEGP_MAX_PATH_SIZE];
+
+ char *c = c_path;
+ A_UTF16Char *s = path;
+
+ do{
+ *c++ = *s;
+ }while(*s++ != '\0');
+
+#ifdef WIN_ENV
+#define PATH_DELIMITER '\\'
+#else
+#define PATH_DELIMITER '/'
+#endif
+
+ std::string proj_path(c_path);
+
+ if(proj_path.find_last_of(PATH_DELIMITER) != std::string::npos)
+ {
+ proj_dir = proj_path.substr(0, proj_path.find_last_of(PATH_DELIMITER));
+ }
+ }
+
+ suites.MemorySuite1()->AEGP_FreeMemHandle(pathH);
+
+ return proj_dir;
+ }
+
+ return std::string("");
+}
+
+
+static int FindInVec(const std::vector<std::string> &vec, const std::string val)
+{
+ for(int i=0; i < vec.size(); i++)
+ {
+ if(vec[i] == val)
+ return i;
+ }
+
+ return -1;
+}
+
+
+static void DoClickPath(
+ PF_InData *in_data,
+ PF_OutData *out_data,
+ PF_ParamDef *params[],
+ PF_LayerDef *output,
+ PF_EventExtra *event_extra,
+ ArbitraryData *arb_data,
+ SequenceData *seq_data)
+{
+ ExtensionMap extensions;
+
+ for(int i=0; i < OCIO::FileTransform::getNumFormats(); i++)
+ {
+ const char *extension = OCIO::FileTransform::getFormatExtensionByIndex(i);
+ const char *format = OCIO::FileTransform::getFormatNameByIndex(i);
+
+ extensions[ extension ] = format;
+ }
+
+ extensions[ "ocio" ] = "OCIO Format";
+
+
+ void *hwndOwner = NULL;
+
+#ifdef WIN_ENV
+ PF_GET_PLATFORM_DATA(PF_PlatData_MAIN_WND, &hwndOwner);
+#endif
+
+ char c_path[ARB_PATH_LEN + 1] = { '\0' };
+
+ bool result = OpenFile(c_path, ARB_PATH_LEN, extensions, hwndOwner);
+
+
+ if(result)
+ {
+ Path path(c_path, GetProjectDir(in_data));
+
+ OpenColorIO_AE_Context *new_context = new OpenColorIO_AE_Context(path.full_path(),
+ OCIO_SOURCE_CUSTOM);
+
+ if(new_context == NULL)
+ throw OCIO::Exception("WTF?");
+
+
+ if(seq_data->context)
+ {
+ delete seq_data->context;
+ }
+
+ seq_data->context = new_context;
+
+ arb_data->source = seq_data->source = OCIO_SOURCE_CUSTOM;
+
+ strncpy(arb_data->path, path.full_path().c_str(), ARB_PATH_LEN);
+ strncpy(arb_data->relative_path, path.relative_path(false).c_str(), ARB_PATH_LEN);
+
+ strncpy(seq_data->path, arb_data->path, ARB_PATH_LEN);
+ strncpy(seq_data->relative_path, arb_data->relative_path, ARB_PATH_LEN);
+
+
+ // try to retain settings if it looks like the same situation,
+ // possibly fixing a moved path
+ if(OCIO_ACTION_NONE == arb_data->action ||
+ (OCIO_ACTION_LUT == new_context->getAction() && OCIO_ACTION_LUT != arb_data->action) ||
+ (OCIO_ACTION_LUT != new_context->getAction() && OCIO_ACTION_LUT == arb_data->action) ||
+ (OCIO_ACTION_LUT != new_context->getAction() &&
+ (-1 == FindInVec(new_context->getInputs(), arb_data->input) ||
+ -1 == FindInVec(new_context->getInputs(), arb_data->output) ||
+ -1 == FindInVec(new_context->getTransforms(), arb_data->transform) ||
+ -1 == FindInVec(new_context->getDevices(), arb_data->device) ) ) )
+ {
+ // Configuration is different, so initialize defaults
+ arb_data->action = seq_data->context->getAction();
+
+ if(arb_data->action == OCIO_ACTION_LUT)
+ {
+ arb_data->invert = FALSE;
+ arb_data->interpolation = OCIO_INTERP_LINEAR;
+ }
+ else
+ {
+ strncpy(arb_data->input, seq_data->context->getInput().c_str(), ARB_SPACE_LEN);
+ strncpy(arb_data->output, seq_data->context->getOutput().c_str(), ARB_SPACE_LEN);
+ strncpy(arb_data->transform, seq_data->context->getTransform().c_str(), ARB_SPACE_LEN);
+ strncpy(arb_data->device, seq_data->context->getDevice().c_str(), ARB_SPACE_LEN);
+ }
+ }
+ else
+ {
+ // Configuration is the same, retain current settings
+ if(arb_data->action == OCIO_ACTION_LUT)
+ {
+ seq_data->context->setupLUT(arb_data->invert, arb_data->interpolation);
+ }
+ else if(arb_data->action == OCIO_ACTION_CONVERT)
+ {
+ seq_data->context->setupConvert(arb_data->input, arb_data->output);
+ }
+ else if(arb_data->action == OCIO_ACTION_DISPLAY)
+ {
+ seq_data->context->setupDisplay(arb_data->input, arb_data->transform, arb_data->device);
+ }
+ }
+
+ params[OCIO_DATA]->uu.change_flags = PF_ChangeFlag_CHANGED_VALUE;
+
+ seq_data->status = STATUS_USING_ABSOLUTE;
+ }
+}
+
+
+static void DoClickConfig(
+ PF_InData *in_data,
+ PF_OutData *out_data,
+ PF_ParamDef *params[],
+ PF_LayerDef *output,
+ PF_EventExtra *event_extra,
+ ArbitraryData *arb_data,
+ SequenceData *seq_data)
+{
+ void *hwndOwner = NULL;
+
+#ifdef WIN_ENV
+ PF_GET_PLATFORM_DATA(PF_PlatData_MAIN_WND, &hwndOwner);
+#endif
+
+ ConfigVec configs;
+ GetStdConfigs(configs);
+
+ if(configs.size() == 0)
+ configs.push_back("(nada)"); // menu makes a gray entry that says "No configs in $PATH"
+
+
+ MenuVec menu_items;
+ int selected = 0;
+
+ menu_items.push_back("$OCIO"); // menu will gray this out if $OCIO is not defined
+
+ menu_items.push_back("(-"); // this tells the menu to make a seperator
+
+ for(ConfigVec::const_iterator i = configs.begin(); i != configs.end(); ++i)
+ {
+ menu_items.push_back( *i );
+
+ if(arb_data->source == OCIO_SOURCE_STANDARD && arb_data->path == *i)
+ {
+ selected = menu_items.size() - 1;
+ }
+ }
+
+ menu_items.push_back("(-");
+
+ menu_items.push_back("Custom...");
+
+ int custom_choice = menu_items.size() - 1;
+
+ if(arb_data->source == OCIO_SOURCE_CUSTOM)
+ {
+ selected = -1;
+ }
+
+
+ int choice = PopUpMenu(menu_items, selected, hwndOwner);
+
+
+ if(choice == custom_choice)
+ {
+ // custom is the same as clicking the path
+ DoClickPath(in_data, out_data, params, output, event_extra, arb_data, seq_data);
+ }
+ else if(choice != selected)
+ {
+ OpenColorIO_AE_Context *new_context = NULL;
+
+ if(choice == 0)
+ {
+ // $OCIO
+ char *file = std::getenv("OCIO");
+
+ if(file)
+ {
+ Path path(file, GetProjectDir(in_data));
+
+ new_context = new OpenColorIO_AE_Context(path.full_path(),
+ OCIO_SOURCE_ENVIRONMENT);
+
+ arb_data->source = seq_data->source = OCIO_SOURCE_ENVIRONMENT;
+
+ strncpy(arb_data->path, path.full_path().c_str(), ARB_PATH_LEN);
+ strncpy(arb_data->relative_path, path.relative_path(false).c_str(), ARB_PATH_LEN);
+ }
+ else
+ throw OCIO::Exception("No $OCIO environment variable defined.");
+ }
+ else
+ {
+ // standard configs
+ std::string config = configs[choice - 2];
+
+ std::string path = GetStdConfigPath(config);
+
+ if( !path.empty() )
+ {
+ new_context = new OpenColorIO_AE_Context(config, OCIO_SOURCE_STANDARD);
+
+ arb_data->source = seq_data->source = OCIO_SOURCE_STANDARD;
+
+ strncpy(arb_data->path, config.c_str(), ARB_PATH_LEN);
+ strncpy(arb_data->relative_path, path.c_str(), ARB_PATH_LEN);
+ }
+ else
+ throw OCIO::Exception("Problem loading OCIO configuration.");
+ }
+
+
+ if(new_context)
+ {
+ if(seq_data->context)
+ {
+ delete seq_data->context;
+ }
+
+ seq_data->context = new_context;
+
+
+ strncpy(seq_data->path, arb_data->path, ARB_PATH_LEN);
+ strncpy(seq_data->relative_path, arb_data->relative_path, ARB_PATH_LEN);
+
+ // try to retain settings if it looks like the same situation,
+ // possibly fixing a moved path
+ if(OCIO_ACTION_NONE == arb_data->action ||
+ (OCIO_ACTION_LUT == new_context->getAction() && OCIO_ACTION_LUT != arb_data->action) ||
+ (OCIO_ACTION_LUT != new_context->getAction() && OCIO_ACTION_LUT == arb_data->action) ||
+ (OCIO_ACTION_LUT != new_context->getAction() &&
+ (-1 == FindInVec(new_context->getInputs(), arb_data->input) ||
+ -1 == FindInVec(new_context->getInputs(), arb_data->output) ||
+ -1 == FindInVec(new_context->getTransforms(), arb_data->transform) ||
+ -1 == FindInVec(new_context->getDevices(), arb_data->device) ) ) )
+ {
+ // Configuration is different, so initialize defaults
+ arb_data->action = seq_data->context->getAction();
+
+ if(arb_data->action == OCIO_ACTION_LUT)
+ {
+ arb_data->invert = FALSE;
+ arb_data->interpolation = OCIO_INTERP_LINEAR;
+ }
+ else
+ {
+ strncpy(arb_data->input, seq_data->context->getInput().c_str(), ARB_SPACE_LEN);
+ strncpy(arb_data->output, seq_data->context->getOutput().c_str(), ARB_SPACE_LEN);
+ strncpy(arb_data->transform, seq_data->context->getTransform().c_str(), ARB_SPACE_LEN);
+ strncpy(arb_data->device, seq_data->context->getDevice().c_str(), ARB_SPACE_LEN);
+ }
+ }
+ else
+ {
+ // Configuration is the same, retain current settings
+ if(arb_data->action == OCIO_ACTION_LUT)
+ {
+ seq_data->context->setupLUT(arb_data->invert, arb_data->interpolation);
+ }
+ else if(arb_data->action == OCIO_ACTION_CONVERT)
+ {
+ seq_data->context->setupConvert(arb_data->input, arb_data->output);
+ }
+ else if(arb_data->action == OCIO_ACTION_DISPLAY)
+ {
+ seq_data->context->setupDisplay(arb_data->input, arb_data->transform, arb_data->device);
+ }
+ }
+
+ params[OCIO_DATA]->uu.change_flags = PF_ChangeFlag_CHANGED_VALUE;
+
+ seq_data->status = STATUS_OK;
+ }
+ }
+}
+
+
+static void DoClickConvertDisplay(
+ PF_InData *in_data,
+ PF_OutData *out_data,
+ PF_ParamDef *params[],
+ PF_LayerDef *output,
+ PF_EventExtra *event_extra,
+ ArbitraryData *arb_data,
+ SequenceData *seq_data,
+ UIRegion reg )
+{
+ if(arb_data->action == OCIO_ACTION_LUT)
+ {
+ if(reg == REGION_CONVERT_BUTTON) // i.e. Invert
+ {
+ // doing it this way so that any exceptions thrown by setupLUT
+ // because the LUT can't be inverted are thrown before
+ // I actually chenge the ArbData setting
+ seq_data->context->setupLUT(!arb_data->invert, arb_data->interpolation);
+
+ arb_data->invert = !arb_data->invert;
+
+ params[OCIO_DATA]->uu.change_flags = PF_ChangeFlag_CHANGED_VALUE;
+ }
+ }
+ else if(arb_data->action == OCIO_ACTION_CONVERT || arb_data->action == OCIO_ACTION_DISPLAY)
+ {
+ if(reg == REGION_CONVERT_BUTTON && arb_data->action != OCIO_ACTION_CONVERT)
+ {
+ arb_data->action = OCIO_ACTION_CONVERT;
+
+ seq_data->context->setupConvert(arb_data->input, arb_data->output);
+
+ params[OCIO_DATA]->uu.change_flags = PF_ChangeFlag_CHANGED_VALUE;
+ }
+ else if(reg == REGION_DISPLAY_BUTTON && arb_data->action != OCIO_ACTION_DISPLAY)
+ {
+ arb_data->action = OCIO_ACTION_DISPLAY;
+
+ seq_data->context->setupDisplay(arb_data->input, arb_data->transform, arb_data->device);
+
+ params[OCIO_DATA]->uu.change_flags = PF_ChangeFlag_CHANGED_VALUE;
+ }
+ }
+}
+
+
+static void DoClickExport(
+ PF_InData *in_data,
+ PF_OutData *out_data,
+ PF_ParamDef *params[],
+ PF_LayerDef *output,
+ PF_EventExtra *event_extra,
+ ArbitraryData *arb_data,
+ SequenceData *seq_data,
+ UIRegion reg )
+{
+ ExtensionMap extensions;
+
+ for(int i=0; i < OCIO::Baker::getNumFormats(); ++i)
+ {
+ const char *extension = OCIO::Baker::getFormatExtensionByIndex(i);
+ const char *format = OCIO::Baker::getFormatNameByIndex(i);
+
+ extensions[ extension ] = format;
+ }
+
+ extensions[ "icc" ] = "ICC Profile";
+
+
+ void *hwndOwner = NULL;
+
+#ifdef WIN_ENV
+ PF_GET_PLATFORM_DATA(PF_PlatData_MAIN_WND, &hwndOwner);
+#endif
+
+ char path[256] = { '\0' };
+
+ bool result = SaveFile(path, 255, extensions, hwndOwner);
+
+
+ if(result)
+ {
+ std::string the_path(path);
+ std::string the_extension = the_path.substr( the_path.find_last_of('.') + 1 );
+
+ bool do_export = true;
+
+ std::string monitor_icc_path;
+
+ if(the_extension == "icc")
+ {
+ char monitor_path[256] = {'\0'};
+
+ do_export = GetMonitorProfile(monitor_path, 255, hwndOwner);
+
+ if(monitor_path[0] != '\0')
+ monitor_icc_path = monitor_path;
+ }
+
+ if(do_export)
+ seq_data->context->ExportLUT(the_path, monitor_icc_path);
+ }
+}
+
+
+static void DoClickMenus(
+ PF_InData *in_data,
+ PF_OutData *out_data,
+ PF_ParamDef *params[],
+ PF_LayerDef *output,
+ PF_EventExtra *event_extra,
+ ArbitraryData *arb_data,
+ SequenceData *seq_data,
+ UIRegion reg )
+{
+ if(seq_data->context != NULL && arb_data->action == seq_data->context->getAction())
+ {
+ MenuVec menu_items;
+ int selected_item;
+
+ if(arb_data->action == OCIO_ACTION_LUT)
+ {
+ if(reg == REGION_MENU1)
+ {
+ menu_items.push_back("Nearest Neighbor");
+ menu_items.push_back("Linear");
+ menu_items.push_back("Tetrahedral");
+ menu_items.push_back("(-");
+ menu_items.push_back("Best");
+
+ selected_item = arb_data->interpolation == OCIO_INTERP_NEAREST ? 0 :
+ arb_data->interpolation == OCIO_INTERP_LINEAR ? 1 :
+ arb_data->interpolation == OCIO_INTERP_TETRAHEDRAL ? 2 :
+ arb_data->interpolation == OCIO_INTERP_BEST ? 4 :
+ -1;
+ }
+ }
+ else if(arb_data->action == OCIO_ACTION_CONVERT)
+ {
+ menu_items = seq_data->context->getInputs();
+
+ if(reg == REGION_MENU1)
+ {
+ selected_item = FindInVec(menu_items, arb_data->input);
+ }
+ else
+ {
+ selected_item = FindInVec(menu_items, arb_data->output);
+ }
+ }
+ else if(arb_data->action == OCIO_ACTION_DISPLAY)
+ {
+ if(reg == REGION_MENU1)
+ {
+ menu_items = seq_data->context->getInputs();
+
+ selected_item = FindInVec(menu_items, arb_data->input);
+ }
+ else if(reg == REGION_MENU2)
+ {
+ menu_items = seq_data->context->getTransforms();
+
+ selected_item = FindInVec(menu_items, arb_data->transform);
+ }
+ else if(reg == REGION_MENU3)
+ {
+ menu_items = seq_data->context->getDevices();
+
+ selected_item = FindInVec(menu_items, arb_data->device);
+ }
+ }
+
+
+
+ void *hwndOwner = NULL;
+
+ #ifdef WIN_ENV
+ PF_GET_PLATFORM_DATA(PF_PlatData_MAIN_WND, &hwndOwner);
+ #endif
+
+ int result = PopUpMenu(menu_items, selected_item, hwndOwner);
+
+
+ if(result != selected_item)
+ {
+ std::string color_space = menu_items[ result ];
+
+ if(arb_data->action == OCIO_ACTION_LUT)
+ {
+ if(reg == REGION_MENU1)
+ {
+ arb_data->interpolation = result == 0 ? OCIO_INTERP_NEAREST :
+ result == 2 ? OCIO_INTERP_TETRAHEDRAL :
+ result == 4 ? OCIO_INTERP_BEST :
+ OCIO_INTERP_LINEAR;
+
+ seq_data->context->setupLUT(arb_data->invert, arb_data->interpolation);
+ }
+ }
+ else if(arb_data->action == OCIO_ACTION_CONVERT)
+ {
+ if(reg == REGION_MENU1)
+ {
+ strncpy(arb_data->input, color_space.c_str(), ARB_SPACE_LEN);
+ }
+ else if(reg == REGION_MENU2)
+ {
+ strncpy(arb_data->output, color_space.c_str(), ARB_SPACE_LEN);
+ }
+
+ seq_data->context->setupConvert(arb_data->input, arb_data->output);
+ }
+ else if(arb_data->action == OCIO_ACTION_DISPLAY)
+ {
+ if(reg == REGION_MENU1)
+ {
+ strncpy(arb_data->input, color_space.c_str(), ARB_SPACE_LEN);
+ }
+ else if(reg == REGION_MENU2)
+ {
+ strncpy(arb_data->transform, color_space.c_str(), ARB_SPACE_LEN);
+ }
+ else if(reg == REGION_MENU3)
+ {
+ strncpy(arb_data->device, color_space.c_str(), ARB_SPACE_LEN);
+ }
+
+ seq_data->context->setupDisplay(arb_data->input, arb_data->transform, arb_data->device);
+ }
+
+ params[OCIO_DATA]->uu.change_flags = PF_ChangeFlag_CHANGED_VALUE;
+ }
+ }
+}
+
+
+static PF_Err DoClick(
+ PF_InData *in_data,
+ PF_OutData *out_data,
+ PF_ParamDef *params[],
+ PF_LayerDef *output,
+ PF_EventExtra *event_extra )
+{
+ PF_Err err = PF_Err_NONE;
+
+ ArbitraryData *arb_data = (ArbitraryData *)PF_LOCK_HANDLE(params[OCIO_DATA]->u.arb_d.value);
+ SequenceData *seq_data = (SequenceData *)PF_LOCK_HANDLE(in_data->sequence_data);
+
+
+ if(event_extra->effect_win.area == PF_EA_CONTROL)
+ {
+ bool menus_visible = (arb_data->action != OCIO_ACTION_NONE);
+ bool third_menu = (arb_data->action == OCIO_ACTION_DISPLAY);
+
+ PF_Point local_point;
+
+ local_point.h = event_extra->u.do_click.screen_point.h - event_extra->effect_win.current_frame.left;
+ local_point.v = event_extra->u.do_click.screen_point.v - event_extra->effect_win.current_frame.top;
+
+ UIRegion reg = WhichRegion(local_point, menus_visible, third_menu);
+
+ if(reg != REGION_NONE)
+ {
+ try
+ {
+ if(reg == REGION_CONFIG_MENU)
+ {
+ DoClickConfig(in_data, out_data, params, output,
+ event_extra, arb_data, seq_data);
+ }
+ else if(reg == REGION_PATH)
+ {
+ if(arb_data->source == OCIO_SOURCE_CUSTOM)
+ {
+ DoClickPath(in_data, out_data, params, output,
+ event_extra, arb_data, seq_data);
+ }
+ }
+ else if(arb_data->action != OCIO_ACTION_NONE &&
+ seq_data->status != STATUS_FILE_MISSING)
+ {
+ if(seq_data->context == NULL)
+ {
+ seq_data->context = new OpenColorIO_AE_Context(arb_data,
+ GetProjectDir(in_data) );
+ }
+
+ if(reg == REGION_CONVERT_BUTTON || reg == REGION_DISPLAY_BUTTON)
+ {
+ DoClickConvertDisplay(in_data, out_data, params, output,
+ event_extra, arb_data, seq_data, reg);
+ }
+ else if(reg == REGION_EXPORT_BUTTON)
+ {
+ DoClickExport(in_data, out_data, params, output,
+ event_extra, arb_data, seq_data, reg);
+ }
+ else // must be a menu then
+ {
+ DoClickMenus(in_data, out_data, params, output,
+ event_extra, arb_data, seq_data, reg);
+ }
+ }
+ }
+ catch(std::exception &e)
+ {
+ if(in_data->appl_id == 'FXTC')
+ {
+ PF_SPRINTF(out_data->return_msg, e.what());
+
+ out_data->out_flags |= PF_OutFlag_DISPLAY_ERROR_MESSAGE;
+ }
+ else
+ {
+ void *hwndOwner = NULL;
+
+ #ifdef WIN_ENV
+ PF_GET_PLATFORM_DATA(PF_PlatData_MAIN_WND, &hwndOwner);
+ #endif
+
+ ErrorMessage(e.what(), hwndOwner);
+ }
+ }
+ catch(...)
+ {
+ PF_SPRINTF(out_data->return_msg, "Unknown error");
+
+ out_data->out_flags |= PF_OutFlag_DISPLAY_ERROR_MESSAGE;
+ }
+ }
+ }
+
+
+ PF_UNLOCK_HANDLE(params[OCIO_DATA]->u.arb_d.value);
+ PF_UNLOCK_HANDLE(in_data->sequence_data);
+
+ event_extra->evt_out_flags = PF_EO_HANDLED_EVENT;
+
+ return err;
+}
+
+
+PF_Err HandleEvent (
+ PF_InData *in_data,
+ PF_OutData *out_data,
+ PF_ParamDef *params[],
+ PF_LayerDef *output,
+ PF_EventExtra *extra )
+{
+ PF_Err err = PF_Err_NONE;
+
+ extra->evt_out_flags = 0;
+
+ if(!err)
+ {
+ switch(extra->e_type)
+ {
+ case PF_Event_DRAW:
+ err = DrawEvent(in_data, out_data, params, output, extra);
+ break;
+
+ case PF_Event_DO_CLICK:
+ err = DoClick(in_data, out_data, params, output, extra);
+ break;
+ }
+ }
+
+ return err;
+}
diff --git a/src/aftereffects/mac/OpenColorIO_AE.plugin-Info.plist b/src/aftereffects/mac/OpenColorIO_AE.plugin-Info.plist
new file mode 100755
index 0000000..45ad29d
--- /dev/null
+++ b/src/aftereffects/mac/OpenColorIO_AE.plugin-Info.plist
@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+<dict>
+ <key>CFBundleIdentifier</key>
+ <string>org.OpenColorIO.AfterEffects</string>
+ <key>CFBundleInfoDictionaryVersion</key>
+ <string>6.0</string>
+ <key>CFBundleName</key>
+ <string>OpenColorIO</string>
+ <key>CFBundleExecutable</key>
+ <string>OpenColorIO</string>
+ <key>CFBundlePackageType</key>
+ <string>eFKT</string>
+ <key>CFBundleSignature</key>
+ <string>FXTC</string>
+ <key>NSAppleScriptEnabled</key>
+ <string>No</string>
+ <key>NSHumanReadableCopyright</key>
+ <string>© 2011 OpenColorIO</string>
+ <key>LSRequiresCarbon</key>
+ <true/>
+</dict>
+</plist>
diff --git a/src/aftereffects/mac/OpenColorIO_AE_Dialogs_Cocoa.mm b/src/aftereffects/mac/OpenColorIO_AE_Dialogs_Cocoa.mm
new file mode 100644
index 0000000..24a048f
--- /dev/null
+++ b/src/aftereffects/mac/OpenColorIO_AE_Dialogs_Cocoa.mm
@@ -0,0 +1,237 @@
+/*
+Copyright (c) 2003-2012 Sony Pictures Imageworks Inc., et al.
+All Rights Reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are
+met:
+* Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in the
+ documentation and/or other materials provided with the distribution.
+* Neither the name of Sony Pictures Imageworks nor the names of its
+ contributors may be used to endorse or promote products derived from
+ this software without specific prior written permission.
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+
+#include "OpenColorIO_AE_Dialogs.h"
+
+#import "OpenColorIO_AE_MonitorProfileChooser_Controller.h"
+
+#import "OpenColorIO_AE_Menu.h"
+
+
+bool OpenFile(char *path, int buf_len, const ExtensionMap &extensions, const void *hwnd)
+{
+ NSOpenPanel *panel = [NSOpenPanel openPanel];
+
+ [panel setTitle:@"OpenColorIO"];
+
+
+ NSMutableArray *extension_array = [[NSMutableArray alloc] init];
+ std::string message = "Formats: ";
+ bool first_one = true;
+
+ for(ExtensionMap::const_iterator i = extensions.begin(); i != extensions.end(); i++)
+ {
+ [extension_array addObject:[NSString stringWithUTF8String:i->first.c_str()]];
+
+ if(first_one)
+ first_one = false;
+ else
+ message += ", ";
+
+ message += "." + i->first;
+ }
+
+ [panel setMessage:[NSString stringWithUTF8String:message.c_str()]];
+
+
+ NSInteger result = [panel runModalForTypes:extension_array];
+
+
+ [extension_array release];
+
+
+ if(result == NSOKButton)
+ {
+ return [[panel filename] getCString:path
+ maxLength:buf_len
+ encoding:NSASCIIStringEncoding];
+ }
+ else
+ return false;
+}
+
+
+bool SaveFile(char *path, int buf_len, const ExtensionMap &extensions, const void *hwnd)
+{
+ NSSavePanel *panel = [NSSavePanel savePanel];
+
+ [panel setTitle:@"OpenColorIO"];
+
+
+ NSMutableArray *extension_array = [[NSMutableArray alloc] init];
+ std::string message = "Formats: ";
+ bool first_one = true;
+
+ for(ExtensionMap::const_iterator i = extensions.begin(); i != extensions.end(); i++)
+ {
+ [extension_array addObject:[NSString stringWithUTF8String:i->first.c_str()]];
+
+ if(first_one)
+ first_one = false;
+ else
+ message += ", ";
+
+ message += i->second + " (." + i->first + ")";
+ }
+
+ [panel setAllowedFileTypes:extension_array];
+ [panel setMessage:[NSString stringWithUTF8String:message.c_str()]];
+
+
+ NSInteger result = [panel runModal];
+
+
+ [extension_array release];
+
+
+ if(result == NSOKButton)
+ {
+ return [[panel filename] getCString:path
+ maxLength:buf_len
+ encoding:NSASCIIStringEncoding];
+ }
+ else
+ return false;
+}
+
+
+bool GetMonitorProfile(char *path, int buf_len, const void *hwnd)
+{
+ bool hit_ok = false;
+
+ Class ui_controller_class = [[NSBundle bundleWithIdentifier:@"org.OpenColorIO.AfterEffects"]
+ classNamed:@"OpenColorIO_AE_MonitorProfileChooser_Controller"];
+
+ if(ui_controller_class)
+ {
+ OpenColorIO_AE_MonitorProfileChooser_Controller *ui_controller = [[ui_controller_class alloc] init];
+
+ if(ui_controller)
+ {
+ NSWindow *my_window = [ui_controller getWindow];
+
+ if(my_window)
+ {
+ NSInteger result = [NSApp runModalForWindow:my_window];
+
+ if(result == NSRunStoppedResponse)
+ {
+ [ui_controller getMonitorProfile:path bufferSize:buf_len];
+
+ hit_ok = true;
+ }
+
+ [my_window release];
+ }
+
+ [ui_controller release];
+ }
+ }
+
+ return hit_ok;
+}
+
+
+void GetStdConfigs(ConfigVec &configs)
+{
+ const char *ocio_dir = "/Library/Application Support/OpenColorIO/";
+
+ NSFileManager *man = [NSFileManager defaultManager];
+
+ NSDirectoryEnumerator *enumerator = [man enumeratorAtPath:[NSString stringWithUTF8String:ocio_dir]];
+
+ for(NSString *file in enumerator)
+ {
+ std::string config_path(ocio_dir);
+
+ config_path += [file UTF8String];
+
+ config_path += "/config.ocio";
+
+ [enumerator skipDescendents];
+
+ if([man fileExistsAtPath:[NSString stringWithUTF8String:config_path.c_str()]])
+ {
+ configs.push_back( [file UTF8String] );
+ }
+ }
+}
+
+
+std::string GetStdConfigPath(const std::string &name)
+{
+ const char *ocio_dir = "/Library/Application Support/OpenColorIO/";
+
+ std::string config_path = ocio_dir + name + "/config.ocio";
+
+ if( [[NSFileManager defaultManager] fileExistsAtPath:[NSString stringWithUTF8String:config_path.c_str()]] )
+ {
+ return config_path;
+ }
+ else
+ {
+ return "";
+ }
+}
+
+
+int PopUpMenu(const MenuVec &menu_items, int selected_index, const void *hwnd)
+{
+ NSMutableArray *item_array = [[NSMutableArray alloc] init];
+
+ for(MenuVec::const_iterator i = menu_items.begin(); i != menu_items.end(); i++)
+ {
+ [item_array addObject:[NSString stringWithUTF8String:i->c_str()]];
+ }
+
+
+ OpenColorIO_AE_Menu *menu = [[OpenColorIO_AE_Menu alloc] init:item_array
+ selectedItem:selected_index];
+
+ [menu showMenu];
+
+ NSInteger item = [menu selectedItem];
+
+ [menu release];
+ [item_array release];
+
+ return item;
+}
+
+
+void ErrorMessage(const char *message, const void *hwnd)
+{
+ NSAlert *alert = [[NSAlert alloc] init];
+
+ [alert setMessageText:[NSString stringWithUTF8String:message]];
+
+ [alert runModal];
+
+ [alert release];
+}
+
diff --git a/src/aftereffects/mac/OpenColorIO_AE_GL_Cocoa.mm b/src/aftereffects/mac/OpenColorIO_AE_GL_Cocoa.mm
new file mode 100644
index 0000000..3fc3797
--- /dev/null
+++ b/src/aftereffects/mac/OpenColorIO_AE_GL_Cocoa.mm
@@ -0,0 +1,178 @@
+/*
+Copyright (c) 2003-2012 Sony Pictures Imageworks Inc., et al.
+All Rights Reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are
+met:
+* Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in the
+ documentation and/or other materials provided with the distribution.
+* Neither the name of Sony Pictures Imageworks nor the names of its
+ contributors may be used to endorse or promote products derived from
+ this software without specific prior written permission.
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+
+
+#include "OpenColorIO_AE_GL.h"
+
+#import <Cocoa/Cocoa.h>
+
+
+
+static NSWindow *g_win = nil;
+static AGLContext g_context = NULL;
+static GLuint g_framebuffer;
+
+
+static bool HaveRequiredExtensions()
+{
+ const GLubyte *strVersion = glGetString(GL_VERSION);
+ const GLubyte *strExt = glGetString(GL_EXTENSIONS);
+
+ if(strVersion == NULL || strExt == NULL)
+ return false;
+
+ float gl_version;
+ sscanf((char *)strVersion, "%f", &gl_version);
+
+#define CheckExtension(N) gluCheckExtension((const GLubyte *)N, strExt)
+
+ return (gl_version >= 2.0 &&
+ CheckExtension("GL_ARB_color_buffer_float") &&
+ CheckExtension("GL_ARB_texture_float") &&
+ CheckExtension("GL_ARB_vertex_program") &&
+ CheckExtension("GL_ARB_vertex_shader") &&
+ CheckExtension("GL_ARB_texture_cube_map") &&
+ CheckExtension("GL_ARB_fragment_shader") &&
+ CheckExtension("GL_ARB_draw_buffers") &&
+ CheckExtension("GL_ARB_framebuffer_object") );
+}
+
+
+void GlobalSetup_GL()
+{
+ GLint aAttribs[64];
+ u_short nIndexS= -1;
+
+ aAttribs[++nIndexS] = AGL_RGBA;
+ aAttribs[++nIndexS] = AGL_DOUBLEBUFFER;
+ aAttribs[++nIndexS] = AGL_COLOR_FLOAT;
+
+ aAttribs[++nIndexS] = AGL_RED_SIZE;
+ aAttribs[++nIndexS] = 32;
+ aAttribs[++nIndexS] = AGL_GREEN_SIZE;
+ aAttribs[++nIndexS] = 32;
+ aAttribs[++nIndexS] = AGL_BLUE_SIZE;
+ aAttribs[++nIndexS] = 32;
+ aAttribs[++nIndexS] = AGL_ALPHA_SIZE;
+ aAttribs[++nIndexS] = 32;
+
+ aAttribs[++nIndexS] = AGL_NONE;
+
+
+ AGLPixelFormat oPixelFormat = aglChoosePixelFormat(NULL, 0, aAttribs);
+
+ if(oPixelFormat)
+ {
+ g_context = aglCreateContext(oPixelFormat, NULL);
+
+ aglDestroyPixelFormat(oPixelFormat);
+ }
+
+
+ if(g_context == NULL)
+ return;
+
+
+ g_win = [[NSWindow alloc] initWithContentRect:NSZeroRect
+ styleMask:NSBorderlessWindowMask
+ backing:NSBackingStoreBuffered
+ defer:NO];
+
+
+ aglSetDrawable(g_context, (AGLDrawable)[[g_win graphicsContext] graphicsPort]);
+
+ glFlush();
+
+
+ SetPluginContext();
+
+
+
+ GLint units;
+ glGetIntegerv(GL_MAX_TEXTURE_UNITS, &units);
+
+
+ if( !HaveRequiredExtensions() || units < 2)
+ {
+ GlobalSetdown_GL();
+ SetAEContext();
+ return;
+ }
+
+ glGenFramebuffersEXT(1, &g_framebuffer);
+
+
+ SetAEContext();
+}
+
+
+bool HaveOpenGL()
+{
+ return (g_context != NULL && g_win != nil);
+}
+
+
+static AGLContext g_ae_context;
+
+void SetPluginContext()
+{
+ g_ae_context = aglGetCurrentContext();
+
+ aglSetCurrentContext(g_context);
+}
+
+
+void SetAEContext()
+{
+ // g_ae_context might be NULL...so be it
+ aglSetCurrentContext(g_ae_context);
+}
+
+
+GLuint GetFrameBuffer()
+{
+ return g_framebuffer;
+}
+
+
+void GlobalSetdown_GL()
+{
+ if(g_context)
+ {
+ aglDestroyContext(g_context);
+ g_context = NULL;
+
+ glDeleteFramebuffersEXT(1, &g_framebuffer);
+ }
+
+ if(g_win)
+ {
+ [g_win release];
+ g_win = nil;
+ }
+}
diff --git a/src/aftereffects/mac/OpenColorIO_AE_Menu.h b/src/aftereffects/mac/OpenColorIO_AE_Menu.h
new file mode 100644
index 0000000..e8920fa
--- /dev/null
+++ b/src/aftereffects/mac/OpenColorIO_AE_Menu.h
@@ -0,0 +1,45 @@
+/*
+Copyright (c) 2003-2012 Sony Pictures Imageworks Inc., et al.
+All Rights Reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are
+met:
+* Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in the
+ documentation and/or other materials provided with the distribution.
+* Neither the name of Sony Pictures Imageworks nor the names of its
+ contributors may be used to endorse or promote products derived from
+ this software without specific prior written permission.
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+
+#import <Cocoa/Cocoa.h>
+
+
+@interface OpenColorIO_AE_Menu : NSView {
+ NSArray *menu_items;
+ NSInteger chosen_item;
+}
+
+- (id)init:(NSArray *)menuItems selectedItem:(NSInteger)selected;
+
+- (void)showMenu;
+
+- (IBAction)menuItemAction:(id)sender;
+
+- (NSInteger)selectedItem;
+
+@end
diff --git a/src/aftereffects/mac/OpenColorIO_AE_Menu.m b/src/aftereffects/mac/OpenColorIO_AE_Menu.m
new file mode 100644
index 0000000..6d0a44b
--- /dev/null
+++ b/src/aftereffects/mac/OpenColorIO_AE_Menu.m
@@ -0,0 +1,114 @@
+/*
+Copyright (c) 2003-2012 Sony Pictures Imageworks Inc., et al.
+All Rights Reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are
+met:
+* Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in the
+ documentation and/or other materials provided with the distribution.
+* Neither the name of Sony Pictures Imageworks nor the names of its
+ contributors may be used to endorse or promote products derived from
+ this software without specific prior written permission.
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+
+#import "OpenColorIO_AE_Menu.h"
+
+
+@implementation OpenColorIO_AE_Menu
+
+- (id)init:(NSArray *)menuItems selectedItem:(NSInteger)selected {
+ self = [super init];
+
+ menu_items = menuItems;
+ chosen_item = selected;
+
+ return self;
+}
+
+- (void)showMenu {
+
+ // Doing some pretty weird stuff here.
+ // I need to bring up a contextual menu without AE giving me an NSView.
+ // To get the screen position, I use global NSApp methods.
+ // And I need to make an NSView to give to popUpContextMenu:
+ // so I can catch the selectors it sends, so I made this an NSView subclass.
+
+ NSMenu *menu = [[NSMenu alloc] initWithTitle:@"Pop-Up"];
+
+ [menu setAutoenablesItems:FALSE];
+
+
+ NSUInteger i;
+
+ for(i=0; i < [menu_items count]; i++)
+ {
+ if( [[menu_items objectAtIndex:i] isEqualToString:@"(-"] )
+ {
+ [menu addItem:[NSMenuItem separatorItem]];
+ }
+ else
+ {
+ NSMenuItem *item = [menu addItemWithTitle:[menu_items objectAtIndex:i]
+ action:@selector(menuItemAction:)
+ keyEquivalent:@""];
+
+ [item setTag:i];
+
+ if(i == chosen_item)
+ [item setState:NSOnState];
+
+ if([[menu_items objectAtIndex:i] isEqualToString:@"$OCIO"] && NULL == getenv("OCIO"))
+ {
+ [item setEnabled:FALSE];
+ [item setState:NSOffState];
+ }
+ else if([[menu_items objectAtIndex:i] isEqualToString:@"(nada)"])
+ {
+ [item setTitle:@"No configs in /Library/Application Support/OpenColorIO/"];
+ [item setEnabled:FALSE];
+ }
+ }
+ }
+
+
+ id fakeMouseEvent=[NSEvent mouseEventWithType:NSLeftMouseDown
+ location: [[NSApp keyWindow] convertScreenToBase:[NSEvent mouseLocation]]
+ modifierFlags:0
+ timestamp:0
+ windowNumber: [[NSApp keyWindow] windowNumber]
+ context:nil
+ eventNumber:0
+ clickCount:1
+ pressure:0];
+
+ [NSMenu popUpContextMenu:menu withEvent:fakeMouseEvent forView:self];
+
+ [menu release];
+}
+
+- (IBAction)menuItemAction:(id)sender {
+ NSMenuItem *item = (NSMenuItem *)sender;
+
+ chosen_item = [item tag];
+}
+
+- (NSInteger)selectedItem {
+ return chosen_item;
+}
+
+@end
diff --git a/src/aftereffects/mac/OpenColorIO_AE_MonitorProfileChooser.xib b/src/aftereffects/mac/OpenColorIO_AE_MonitorProfileChooser.xib
new file mode 100644
index 0000000..4e18dbe
--- /dev/null
+++ b/src/aftereffects/mac/OpenColorIO_AE_MonitorProfileChooser.xib
@@ -0,0 +1,494 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<archive type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="7.10">
+ <data>
+ <int key="IBDocument.SystemTarget">1050</int>
+ <string key="IBDocument.SystemVersion">10K549</string>
+ <string key="IBDocument.InterfaceBuilderVersion">851</string>
+ <string key="IBDocument.AppKitVersion">1038.36</string>
+ <string key="IBDocument.HIToolboxVersion">461.00</string>
+ <object class="NSMutableDictionary" key="IBDocument.PluginVersions">
+ <string key="NS.key.0">com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <string key="NS.object.0">851</string>
+ </object>
+ <object class="NSMutableArray" key="IBDocument.EditedObjectIDs">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <integer value="1"/>
+ </object>
+ <object class="NSArray" key="IBDocument.PluginDependencies">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ </object>
+ <object class="NSMutableDictionary" key="IBDocument.Metadata">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <object class="NSArray" key="dict.sortedKeys" id="0">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ </object>
+ <object class="NSMutableArray" key="dict.values">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ </object>
+ </object>
+ <object class="NSMutableArray" key="IBDocument.RootObjects" id="1000">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <object class="NSCustomObject" id="1001">
+ <string key="NSClassName">OpenColorIO_AE_MonitorProfileChooser_Controller</string>
+ </object>
+ <object class="NSCustomObject" id="1003">
+ <string key="NSClassName">FirstResponder</string>
+ </object>
+ <object class="NSCustomObject" id="1004">
+ <string key="NSClassName">NSApplication</string>
+ </object>
+ <object class="NSWindowTemplate" id="1005">
+ <int key="NSWindowStyleMask">1</int>
+ <int key="NSWindowBacking">2</int>
+ <string key="NSWindowRect">{{196, 369}, {364, 141}}</string>
+ <int key="NSWTFlags">544735232</int>
+ <string key="NSWindowTitle">OpenColorIO</string>
+ <string key="NSWindowClass">NSWindow</string>
+ <nil key="NSViewClass"/>
+ <string key="NSWindowContentMaxSize">{3.40282e+38, 3.40282e+38}</string>
+ <object class="NSView" key="NSWindowView" id="1006">
+ <reference key="NSNextResponder"/>
+ <int key="NSvFlags">256</int>
+ <object class="NSMutableArray" key="NSSubviews">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <object class="NSPopUpButton" id="313635640">
+ <reference key="NSNextResponder" ref="1006"/>
+ <int key="NSvFlags">268</int>
+ <string key="NSFrame">{{125, 87}, {222, 26}}</string>
+ <reference key="NSSuperview" ref="1006"/>
+ <bool key="NSEnabled">YES</bool>
+ <object class="NSPopUpButtonCell" key="NSCell" id="127421210">
+ <int key="NSCellFlags">-2076049856</int>
+ <int key="NSCellFlags2">2048</int>
+ <object class="NSFont" key="NSSupport" id="928433575">
+ <string key="NSName">LucidaGrande</string>
+ <double key="NSSize">13</double>
+ <int key="NSfFlags">1044</int>
+ </object>
+ <reference key="NSControlView" ref="313635640"/>
+ <int key="NSButtonFlags">109199615</int>
+ <int key="NSButtonFlags2">129</int>
+ <string key="NSAlternateContents"/>
+ <string key="NSKeyEquivalent"/>
+ <int key="NSPeriodicDelay">400</int>
+ <int key="NSPeriodicInterval">75</int>
+ <nil key="NSMenuItem"/>
+ <bool key="NSMenuItemRespectAlignment">YES</bool>
+ <object class="NSMenu" key="NSMenu" id="39894973">
+ <string key="NSTitle">OtherViews</string>
+ <object class="NSMutableArray" key="NSMenuItems">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ </object>
+ <reference key="NSMenuFont" ref="928433575"/>
+ </object>
+ <int key="NSSelectedIndex">-1</int>
+ <int key="NSPreferredEdge">1</int>
+ <bool key="NSUsesItemFromMenu">YES</bool>
+ <bool key="NSAltersState">YES</bool>
+ <int key="NSArrowPosition">2</int>
+ </object>
+ </object>
+ <object class="NSTextField" id="116991834">
+ <reference key="NSNextResponder" ref="1006"/>
+ <int key="NSvFlags">268</int>
+ <string key="NSFrame">{{17, 94}, {106, 17}}</string>
+ <reference key="NSSuperview" ref="1006"/>
+ <bool key="NSEnabled">YES</bool>
+ <object class="NSTextFieldCell" key="NSCell" id="292780847">
+ <int key="NSCellFlags">68288064</int>
+ <int key="NSCellFlags2">138413056</int>
+ <string key="NSContents">Monitor Profile:</string>
+ <reference key="NSSupport" ref="928433575"/>
+ <reference key="NSControlView" ref="116991834"/>
+ <object class="NSColor" key="NSBackgroundColor">
+ <int key="NSColorSpace">6</int>
+ <string key="NSCatalogName">System</string>
+ <string key="NSColorName">controlColor</string>
+ <object class="NSColor" key="NSColor">
+ <int key="NSColorSpace">3</int>
+ <bytes key="NSWhite">MC42NjY2NjY2ODY1AA</bytes>
+ </object>
+ </object>
+ <object class="NSColor" key="NSTextColor">
+ <int key="NSColorSpace">6</int>
+ <string key="NSCatalogName">System</string>
+ <string key="NSColorName">controlTextColor</string>
+ <object class="NSColor" key="NSColor">
+ <int key="NSColorSpace">3</int>
+ <bytes key="NSWhite">MAA</bytes>
+ </object>
+ </object>
+ </object>
+ </object>
+ <object class="NSButton" id="995505874">
+ <reference key="NSNextResponder" ref="1006"/>
+ <int key="NSvFlags">268</int>
+ <string key="NSFrame">{{254, 12}, {96, 32}}</string>
+ <reference key="NSSuperview" ref="1006"/>
+ <bool key="NSEnabled">YES</bool>
+ <object class="NSButtonCell" key="NSCell" id="15784021">
+ <int key="NSCellFlags">67239424</int>
+ <int key="NSCellFlags2">134217728</int>
+ <string key="NSContents">OK</string>
+ <reference key="NSSupport" ref="928433575"/>
+ <reference key="NSControlView" ref="995505874"/>
+ <int key="NSButtonFlags">-2038284033</int>
+ <int key="NSButtonFlags2">129</int>
+ <string key="NSAlternateContents"/>
+ <string type="base64-UTF8" key="NSKeyEquivalent">DQ</string>
+ <int key="NSPeriodicDelay">200</int>
+ <int key="NSPeriodicInterval">25</int>
+ </object>
+ </object>
+ <object class="NSButton" id="1070422003">
+ <reference key="NSNextResponder" ref="1006"/>
+ <int key="NSvFlags">268</int>
+ <string key="NSFrame">{{158, 12}, {96, 32}}</string>
+ <reference key="NSSuperview" ref="1006"/>
+ <bool key="NSEnabled">YES</bool>
+ <object class="NSButtonCell" key="NSCell" id="393092215">
+ <int key="NSCellFlags">67239424</int>
+ <int key="NSCellFlags2">134217728</int>
+ <string key="NSContents">Cancel</string>
+ <reference key="NSSupport" ref="928433575"/>
+ <reference key="NSControlView" ref="1070422003"/>
+ <int key="NSButtonFlags">-2038284033</int>
+ <int key="NSButtonFlags2">129</int>
+ <string key="NSAlternateContents"/>
+ <string type="base64-UTF8" key="NSKeyEquivalent">Gw</string>
+ <int key="NSPeriodicDelay">200</int>
+ <int key="NSPeriodicInterval">25</int>
+ </object>
+ </object>
+ </object>
+ <string key="NSFrameSize">{364, 141}</string>
+ <reference key="NSSuperview"/>
+ </object>
+ <string key="NSScreenRect">{{0, 0}, {1680, 1028}}</string>
+ <string key="NSMaxSize">{3.40282e+38, 3.40282e+38}</string>
+ </object>
+ </object>
+ <object class="IBObjectContainer" key="IBDocument.Objects">
+ <object class="NSMutableArray" key="connectionRecords">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <object class="IBConnectionRecord">
+ <object class="IBOutletConnection" key="connection">
+ <string key="label">profileMenu</string>
+ <reference key="source" ref="1001"/>
+ <reference key="destination" ref="313635640"/>
+ </object>
+ <int key="connectionID">15</int>
+ </object>
+ <object class="IBConnectionRecord">
+ <object class="IBOutletConnection" key="connection">
+ <string key="label">window</string>
+ <reference key="source" ref="1001"/>
+ <reference key="destination" ref="1005"/>
+ </object>
+ <int key="connectionID">16</int>
+ </object>
+ <object class="IBConnectionRecord">
+ <object class="IBActionConnection" key="connection">
+ <string key="label">clickCancel:</string>
+ <reference key="source" ref="1001"/>
+ <reference key="destination" ref="1070422003"/>
+ </object>
+ <int key="connectionID">17</int>
+ </object>
+ <object class="IBConnectionRecord">
+ <object class="IBActionConnection" key="connection">
+ <string key="label">clickOK:</string>
+ <reference key="source" ref="1001"/>
+ <reference key="destination" ref="995505874"/>
+ </object>
+ <int key="connectionID">18</int>
+ </object>
+ </object>
+ <object class="IBMutableOrderedSet" key="objectRecords">
+ <object class="NSArray" key="orderedObjects">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <object class="IBObjectRecord">
+ <int key="objectID">0</int>
+ <reference key="object" ref="0"/>
+ <reference key="children" ref="1000"/>
+ <nil key="parent"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">-2</int>
+ <reference key="object" ref="1001"/>
+ <reference key="parent" ref="0"/>
+ <string key="objectName">File's Owner</string>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">-1</int>
+ <reference key="object" ref="1003"/>
+ <reference key="parent" ref="0"/>
+ <string key="objectName">First Responder</string>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">-3</int>
+ <reference key="object" ref="1004"/>
+ <reference key="parent" ref="0"/>
+ <string key="objectName">Application</string>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">1</int>
+ <reference key="object" ref="1005"/>
+ <object class="NSMutableArray" key="children">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <reference ref="1006"/>
+ </object>
+ <reference key="parent" ref="0"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">2</int>
+ <reference key="object" ref="1006"/>
+ <object class="NSMutableArray" key="children">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <reference ref="313635640"/>
+ <reference ref="116991834"/>
+ <reference ref="995505874"/>
+ <reference ref="1070422003"/>
+ </object>
+ <reference key="parent" ref="1005"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">3</int>
+ <reference key="object" ref="313635640"/>
+ <object class="NSMutableArray" key="children">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <reference ref="127421210"/>
+ </object>
+ <reference key="parent" ref="1006"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">4</int>
+ <reference key="object" ref="127421210"/>
+ <object class="NSMutableArray" key="children">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <reference ref="39894973"/>
+ </object>
+ <reference key="parent" ref="313635640"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">5</int>
+ <reference key="object" ref="39894973"/>
+ <object class="NSMutableArray" key="children">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ </object>
+ <reference key="parent" ref="127421210"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">9</int>
+ <reference key="object" ref="116991834"/>
+ <object class="NSMutableArray" key="children">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <reference ref="292780847"/>
+ </object>
+ <reference key="parent" ref="1006"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">10</int>
+ <reference key="object" ref="292780847"/>
+ <reference key="parent" ref="116991834"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">11</int>
+ <reference key="object" ref="995505874"/>
+ <object class="NSMutableArray" key="children">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <reference ref="15784021"/>
+ </object>
+ <reference key="parent" ref="1006"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">12</int>
+ <reference key="object" ref="15784021"/>
+ <reference key="parent" ref="995505874"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">13</int>
+ <reference key="object" ref="1070422003"/>
+ <object class="NSMutableArray" key="children">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <reference ref="393092215"/>
+ </object>
+ <reference key="parent" ref="1006"/>
+ </object>
+ <object class="IBObjectRecord">
+ <int key="objectID">14</int>
+ <reference key="object" ref="393092215"/>
+ <reference key="parent" ref="1070422003"/>
+ </object>
+ </object>
+ </object>
+ <object class="NSMutableDictionary" key="flattenedProperties">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <object class="NSArray" key="dict.sortedKeys">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <string>1.IBEditorWindowLastContentRect</string>
+ <string>1.IBPluginDependency</string>
+ <string>1.IBWindowTemplateEditedContentRect</string>
+ <string>1.NSWindowTemplate.visibleAtLaunch</string>
+ <string>1.WindowOrigin</string>
+ <string>1.editorWindowContentRectSynchronizationRect</string>
+ <string>10.IBPluginDependency</string>
+ <string>11.IBPluginDependency</string>
+ <string>11.IBViewBoundsToFrameTransform</string>
+ <string>12.IBPluginDependency</string>
+ <string>13.IBPluginDependency</string>
+ <string>13.IBViewBoundsToFrameTransform</string>
+ <string>14.IBPluginDependency</string>
+ <string>2.IBPluginDependency</string>
+ <string>3.IBPluginDependency</string>
+ <string>3.IBViewBoundsToFrameTransform</string>
+ <string>4.IBPluginDependency</string>
+ <string>5.IBEditorWindowLastContentRect</string>
+ <string>5.IBPluginDependency</string>
+ <string>9.IBPluginDependency</string>
+ <string>9.IBViewBoundsToFrameTransform</string>
+ </object>
+ <object class="NSMutableArray" key="dict.values">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <string>{{498, 559}, {364, 141}}</string>
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <string>{{498, 559}, {364, 141}}</string>
+ <boolean value="NO"/>
+ <string>{196, 240}</string>
+ <string>{{202, 428}, {480, 270}}</string>
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <object class="NSAffineTransform">
+ <bytes key="NSTransformStruct">P4AAAL+AAABDfgAAwigAAA</bytes>
+ </object>
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <object class="NSAffineTransform">
+ <bytes key="NSTransformStruct">P4AAAL+AAABDfgAAwigAAA</bytes>
+ </object>
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <object class="NSAffineTransform">
+ <bytes key="NSTransformStruct">P4AAAL+AAABDFAAAw1oAAA</bytes>
+ </object>
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <string>{{598, 628}, {110, 4}}</string>
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <object class="NSAffineTransform">
+ <bytes key="NSTransformStruct">P4AAAL+AAABCIAAAw1gAAA</bytes>
+ </object>
+ </object>
+ </object>
+ <object class="NSMutableDictionary" key="unlocalizedProperties">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <reference key="dict.sortedKeys" ref="0"/>
+ <object class="NSMutableArray" key="dict.values">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ </object>
+ </object>
+ <nil key="activeLocalization"/>
+ <object class="NSMutableDictionary" key="localizations">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <reference key="dict.sortedKeys" ref="0"/>
+ <object class="NSMutableArray" key="dict.values">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ </object>
+ </object>
+ <nil key="sourceID"/>
+ <int key="maxID">18</int>
+ </object>
+ <object class="IBClassDescriber" key="IBDocument.Classes">
+ <object class="NSMutableArray" key="referencedPartialClassDescriptions">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <object class="IBPartialClassDescription">
+ <string key="className">OpenColorIO_AE_MonitorProfileChooser_Controller</string>
+ <string key="superclassName">NSObject</string>
+ <object class="NSMutableDictionary" key="actions">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <object class="NSArray" key="dict.sortedKeys">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <string>clickCancel:</string>
+ <string>clickOK:</string>
+ </object>
+ <object class="NSMutableArray" key="dict.values">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <string>NSButton</string>
+ <string>NSButton</string>
+ </object>
+ </object>
+ <object class="NSMutableDictionary" key="actionInfosByName">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <object class="NSArray" key="dict.sortedKeys">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <string>clickCancel:</string>
+ <string>clickOK:</string>
+ </object>
+ <object class="NSMutableArray" key="dict.values">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <object class="IBActionInfo">
+ <string key="name">clickCancel:</string>
+ <string key="candidateClassName">NSButton</string>
+ </object>
+ <object class="IBActionInfo">
+ <string key="name">clickOK:</string>
+ <string key="candidateClassName">NSButton</string>
+ </object>
+ </object>
+ </object>
+ <object class="NSMutableDictionary" key="outlets">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <object class="NSArray" key="dict.sortedKeys">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <string>profileMenu</string>
+ <string>window</string>
+ </object>
+ <object class="NSMutableArray" key="dict.values">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <string>NSPopUpButton</string>
+ <string>NSWindow</string>
+ </object>
+ </object>
+ <object class="NSMutableDictionary" key="toOneOutletInfosByName">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <object class="NSArray" key="dict.sortedKeys">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <string>profileMenu</string>
+ <string>window</string>
+ </object>
+ <object class="NSMutableArray" key="dict.values">
+ <bool key="EncodedWithXMLCoder">YES</bool>
+ <object class="IBToOneOutletInfo">
+ <string key="name">profileMenu</string>
+ <string key="candidateClassName">NSPopUpButton</string>
+ </object>
+ <object class="IBToOneOutletInfo">
+ <string key="name">window</string>
+ <string key="candidateClassName">NSWindow</string>
+ </object>
+ </object>
+ </object>
+ <object class="IBClassDescriptionSource" key="sourceIdentifier">
+ <string key="majorKey">IBProjectSource</string>
+ <string key="minorKey">OpenColorIO_AE_MonitorProfileChooser_Controller.h</string>
+ </object>
+ </object>
+ </object>
+ </object>
+ <int key="IBDocument.localizationMode">0</int>
+ <string key="IBDocument.TargetRuntimeIdentifier">IBCocoaFramework</string>
+ <object class="NSMutableDictionary" key="IBDocument.PluginDeclaredDependencyDefaults">
+ <string key="NS.key.0">com.apple.InterfaceBuilder.CocoaPlugin.macosx</string>
+ <integer value="1050" key="NS.object.0"/>
+ </object>
+ <object class="NSMutableDictionary" key="IBDocument.PluginDeclaredDevelopmentDependencies">
+ <string key="NS.key.0">com.apple.InterfaceBuilder.CocoaPlugin.InterfaceBuilder3</string>
+ <integer value="3000" key="NS.object.0"/>
+ </object>
+ <bool key="IBDocument.PluginDeclaredDependenciesTrackSystemTargetVersion">YES</bool>
+ <string key="IBDocument.LastKnownRelativeProjectPath">OpenColorIO_AE.xcodeproj</string>
+ <int key="IBDocument.defaultPropertyAccessControl">3</int>
+ </data>
+</archive>
diff --git a/src/aftereffects/mac/OpenColorIO_AE_MonitorProfileChooser_Controller.h b/src/aftereffects/mac/OpenColorIO_AE_MonitorProfileChooser_Controller.h
new file mode 100644
index 0000000..024fa29
--- /dev/null
+++ b/src/aftereffects/mac/OpenColorIO_AE_MonitorProfileChooser_Controller.h
@@ -0,0 +1,46 @@
+/*
+Copyright (c) 2003-2012 Sony Pictures Imageworks Inc., et al.
+All Rights Reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are
+met:
+* Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in the
+ documentation and/or other materials provided with the distribution.
+* Neither the name of Sony Pictures Imageworks nor the names of its
+ contributors may be used to endorse or promote products derived from
+ this software without specific prior written permission.
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+
+#import <Cocoa/Cocoa.h>
+
+@interface OpenColorIO_AE_MonitorProfileChooser_Controller : NSObject {
+ IBOutlet NSPopUpButton *profileMenu;
+ IBOutlet NSWindow *window;
+
+ NSMutableArray *name_array;
+ NSMapTable *profile_map;
+}
+
+- (IBAction)clickOK:(NSButton *)sender;
+- (IBAction)clickCancel:(NSButton *)sender;
+
+- (NSWindow *)getWindow;
+
+- (BOOL)getMonitorProfile:(char *)path bufferSize:(int)buf_len;
+
+@end
diff --git a/src/aftereffects/mac/OpenColorIO_AE_MonitorProfileChooser_Controller.m b/src/aftereffects/mac/OpenColorIO_AE_MonitorProfileChooser_Controller.m
new file mode 100644
index 0000000..323a83c
--- /dev/null
+++ b/src/aftereffects/mac/OpenColorIO_AE_MonitorProfileChooser_Controller.m
@@ -0,0 +1,195 @@
+/*
+Copyright (c) 2003-2012 Sony Pictures Imageworks Inc., et al.
+All Rights Reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are
+met:
+* Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in the
+ documentation and/or other materials provided with the distribution.
+* Neither the name of Sony Pictures Imageworks nor the names of its
+ contributors may be used to endorse or promote products derived from
+ this software without specific prior written permission.
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+
+#import "OpenColorIO_AE_MonitorProfileChooser_Controller.h"
+
+
+typedef struct {
+ NSMutableArray *name_array;
+ NSMapTable *profile_map;
+ const char *monitor_profile_path;
+ char *monitor_profile_name;
+} IterateData;
+
+static OSErr profIterateProc(CMProfileIterateData* data, void* refcon)
+{
+ OSErr err = noErr;
+
+ IterateData *i_data = (IterateData *)refcon;
+
+ if(data->header.dataColorSpace == cmRGBData && data->location.locType == cmPathBasedProfile)
+ {
+ [i_data->name_array addObject:[NSString stringWithUTF8String:data->asciiName]];
+
+ [i_data->profile_map setObject:[NSString stringWithUTF8String:data->location.u.pathLoc.path]
+ forKey:[NSString stringWithUTF8String:data->asciiName] ];
+
+ if( i_data->monitor_profile_path &&
+ !strcmp(data->location.u.pathLoc.path, i_data->monitor_profile_path) )
+ {
+ strncpy(i_data->monitor_profile_name, data->asciiName, 255);
+ }
+ }
+
+ return err;
+}
+
+
+
+@implementation OpenColorIO_AE_MonitorProfileChooser_Controller
+
+- (id)init {
+ self = [super init];
+
+ if(!([NSBundle loadNibNamed:@"OpenColorIO_AE_MonitorProfileChooser" owner:self]))
+ return nil;
+
+
+ [window center];
+
+ // Originally tried to implement this with two NSArrays, one with paths and
+ // one with profile names (ICC descriptions). The problem is that when you
+ // add items to NSArrays one at a time, they auto-sort. But then it turns out I
+ // WANT them to sort because the profiles come in random order and the menu looks
+ // terrible if they're not sorted.
+
+ // So I make an NSArray to set up the menu and an NSMapTable to convert from the
+ // selected menu item to the actual path. Got that?
+
+
+ name_array = [[NSMutableArray alloc] init];
+ profile_map = [[NSMapTable alloc] init];
+
+
+ // get monitor profile path
+
+ // Oddly enough, the "Name" given to me by ColorSync for this is often "Display",
+ // but if you get the profile's description, you get something like
+ // "Apple Cinema HD Display". So to see if ColorSync runs accross the the monitor's
+ // profile so I can select it, I have to compare the paths, and then save the name
+ // I'm currently getting.
+
+ CMProfileRef prof;
+ CMProfileLocation profLoc;
+
+ UInt32 locationSize = cmCurrentProfileLocationSize;
+
+ // Get the main GDevice.
+ CGDirectDisplayID theAVID = CGMainDisplayID();
+
+ // Get the profile for that AVID.
+ CMError err = CMGetProfileByAVID(theAVID, &prof);
+
+ // Get location (FSRef) for that profile
+ err = NCMGetProfileLocation(prof, &profLoc, &locationSize);
+
+ const char *monitor_profile_path = NULL;
+ char monitor_profile_name[256] = { '\0' };
+
+ if(profLoc.locType == cmPathBasedProfile)
+ {
+ monitor_profile_path = profLoc.u.pathLoc.path;
+ }
+
+
+
+ // build profile map and name array
+ IterateData i_data = { name_array, profile_map, monitor_profile_path, monitor_profile_name };
+
+ UInt32 seed = 0;
+ UInt32 count;
+
+ CMProfileIterateUPP iterateUPP;
+ iterateUPP = NewCMProfileIterateUPP((CMProfileIterateProcPtr)&profIterateProc);
+
+ err = CMIterateColorSyncFolder(iterateUPP, &seed, &count, (void *)&i_data);
+
+ DisposeCMProfileIterateUPP(iterateUPP);
+
+
+
+ // set up menu with array
+ [profileMenu addItemsWithTitles:name_array];
+
+
+
+ // choose the display profile name if we have it (usually "Display")
+ if(monitor_profile_name[0] != '\0')
+ {
+ [profileMenu selectItemWithTitle:[NSString stringWithUTF8String:monitor_profile_name]];
+ }
+ else if(monitor_profile_path != NULL)
+ {
+ // somehow the display profile wasn't found during iteration
+ // so let's add it
+ CFStringRef m_name;
+
+ err = CMCopyProfileDescriptionString(prof, &m_name);
+
+ NSString *ns_name = (NSString *)monitor_profile_name;
+
+ [profile_map setObject:[NSString stringWithUTF8String:monitor_profile_path]
+ forKey:ns_name ];
+
+ [profileMenu addItemWithTitle:ns_name];
+
+ [profileMenu selectItemWithTitle:ns_name];
+
+ CFRelease(m_name);
+ }
+
+ return self;
+}
+
+- (void)dealloc {
+ [name_array release];
+ [profile_map release];
+
+ [super dealloc];
+}
+
+- (IBAction)clickOK:(NSButton *)sender {
+ [NSApp stopModal];
+}
+
+- (IBAction)clickCancel:(NSButton *)sender {
+ [NSApp abortModal];
+}
+
+- (NSWindow *)getWindow {
+ return window;
+}
+
+- (BOOL)getMonitorProfile:(char *)path bufferSize:(int)buf_len {
+ NSString *icc_name = [[profileMenu selectedItem] title];
+ NSString *icc_path = [profile_map objectForKey:icc_name];
+
+ return [icc_path getCString:path maxLength:buf_len encoding:NSMacOSRomanStringEncoding];
+}
+
+@end
diff --git a/src/aftereffects/vc/vc9/OpenColorABI.h b/src/aftereffects/vc/vc9/OpenColorABI.h
new file mode 100644
index 0000000..acbb8b4
--- /dev/null
+++ b/src/aftereffects/vc/vc9/OpenColorABI.h
@@ -0,0 +1,100 @@
+/*
+Copyright (c) 2003-2010 Sony Pictures Imageworks Inc., et al.
+All Rights Reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are
+met:
+* Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in the
+ documentation and/or other materials provided with the distribution.
+* Neither the name of Sony Pictures Imageworks nor the names of its
+ contributors may be used to endorse or promote products derived from
+ this software without specific prior written permission.
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+
+#ifndef INCLUDED_OCIO_OPENCOLORABI_H
+#define INCLUDED_OCIO_OPENCOLORABI_H
+
+// Makefile configuration options
+#define OCIO_NAMESPACE OpenColorIO
+#define OCIO_USE_BOOST_PTR 1
+#define OCIO_VERSION "1.0.7"
+#define OCIO_VERSION_NS v1
+
+/* Version as a single 4-byte hex number, e.g. 0x01050200 == 1.5.2
+ Use this for numeric comparisons, e.g. #if OCIO_VERSION_HEX >= ...
+ Note: in the case where SOVERSION is overridden at compile-time,
+ this will reflect the original API version number.
+ */
+#define OCIO_VERSION_HEX ((1 << 24) | \
+ (0 << 16) | \
+ (7 << 8))
+
+
+// Namespace / version mojo
+#define OCIO_NAMESPACE_ENTER namespace OCIO_NAMESPACE { namespace OCIO_VERSION_NS
+#define OCIO_NAMESPACE_EXIT using namespace OCIO_VERSION_NS; }
+#define OCIO_NAMESPACE_USING using namespace OCIO_NAMESPACE;
+
+// shared_ptr / dynamic_pointer_cast
+#if OCIO_USE_BOOST_PTR
+#include <boost/shared_ptr.hpp>
+#define OCIO_SHARED_PTR boost::shared_ptr
+#define OCIO_DYNAMIC_POINTER_CAST boost::dynamic_pointer_cast
+#elif __GNUC__ >= 4
+#include <tr1/memory>
+#define OCIO_SHARED_PTR std::tr1::shared_ptr
+#define OCIO_DYNAMIC_POINTER_CAST std::tr1::dynamic_pointer_cast
+#else
+#error OCIO needs gcc 4 or later to get access to <tr1/memory> (or specify USE_BOOST_PTR instead)
+#endif
+
+#ifdef OpenColorIO_SHARED
+ // If supported, define OCIOEXPORT, OCIOHIDDEN
+ // (used to choose which symbols to export from OpenColorIO)
+ #if defined __linux__ || __APPLE__
+ #if __GNUC__ >= 4
+ #define OCIOEXPORT __attribute__ ((visibility("default")))
+ #define OCIOHIDDEN __attribute__ ((visibility("hidden")))
+ #else
+ #define OCIOEXPORT
+ #define OCIOHIDDEN
+ #endif
+ #elif defined(_WIN32) || defined(_WIN64) || defined(_WINDOWS) || defined(_MSC_VER)
+ // Windows requires you to export from the main library and then import in any others
+ #if defined OpenColorIO_EXPORTS
+ #define OCIOEXPORT __declspec(dllexport)
+ #else
+ #define OCIOEXPORT __declspec(dllimport)
+ #endif
+ #define OCIOHIDDEN
+ #else // Others platforms not supported atm
+ #define OCIOEXPORT
+ #define OCIOHIDDEN
+ #endif
+#else
+ #define OCIOEXPORT
+ #define OCIOHIDDEN
+#endif
+
+// Windows defines these troublesome macros that collide with std::limits
+#if defined(_WIN32) || defined(_WIN64) || defined(_WINDOWS) || defined(_MSC_VER)
+#undef min
+#undef max
+#endif
+
+#endif // INCLUDED_OCIO_OPENCOLORABI_H
diff --git a/src/aftereffects/vc/vc9/OpenColorIO.vcproj b/src/aftereffects/vc/vc9/OpenColorIO.vcproj
new file mode 100644
index 0000000..45b17d2
--- /dev/null
+++ b/src/aftereffects/vc/vc9/OpenColorIO.vcproj
@@ -0,0 +1,667 @@
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="9.00"
+ Name="OpenColorIO"
+ ProjectGUID="{8B308357-C548-49D9-9134-8A61D57D524C}"
+ RootNamespace="OpenColorIO"
+ Keyword="Win32Proj"
+ TargetFrameworkVersion="196613"
+ >
+ <Platforms>
+ <Platform
+ Name="Win32"
+ />
+ <Platform
+ Name="x64"
+ />
+ </Platforms>
+ <ToolFiles>
+ </ToolFiles>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory="build\$(PlatformName)\$(ConfigurationName)"
+ IntermediateDirectory="$(ProjectName)\$(PlatformName)\$(ConfigurationName)"
+ ConfigurationType="4"
+ CharacterSet="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories="..\..\..\..\export;..\..\..\..\src\core;..\..\..\..\ext\boost_1_48_0;..\..\..\..\ext\tinyxml;&quot;..\..\..\..\ext\yaml-cpp\include&quot;;.\"
+ PreprocessorDefinitions="TIXML_USE_STL"
+ MinimalRebuild="true"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="3"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ DebugInformationFormat="4"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLibrarianTool"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Debug|x64"
+ OutputDirectory="build\$(PlatformName)\$(ConfigurationName)"
+ IntermediateDirectory="$(ProjectName)\$(PlatformName)\$(ConfigurationName)"
+ ConfigurationType="4"
+ CharacterSet="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ TargetEnvironment="3"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories="..\..\..\..\export;..\..\..\..\src\core;..\..\..\..\ext\boost_1_48_0;..\..\..\..\ext\tinyxml;&quot;..\..\..\..\ext\yaml-cpp\include&quot;;.\"
+ PreprocessorDefinitions="TIXML_USE_STL"
+ MinimalRebuild="true"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="3"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLibrarianTool"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory="build\$(PlatformName)\$(ConfigurationName)"
+ IntermediateDirectory="$(ProjectName)\$(PlatformName)\$(ConfigurationName)"
+ ConfigurationType="4"
+ CharacterSet="1"
+ WholeProgramOptimization="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ EnableIntrinsicFunctions="true"
+ AdditionalIncludeDirectories="..\..\..\..\export;..\..\..\..\src\core;..\..\..\..\ext\boost_1_48_0;..\..\..\..\ext\tinyxml;&quot;..\..\..\..\ext\yaml-cpp\include&quot;;.\"
+ PreprocessorDefinitions="NDEBUG;TIXML_USE_STL"
+ RuntimeLibrary="2"
+ EnableFunctionLevelLinking="true"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLibrarianTool"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|x64"
+ OutputDirectory="build\$(PlatformName)\$(ConfigurationName)"
+ IntermediateDirectory="$(ProjectName)\$(PlatformName)\$(ConfigurationName)"
+ ConfigurationType="4"
+ CharacterSet="1"
+ WholeProgramOptimization="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ TargetEnvironment="3"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ EnableIntrinsicFunctions="true"
+ AdditionalIncludeDirectories="..\..\..\..\export;..\..\..\..\src\core;..\..\..\..\ext\boost_1_48_0;..\..\..\..\ext\tinyxml;&quot;..\..\..\..\ext\yaml-cpp\include&quot;;.\"
+ PreprocessorDefinitions="NDEBUG;TIXML_USE_STL"
+ RuntimeLibrary="2"
+ EnableFunctionLevelLinking="true"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLibrarianTool"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <Filter
+ Name="Source Files"
+ Filter="cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx"
+ UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}"
+ >
+ <File
+ RelativePath="..\..\..\..\src\core\AllocationOp.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\..\src\core\AllocationTransform.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\..\src\core\Baker.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\..\src\core\Caching.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\..\src\core\CDLTransform.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\..\src\core\ColorSpace.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\..\src\core\ColorSpaceTransform.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\..\src\core\Config.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\..\src\core\Context.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\..\src\core\DisplayTransform.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\..\src\core\Exception.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\..\src\core\ExponentOps.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\..\src\core\ExponentTransform.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\..\src\core\FileFormat3DL.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\..\src\core\FileFormatCC.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\..\src\core\FileFormatCCC.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\..\src\core\FileFormatCSP.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\..\src\core\FileFormatHDL.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\..\src\core\FileFormatIridasCube.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\..\src\core\FileFormatIridasItx.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\core\FileFormatIridasLook.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\..\src\core\FileFormatPandora.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\..\src\core\FileFormatSpi1D.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\..\src\core\FileFormatSpi3D.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\..\src\core\FileFormatSpiMtx.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\..\src\core\FileFormatTruelight.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\..\src\core\FileFormatVF.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\..\src\core\FileTransform.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\..\src\core\GpuShaderDesc.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\..\src\core\GpuShaderUtils.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\..\src\core\GroupTransform.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\..\src\core\HashUtils.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\..\src\core\ImageDesc.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\..\src\core\ImagePacking.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\..\src\core\Logging.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\..\src\core\LogOps.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\..\src\core\LogTransform.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\..\src\core\Look.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\core\LookParse.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\..\src\core\LookTransform.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\..\src\core\Lut1DOp.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\..\src\core\Lut3DOp.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\..\src\core\MathUtils.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\..\src\core\MatrixOps.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\..\src\core\MatrixTransform.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\..\src\core\md5\md5.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\core\NoOps.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\..\src\core\OCIOYaml.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\..\src\core\Op.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\core\OpOptimizers.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\..\src\core\ParseUtils.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\..\src\core\PathUtils.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\..\src\core\Processor.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\..\src\core\pystring\pystring.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\..\src\core\ScanlineHelper.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\..\src\core\Transform.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\..\src\core\TruelightOp.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\..\src\core\TruelightTransform.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\..\src\core\UnitTest.cpp"
+ >
+ </File>
+ </Filter>
+ <Filter
+ Name="Header Files"
+ Filter="h;hpp;hxx;hm;inl;inc;xsd"
+ UniqueIdentifier="{93995380-89BD-4b04-88EB-625FBE52EBFB}"
+ >
+ <File
+ RelativePath="..\..\..\..\src\core\AllocationOp.h"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\..\src\core\CDLTransform.h"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\..\src\core\ExponentOps.h"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\..\src\core\FileTransform.h"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\..\src\core\GpuShaderUtils.h"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\..\src\core\HashUtils.h"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\..\src\core\ImagePacking.h"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\..\src\core\Logging.h"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\..\src\core\LogOps.h"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\core\LookParse.h"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\..\src\core\Lut1DOp.h"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\..\src\core\Lut3DOp.h"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\..\src\core\MathUtils.h"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\..\src\core\MatrixOps.h"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\..\src\core\md5\md5.h"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\..\src\core\Mutex.h"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\core\NoOps.h"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\..\src\core\OCIOYaml.h"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\..\src\core\Op.h"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\..\src\core\OpBuilders.h"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\..\export\OpenColorIO\OpenColorIO.h"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\..\export\OpenColorIO\OpenColorTransforms.h"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\..\export\OpenColorIO\OpenColorTypes.h"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\..\src\core\ParseUtils.h"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\..\src\core\PathUtils.h"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\..\src\core\Platform.h"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\..\src\core\PrivateTypes.h"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\..\src\core\Processor.h"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\..\src\core\pystring\pystring.h"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\..\src\core\ScanlineHelper.h"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\..\src\core\SSE.h"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\..\src\core\TruelightOp.h"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\..\src\core\UnitTest.h"
+ >
+ </File>
+ </Filter>
+ <Filter
+ Name="Resource Files"
+ Filter="rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav"
+ UniqueIdentifier="{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}"
+ >
+ </Filter>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
diff --git a/src/aftereffects/vc/vc9/aftereffects/OpenColorIO_AE.sln b/src/aftereffects/vc/vc9/aftereffects/OpenColorIO_AE.sln
new file mode 100644
index 0000000..61155eb
--- /dev/null
+++ b/src/aftereffects/vc/vc9/aftereffects/OpenColorIO_AE.sln
@@ -0,0 +1,57 @@
+
+Microsoft Visual Studio Solution File, Format Version 10.00
+# Visual Studio 2008
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "OpenColorIO_AE", "OpenColorIO_AE.vcproj", "{78FCC6BC-06A9-43AE-827A-1B68FFB7D75F}"
+ ProjectSection(ProjectDependencies) = postProject
+ {069FB60C-57CE-4D0F-9EC2-068E2A3F2930} = {069FB60C-57CE-4D0F-9EC2-068E2A3F2930}
+ {8B308357-C548-49D9-9134-8A61D57D524C} = {8B308357-C548-49D9-9134-8A61D57D524C}
+ {A19BA95E-D8ED-4958-883B-32561AF905EA} = {A19BA95E-D8ED-4958-883B-32561AF905EA}
+ {CC244BA5-4CA8-4B4F-B4CA-3394BF9E9FED} = {CC244BA5-4CA8-4B4F-B4CA-3394BF9E9FED}
+ {F1DAC6DE-348A-4215-87B2-7584578291AC} = {F1DAC6DE-348A-4215-87B2-7584578291AC}
+ EndProjectSection
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "OpenColorIO", "..\OpenColorIO.vcproj", "{8B308357-C548-49D9-9134-8A61D57D524C}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "lcms", "..\ext\lcms.vcproj", "{069FB60C-57CE-4D0F-9EC2-068E2A3F2930}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "tinyxml", "..\ext\tinyxml.vcproj", "{A19BA95E-D8ED-4958-883B-32561AF905EA}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "yaml", "..\ext\yaml.vcproj", "{F1DAC6DE-348A-4215-87B2-7584578291AC}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "glew", "..\ext\glew.vcproj", "{CC244BA5-4CA8-4B4F-B4CA-3394BF9E9FED}"
+EndProject
+Global
+ GlobalSection(SolutionConfigurationPlatforms) = preSolution
+ Debug|x64 = Debug|x64
+ Release|x64 = Release|x64
+ EndGlobalSection
+ GlobalSection(ProjectConfigurationPlatforms) = postSolution
+ {78FCC6BC-06A9-43AE-827A-1B68FFB7D75F}.Debug|x64.ActiveCfg = Debug|x64
+ {78FCC6BC-06A9-43AE-827A-1B68FFB7D75F}.Debug|x64.Build.0 = Debug|x64
+ {78FCC6BC-06A9-43AE-827A-1B68FFB7D75F}.Release|x64.ActiveCfg = Release|x64
+ {78FCC6BC-06A9-43AE-827A-1B68FFB7D75F}.Release|x64.Build.0 = Release|x64
+ {8B308357-C548-49D9-9134-8A61D57D524C}.Debug|x64.ActiveCfg = Debug|x64
+ {8B308357-C548-49D9-9134-8A61D57D524C}.Debug|x64.Build.0 = Debug|x64
+ {8B308357-C548-49D9-9134-8A61D57D524C}.Release|x64.ActiveCfg = Release|x64
+ {8B308357-C548-49D9-9134-8A61D57D524C}.Release|x64.Build.0 = Release|x64
+ {069FB60C-57CE-4D0F-9EC2-068E2A3F2930}.Debug|x64.ActiveCfg = Debug|x64
+ {069FB60C-57CE-4D0F-9EC2-068E2A3F2930}.Debug|x64.Build.0 = Debug|x64
+ {069FB60C-57CE-4D0F-9EC2-068E2A3F2930}.Release|x64.ActiveCfg = Release|x64
+ {069FB60C-57CE-4D0F-9EC2-068E2A3F2930}.Release|x64.Build.0 = Release|x64
+ {A19BA95E-D8ED-4958-883B-32561AF905EA}.Debug|x64.ActiveCfg = Debug|x64
+ {A19BA95E-D8ED-4958-883B-32561AF905EA}.Debug|x64.Build.0 = Debug|x64
+ {A19BA95E-D8ED-4958-883B-32561AF905EA}.Release|x64.ActiveCfg = Release|x64
+ {A19BA95E-D8ED-4958-883B-32561AF905EA}.Release|x64.Build.0 = Release|x64
+ {F1DAC6DE-348A-4215-87B2-7584578291AC}.Debug|x64.ActiveCfg = Debug|x64
+ {F1DAC6DE-348A-4215-87B2-7584578291AC}.Debug|x64.Build.0 = Debug|x64
+ {F1DAC6DE-348A-4215-87B2-7584578291AC}.Release|x64.ActiveCfg = Release|x64
+ {F1DAC6DE-348A-4215-87B2-7584578291AC}.Release|x64.Build.0 = Release|x64
+ {CC244BA5-4CA8-4B4F-B4CA-3394BF9E9FED}.Debug|x64.ActiveCfg = Debug|x64
+ {CC244BA5-4CA8-4B4F-B4CA-3394BF9E9FED}.Debug|x64.Build.0 = Debug|x64
+ {CC244BA5-4CA8-4B4F-B4CA-3394BF9E9FED}.Release|x64.ActiveCfg = Release|x64
+ {CC244BA5-4CA8-4B4F-B4CA-3394BF9E9FED}.Release|x64.Build.0 = Release|x64
+ EndGlobalSection
+ GlobalSection(SolutionProperties) = preSolution
+ HideSolutionNode = FALSE
+ EndGlobalSection
+EndGlobal
diff --git a/src/aftereffects/vc/vc9/aftereffects/OpenColorIO_AE.vcproj b/src/aftereffects/vc/vc9/aftereffects/OpenColorIO_AE.vcproj
new file mode 100644
index 0000000..c95c0b0
--- /dev/null
+++ b/src/aftereffects/vc/vc9/aftereffects/OpenColorIO_AE.vcproj
@@ -0,0 +1,448 @@
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="9.00"
+ Name="OpenColorIO_AE"
+ ProjectGUID="{78FCC6BC-06A9-43AE-827A-1B68FFB7D75F}"
+ RootNamespace="OpenColorIO_AE"
+ TargetFrameworkVersion="131072"
+ >
+ <Platforms>
+ <Platform
+ Name="x64"
+ />
+ </Platforms>
+ <ToolFiles>
+ </ToolFiles>
+ <Configurations>
+ <Configuration
+ Name="Debug|x64"
+ OutputDirectory="build\$(PlatformName)\$(ConfigurationName)"
+ IntermediateDirectory="$(ProjectName)\$(PlatformName)\$(ConfigurationName)"
+ ConfigurationType="2"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ UseOfMFC="0"
+ ATLMinimizesCRunTimeLibraryUsage="false"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ PreprocessorDefinitions="_DEBUG"
+ MkTypLibCompatible="true"
+ SuppressStartupBanner="true"
+ TargetEnvironment="3"
+ TypeLibraryName=".\Debug/OpenColorIO_AE.tlb"
+ HeaderFileName=""
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories="..\;..\..\..;..\..\..\..\apps\ociobakelut;..\..\..\..\..\export;..\..\..\..\..\ext\boost_1_48_0;&quot;..\..\..\..\..\ext\lcms2-2.1\include&quot;;&quot;..\..\..\..\..\ext\Adobe After Effects CS5 SDK\Examples\Headers&quot;;&quot;..\..\..\..\..\ext\Adobe After Effects CS5 SDK\Examples\Headers\SP&quot;;&quot;..\..\..\..\..\ext\Adobe After Effects CS5 SDK\Examples\Headers\Win&quot;;&quot;..\..\..\..\..\ext\Adobe After Effects CS5 SDK\Examples\Resources&quot;;&quot;..\..\..\..\..\ext\Adobe After Effects CS5 SDK\Examples\Util&quot;;&quot;..\..\..\..\..\ext\glew-1.7.0\include&quot;"
+ PreprocessorDefinitions="MSWindows;WIN32;_DEBUG;_WINDOWS;GLEW_STATIC"
+ RuntimeLibrary="3"
+ UsePrecompiledHeader="0"
+ PrecompiledHeaderThrough="AE_Effect.h"
+ AssemblerOutput="4"
+ BrowseInformation="1"
+ WarningLevel="2"
+ WarnAsError="false"
+ SuppressStartupBanner="true"
+ DebugInformationFormat="3"
+ CompileAs="0"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ PreprocessorDefinitions="_DEBUG"
+ Culture="1033"
+ AdditionalIncludeDirectories=""
+ ShowProgress="true"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ IgnoreImportLibrary="true"
+ AdditionalDependencies="Mscms.lib opengl32.lib"
+ ShowProgress="0"
+ OutputFile="C:\Program Files\Adobe\Adobe After Effects CS6\Support Files\Plug-ins\OpenColorIO.aex"
+ LinkIncremental="2"
+ SuppressStartupBanner="true"
+ IgnoreDefaultLibraryNames="libcmt.lib"
+ GenerateDebugInformation="true"
+ ProgramDatabaseFile="$(IntDir)\OpenColorIO_AE.pdb"
+ SubSystem="2"
+ RandomizedBaseAddress="1"
+ DataExecutionPrevention="0"
+ ImportLibrary="$(IntDir)\OpenColorIO_AE.lib"
+ TargetMachine="17"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ UseFAT32Workaround="true"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|x64"
+ OutputDirectory="build\$(PlatformName)\$(ConfigurationName)"
+ IntermediateDirectory="$(ProjectName)\$(PlatformName)\$(ConfigurationName)"
+ ConfigurationType="2"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+ UseOfMFC="0"
+ ATLMinimizesCRunTimeLibraryUsage="false"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ PreprocessorDefinitions="_DEBUG"
+ MkTypLibCompatible="true"
+ SuppressStartupBanner="true"
+ TargetEnvironment="3"
+ TypeLibraryName=".\Debug/OpenColorIO_AE.tlb"
+ HeaderFileName=""
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ AdditionalIncludeDirectories="..\;..\..\..;..\..\..\..\apps\ociobakelut;..\..\..\..\..\export;..\..\..\..\..\ext\boost_1_48_0;&quot;..\..\..\..\..\ext\lcms2-2.1\include&quot;;&quot;..\..\..\..\..\ext\Adobe After Effects CS5 SDK\Examples\Headers&quot;;&quot;..\..\..\..\..\ext\Adobe After Effects CS5 SDK\Examples\Headers\SP&quot;;&quot;..\..\..\..\..\ext\Adobe After Effects CS5 SDK\Examples\Headers\Win&quot;;&quot;..\..\..\..\..\ext\Adobe After Effects CS5 SDK\Examples\Resources&quot;;&quot;..\..\..\..\..\ext\Adobe After Effects CS5 SDK\Examples\Util&quot;;&quot;..\..\..\..\..\ext\glew-1.7.0\include&quot;"
+ PreprocessorDefinitions="MSWindows;WIN32;NDEBUG;_WINDOWS;GLEW_STATIC"
+ RuntimeLibrary="2"
+ UsePrecompiledHeader="0"
+ PrecompiledHeaderThrough="AE_Effect.h"
+ AssemblerOutput="4"
+ BrowseInformation="1"
+ WarningLevel="2"
+ WarnAsError="false"
+ SuppressStartupBanner="true"
+ DebugInformationFormat="0"
+ CompileAs="0"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ PreprocessorDefinitions="NDEBUG"
+ Culture="1033"
+ AdditionalIncludeDirectories=""
+ ShowProgress="true"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ IgnoreImportLibrary="true"
+ AdditionalDependencies="Mscms.lib opengl32.lib"
+ ShowProgress="0"
+ OutputFile="$(OutDir)\OpenColorIO.aex"
+ LinkIncremental="2"
+ SuppressStartupBanner="true"
+ IgnoreDefaultLibraryNames="libcmt.lib"
+ GenerateDebugInformation="false"
+ ProgramDatabaseFile="$(IntDir)\OpenColorIO_AE.pdb"
+ SubSystem="2"
+ RandomizedBaseAddress="1"
+ DataExecutionPrevention="0"
+ ImportLibrary="$(IntDir)\OpenColorIO_AE.lib"
+ TargetMachine="17"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ UseFAT32Workaround="true"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <Filter
+ Name="Supporting Code"
+ Filter="cpp;c;cxx;rc;def;r;odl;hpj;bat;for;f90"
+ >
+ <File
+ RelativePath="..\..\..\..\..\ext\Adobe After Effects CS5 SDK\Examples\Util\AEGP_SuiteHandler.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\..\..\ext\Adobe After Effects CS5 SDK\Examples\Util\MissingSuiteError.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\..\apps\ociobakelut\ocioicc.cpp"
+ >
+ </File>
+ </Filter>
+ <Filter
+ Name="Header Files"
+ Filter="h;hpp;hxx;hm;inl;fi;fd"
+ >
+ <File
+ RelativePath="..\..\..\..\..\ext\Adobe After Effects CS5 SDK\Examples\Util\AEGP_SuiteHandler.h"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\DrawbotBot.h"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\..\apps\ociobakelut\ocioicc.h"
+ >
+ </File>
+ <File
+ RelativePath="..\OpenColorABI.h"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\OpenColorIO_AE.h"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\OpenColorIO_AE_Context.h"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\OpenColorIO_AE_Dialogs.h"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\OpenColorIO_AE_GL.h"
+ >
+ </File>
+ <Filter
+ Name="AE"
+ >
+ <File
+ RelativePath="..\..\..\Headers\A.h"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\Headers\AE_AdvEffectSuites.h"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\Headers\AE_Effect.h"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\Headers\AE_EffectCB.h"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\Headers\AE_EffectCBSuites.h"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\Headers\AE_EffectSuites.h"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\Util\AE_EffectSuitesHelper.h"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\Headers\AE_EffectUI.h"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\Headers\AE_GeneralPlug.h"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\Headers\AE_GeneralPlugOld.h"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\Headers\AE_IO.h"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\Headers\AE_Macros.h"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\Util\AEFX_ArbParseHelper.h"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\Util\AEGP_SuiteHandler.h"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\Util\entry.h"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\Headers\FIEL_Public.h"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\Util\Param_Utils.h"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\Headers\PF_Masks.h"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\Headers\PR_Public.h"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\Headers\PT_Public.h"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\Util\String_Utils.h"
+ >
+ </File>
+ </Filter>
+ </Filter>
+ <Filter
+ Name="Resource Files"
+ Filter="ico;cur;bmp;dlg;rc2;rct;bin;cnt;rtf;gif;jpg;jpeg;jpe"
+ >
+ <File
+ RelativePath="..\..\..\win\OpenColorIO.rc"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\OpenColorIO_AE_PiPL.r"
+ >
+ <FileConfiguration
+ Name="Debug|x64"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="Compiling the PiPL"
+ CommandLine="cl /I &quot;$(ProjectDir)..\..\..\..\..\ext\Adobe After Effects CS5 SDK\Examples\Headers&quot; /D USE_AE_EFFECT_VERS /EP &quot;..\..\..\$(InputName).r&quot; &gt; &quot;$(IntDir)&quot;\\&quot;$(InputName).rr&quot;&#x0D;&#x0A;&quot;$(ProjectDir)..\..\..\..\..\ext\Adobe After Effects CS5 SDK\Examples\Resources\PiPLTool&quot; &quot;$(IntDir)\$(InputName).rr&quot; &quot;$(IntDir)\$(InputName).rrc&quot;&#x0D;&#x0A;cl /D &quot;MSWindows&quot; /EP $(IntDir)\$(InputName).rrc &gt; &quot;$(ProjectDir)&quot;\\&quot;$(InputName)&quot;.rc&#x0D;&#x0A;"
+ Outputs="$(ProjectDir)\$(InputName).rc"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|x64"
+ >
+ <Tool
+ Name="VCCustomBuildTool"
+ Description="Compiling the PiPL"
+ CommandLine="cl /I &quot;$(ProjectDir)..\..\..\..\..\ext\Adobe After Effects CS5 SDK\Examples\Headers&quot; /D USE_AE_EFFECT_VERS /EP &quot;..\..\..\$(InputName).r&quot; &gt; &quot;$(IntDir)&quot;\\&quot;$(InputName).rr&quot;&#x0D;&#x0A;&quot;$(ProjectDir)..\..\..\..\..\ext\Adobe After Effects CS5 SDK\Examples\Resources\PiPLTool&quot; &quot;$(IntDir)\$(InputName).rr&quot; &quot;$(IntDir)\$(InputName).rrc&quot;&#x0D;&#x0A;cl /D &quot;MSWindows&quot; /EP $(IntDir)\$(InputName).rrc &gt; &quot;$(ProjectDir)&quot;\\&quot;$(InputName)&quot;.rc&#x0D;&#x0A;"
+ Outputs="$(ProjectDir)\$(InputName).rc"
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath=".\OpenColorIO_AE_PiPL.rc"
+ >
+ <FileConfiguration
+ Name="Debug|x64"
+ >
+ <Tool
+ Name="VCResourceCompilerTool"
+ AdditionalIncludeDirectories=""
+ ShowProgress="true"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|x64"
+ >
+ <Tool
+ Name="VCResourceCompilerTool"
+ AdditionalIncludeDirectories=""
+ ShowProgress="true"
+ />
+ </FileConfiguration>
+ </File>
+ </Filter>
+ <File
+ RelativePath="..\..\..\DrawbotBot.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\OpenColorIO_AE.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\OpenColorIO_AE_ArbData.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\OpenColorIO_AE_Context.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\win\OpenColorIO_AE_Dialogs_Win.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\win\OpenColorIO_AE_GL_Win.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\OpenColorIO_AE_UI.cpp"
+ >
+ </File>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
diff --git a/src/aftereffects/vc/vc9/ext/glew.vcproj b/src/aftereffects/vc/vc9/ext/glew.vcproj
new file mode 100644
index 0000000..dad7be7
--- /dev/null
+++ b/src/aftereffects/vc/vc9/ext/glew.vcproj
@@ -0,0 +1,319 @@
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="9.00"
+ Name="glew"
+ ProjectGUID="{CC244BA5-4CA8-4B4F-B4CA-3394BF9E9FED}"
+ RootNamespace="glew"
+ Keyword="Win32Proj"
+ TargetFrameworkVersion="196613"
+ >
+ <Platforms>
+ <Platform
+ Name="Win32"
+ />
+ <Platform
+ Name="x64"
+ />
+ </Platforms>
+ <ToolFiles>
+ </ToolFiles>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory="build\$(PlatformName)\$(ConfigurationName)"
+ IntermediateDirectory="$(ProjectName)\$(PlatformName)\$(ConfigurationName)"
+ ConfigurationType="4"
+ CharacterSet="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories="..\..\..\..\..\ext\glew-1.7.0\include"
+ PreprocessorDefinitions="WIN32;_DEBUG;_LIB;GLEW_STATIC"
+ MinimalRebuild="true"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="3"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ DebugInformationFormat="4"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLibrarianTool"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory="build\$(PlatformName)\$(ConfigurationName)"
+ IntermediateDirectory="$(ProjectName)\$(PlatformName)\$(ConfigurationName)"
+ ConfigurationType="4"
+ CharacterSet="1"
+ WholeProgramOptimization="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ EnableIntrinsicFunctions="true"
+ AdditionalIncludeDirectories="..\..\..\..\..\ext\glew-1.7.0\include"
+ PreprocessorDefinitions="WIN32;NDEBUG;_LIB;GLEW_STATIC"
+ RuntimeLibrary="2"
+ EnableFunctionLevelLinking="true"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLibrarianTool"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Debug|x64"
+ OutputDirectory="build\$(PlatformName)\$(ConfigurationName)"
+ IntermediateDirectory="$(ProjectName)\$(PlatformName)\$(ConfigurationName)"
+ ConfigurationType="4"
+ CharacterSet="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ TargetEnvironment="3"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories="..\..\..\..\..\ext\glew-1.7.0\include"
+ PreprocessorDefinitions="WIN32;_DEBUG;_LIB;GLEW_STATIC"
+ MinimalRebuild="true"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="3"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLibrarianTool"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|x64"
+ OutputDirectory="build\$(PlatformName)\$(ConfigurationName)"
+ IntermediateDirectory="$(ProjectName)\$(PlatformName)\$(ConfigurationName)"
+ ConfigurationType="4"
+ CharacterSet="1"
+ WholeProgramOptimization="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ TargetEnvironment="3"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ EnableIntrinsicFunctions="true"
+ AdditionalIncludeDirectories="..\..\..\..\..\ext\glew-1.7.0\include"
+ PreprocessorDefinitions="WIN32;NDEBUG;_LIB;GLEW_STATIC"
+ RuntimeLibrary="2"
+ EnableFunctionLevelLinking="true"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLibrarianTool"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <Filter
+ Name="Source Files"
+ Filter="cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx"
+ UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}"
+ >
+ <File
+ RelativePath="..\..\..\..\..\ext\glew-1.7.0\src\glew.c"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\..\..\ext\glew-1.7.0\src\glewinfo.c"
+ >
+ </File>
+ </Filter>
+ <Filter
+ Name="Header Files"
+ Filter="h;hpp;hxx;hm;inl;inc;xsd"
+ UniqueIdentifier="{93995380-89BD-4b04-88EB-625FBE52EBFB}"
+ >
+ <File
+ RelativePath="..\..\..\..\..\ext\glew-1.7.0\include\GL\glew.h"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\..\..\ext\glew-1.7.0\include\GL\glxew.h"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\..\..\ext\glew-1.7.0\include\GL\wglew.h"
+ >
+ </File>
+ </Filter>
+ <Filter
+ Name="Resource Files"
+ Filter="rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav"
+ UniqueIdentifier="{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}"
+ >
+ </Filter>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
diff --git a/src/aftereffects/vc/vc9/ext/lcms.vcproj b/src/aftereffects/vc/vc9/ext/lcms.vcproj
new file mode 100644
index 0000000..d8dfbb4
--- /dev/null
+++ b/src/aftereffects/vc/vc9/ext/lcms.vcproj
@@ -0,0 +1,407 @@
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="9.00"
+ Name="lcms"
+ ProjectGUID="{069FB60C-57CE-4D0F-9EC2-068E2A3F2930}"
+ RootNamespace="lcms"
+ Keyword="Win32Proj"
+ TargetFrameworkVersion="196613"
+ >
+ <Platforms>
+ <Platform
+ Name="Win32"
+ />
+ <Platform
+ Name="x64"
+ />
+ </Platforms>
+ <ToolFiles>
+ </ToolFiles>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory="build\$(PlatformName)\$(ConfigurationName)"
+ IntermediateDirectory="$(ProjectName)\$(PlatformName)\$(ConfigurationName)"
+ ConfigurationType="4"
+ CharacterSet="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories="&quot;..\..\..\..\..\ext\lcms2-2.1\include&quot;"
+ PreprocessorDefinitions="WIN32;_DEBUG;_LIB"
+ MinimalRebuild="true"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="3"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ DebugInformationFormat="4"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLibrarianTool"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory="build\$(PlatformName)\$(ConfigurationName)"
+ IntermediateDirectory="$(ProjectName)\$(PlatformName)\$(ConfigurationName)"
+ ConfigurationType="4"
+ CharacterSet="1"
+ WholeProgramOptimization="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ EnableIntrinsicFunctions="true"
+ AdditionalIncludeDirectories="&quot;..\..\..\..\..\ext\lcms2-2.1\include&quot;"
+ PreprocessorDefinitions="WIN32;NDEBUG;_LIB"
+ RuntimeLibrary="2"
+ EnableFunctionLevelLinking="true"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLibrarianTool"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Debug|x64"
+ OutputDirectory="build\$(PlatformName)\$(ConfigurationName)"
+ IntermediateDirectory="$(ProjectName)\$(PlatformName)\$(ConfigurationName)"
+ ConfigurationType="4"
+ CharacterSet="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ TargetEnvironment="3"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories="&quot;..\..\..\..\..\ext\lcms2-2.1\include&quot;"
+ PreprocessorDefinitions="WIN32;_DEBUG;_LIB"
+ MinimalRebuild="true"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="3"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLibrarianTool"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|x64"
+ OutputDirectory="build\$(PlatformName)\$(ConfigurationName)"
+ IntermediateDirectory="$(ProjectName)\$(PlatformName)\$(ConfigurationName)"
+ ConfigurationType="4"
+ CharacterSet="1"
+ WholeProgramOptimization="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ TargetEnvironment="3"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ EnableIntrinsicFunctions="true"
+ AdditionalIncludeDirectories="&quot;..\..\..\..\..\ext\lcms2-2.1\include&quot;"
+ PreprocessorDefinitions="WIN32;NDEBUG;_LIB"
+ RuntimeLibrary="2"
+ EnableFunctionLevelLinking="true"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLibrarianTool"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <Filter
+ Name="Source Files"
+ Filter="cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx"
+ UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}"
+ >
+ <File
+ RelativePath="..\..\..\..\..\ext\lcms2-2.1\src\cmscam02.c"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\..\..\ext\lcms2-2.1\src\cmscgats.c"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\..\..\ext\lcms2-2.1\src\cmscnvrt.c"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\..\..\ext\lcms2-2.1\src\cmserr.c"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\..\..\ext\lcms2-2.1\src\cmsgamma.c"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\..\..\ext\lcms2-2.1\src\cmsgmt.c"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\..\..\ext\lcms2-2.1\src\cmsintrp.c"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\..\..\ext\lcms2-2.1\src\cmsio0.c"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\..\..\ext\lcms2-2.1\src\cmsio1.c"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\..\..\ext\lcms2-2.1\src\cmslut.c"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\..\..\ext\lcms2-2.1\src\cmsmd5.c"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\..\..\ext\lcms2-2.1\src\cmsmtrx.c"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\..\..\ext\lcms2-2.1\src\cmsnamed.c"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\..\..\ext\lcms2-2.1\src\cmsopt.c"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\..\..\ext\lcms2-2.1\src\cmspack.c"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\..\..\ext\lcms2-2.1\src\cmspcs.c"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\..\..\ext\lcms2-2.1\src\cmsplugin.c"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\..\..\ext\lcms2-2.1\src\cmsps2.c"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\..\..\ext\lcms2-2.1\src\cmssamp.c"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\..\..\ext\lcms2-2.1\src\cmssm.c"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\..\..\ext\lcms2-2.1\src\cmstypes.c"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\..\..\ext\lcms2-2.1\src\cmsvirt.c"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\..\..\ext\lcms2-2.1\src\cmswtpnt.c"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\..\..\ext\lcms2-2.1\src\cmsxform.c"
+ >
+ </File>
+ </Filter>
+ <Filter
+ Name="Header Files"
+ Filter="h;hpp;hxx;hm;inl;inc;xsd"
+ UniqueIdentifier="{93995380-89BD-4b04-88EB-625FBE52EBFB}"
+ >
+ <File
+ RelativePath="..\..\..\..\..\ext\lcms2-2.1\include\lcms2.h"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\..\..\ext\lcms2-2.1\src\lcms2_internal.h"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\..\..\ext\lcms2-2.1\include\lcms2_plugin.h"
+ >
+ </File>
+ </Filter>
+ <Filter
+ Name="Resource Files"
+ Filter="rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav"
+ UniqueIdentifier="{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}"
+ >
+ </Filter>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
diff --git a/src/aftereffects/vc/vc9/ext/tinyxml.vcproj b/src/aftereffects/vc/vc9/ext/tinyxml.vcproj
new file mode 100644
index 0000000..691f399
--- /dev/null
+++ b/src/aftereffects/vc/vc9/ext/tinyxml.vcproj
@@ -0,0 +1,323 @@
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="9.00"
+ Name="tinyxml"
+ ProjectGUID="{A19BA95E-D8ED-4958-883B-32561AF905EA}"
+ RootNamespace="tinyxml"
+ Keyword="Win32Proj"
+ TargetFrameworkVersion="196613"
+ >
+ <Platforms>
+ <Platform
+ Name="Win32"
+ />
+ <Platform
+ Name="x64"
+ />
+ </Platforms>
+ <ToolFiles>
+ </ToolFiles>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory="build\$(PlatformName)\$(ConfigurationName)"
+ IntermediateDirectory="$(ProjectName)\$(PlatformName)\$(ConfigurationName)"
+ ConfigurationType="4"
+ CharacterSet="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories="..\..\..\..\..\ext\tinyxml"
+ PreprocessorDefinitions="TIXML_USE_STL"
+ MinimalRebuild="true"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="3"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ DebugInformationFormat="4"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLibrarianTool"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Debug|x64"
+ OutputDirectory="build\$(PlatformName)\$(ConfigurationName)"
+ IntermediateDirectory="$(ProjectName)\$(PlatformName)\$(ConfigurationName)"
+ ConfigurationType="4"
+ CharacterSet="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ TargetEnvironment="3"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories="..\..\..\..\..\ext\tinyxml"
+ PreprocessorDefinitions="TIXML_USE_STL"
+ MinimalRebuild="true"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="3"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLibrarianTool"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory="build\$(PlatformName)\$(ConfigurationName)"
+ IntermediateDirectory="$(ProjectName)\$(PlatformName)\$(ConfigurationName)"
+ ConfigurationType="4"
+ CharacterSet="1"
+ WholeProgramOptimization="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ EnableIntrinsicFunctions="true"
+ AdditionalIncludeDirectories="..\..\..\..\..\ext\tinyxml"
+ PreprocessorDefinitions="NDEBUG;TIXML_USE_STL"
+ RuntimeLibrary="2"
+ EnableFunctionLevelLinking="true"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLibrarianTool"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|x64"
+ OutputDirectory="build\$(PlatformName)\$(ConfigurationName)"
+ IntermediateDirectory="$(ProjectName)\$(PlatformName)\$(ConfigurationName)"
+ ConfigurationType="4"
+ CharacterSet="1"
+ WholeProgramOptimization="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ TargetEnvironment="3"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ EnableIntrinsicFunctions="true"
+ AdditionalIncludeDirectories="..\..\..\..\..\ext\tinyxml"
+ PreprocessorDefinitions="NDEBUG;TIXML_USE_STL"
+ RuntimeLibrary="2"
+ EnableFunctionLevelLinking="true"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLibrarianTool"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <Filter
+ Name="Source Files"
+ Filter="cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx"
+ UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}"
+ >
+ <File
+ RelativePath="..\..\..\..\..\ext\tinyxml\tinystr.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\..\..\ext\tinyxml\tinyxml.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\..\..\ext\tinyxml\tinyxmlerror.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\..\..\ext\tinyxml\tinyxmlparser.cpp"
+ >
+ </File>
+ </Filter>
+ <Filter
+ Name="Header Files"
+ Filter="h;hpp;hxx;hm;inl;inc;xsd"
+ UniqueIdentifier="{93995380-89BD-4b04-88EB-625FBE52EBFB}"
+ >
+ <File
+ RelativePath="..\..\..\..\..\ext\tinyxml\tinystr.h"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\..\..\ext\tinyxml\tinyxml.h"
+ >
+ </File>
+ </Filter>
+ <Filter
+ Name="Resource Files"
+ Filter="rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav"
+ UniqueIdentifier="{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}"
+ >
+ </Filter>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
diff --git a/src/aftereffects/vc/vc9/ext/yaml.vcproj b/src/aftereffects/vc/vc9/ext/yaml.vcproj
new file mode 100644
index 0000000..46a0fe5
--- /dev/null
+++ b/src/aftereffects/vc/vc9/ext/yaml.vcproj
@@ -0,0 +1,603 @@
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="9.00"
+ Name="yaml"
+ ProjectGUID="{F1DAC6DE-348A-4215-87B2-7584578291AC}"
+ RootNamespace="yaml"
+ Keyword="Win32Proj"
+ TargetFrameworkVersion="196613"
+ >
+ <Platforms>
+ <Platform
+ Name="Win32"
+ />
+ <Platform
+ Name="x64"
+ />
+ </Platforms>
+ <ToolFiles>
+ </ToolFiles>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory="build\$(PlatformName)\$(ConfigurationName)"
+ IntermediateDirectory="$(ProjectName)\$(PlatformName)\$(ConfigurationName)"
+ ConfigurationType="4"
+ CharacterSet="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories="&quot;..\..\..\..\..\ext\yaml-cpp\include&quot;"
+ PreprocessorDefinitions="WIN32;_DEBUG;_LIB"
+ MinimalRebuild="true"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="3"
+ WarningLevel="3"
+ DebugInformationFormat="4"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLibrarianTool"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Debug|x64"
+ OutputDirectory="build\$(PlatformName)\$(ConfigurationName)"
+ IntermediateDirectory="$(ProjectName)\$(PlatformName)\$(ConfigurationName)"
+ ConfigurationType="4"
+ CharacterSet="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ TargetEnvironment="3"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories="&quot;..\..\..\..\..\ext\yaml-cpp\include&quot;"
+ PreprocessorDefinitions="WIN32;_DEBUG;_LIB"
+ MinimalRebuild="true"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="3"
+ WarningLevel="3"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLibrarianTool"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory="build\$(PlatformName)\$(ConfigurationName)"
+ IntermediateDirectory="$(ProjectName)\$(PlatformName)\$(ConfigurationName)"
+ ConfigurationType="4"
+ CharacterSet="1"
+ WholeProgramOptimization="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ EnableIntrinsicFunctions="true"
+ AdditionalIncludeDirectories="&quot;..\..\..\..\..\ext\yaml-cpp\include&quot;"
+ PreprocessorDefinitions="WIN32;NDEBUG;_LIB"
+ RuntimeLibrary="2"
+ EnableFunctionLevelLinking="true"
+ WarningLevel="3"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLibrarianTool"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|x64"
+ OutputDirectory="build\$(PlatformName)\$(ConfigurationName)"
+ IntermediateDirectory="$(ProjectName)\$(PlatformName)\$(ConfigurationName)"
+ ConfigurationType="4"
+ CharacterSet="1"
+ WholeProgramOptimization="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ TargetEnvironment="3"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ EnableIntrinsicFunctions="true"
+ AdditionalIncludeDirectories="&quot;..\..\..\..\..\ext\yaml-cpp\include&quot;"
+ PreprocessorDefinitions="WIN32;NDEBUG;_LIB"
+ RuntimeLibrary="2"
+ EnableFunctionLevelLinking="true"
+ WarningLevel="3"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLibrarianTool"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <Filter
+ Name="Source Files"
+ Filter="cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx"
+ UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}"
+ >
+ <File
+ RelativePath="..\..\..\..\..\ext\yaml-cpp\src\aliasmanager.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\..\..\ext\yaml-cpp\src\binary.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\..\..\ext\yaml-cpp\src\conversion.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\..\..\ext\yaml-cpp\src\directives.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\..\..\ext\yaml-cpp\src\emitfromevents.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\..\..\ext\yaml-cpp\src\emitter.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\..\..\ext\yaml-cpp\src\emitterstate.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\..\..\ext\yaml-cpp\src\emitterutils.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\..\..\ext\yaml-cpp\src\exp.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\..\..\ext\yaml-cpp\src\contrib\graphbuilder.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\..\..\ext\yaml-cpp\src\contrib\graphbuilderadapter.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\..\..\ext\yaml-cpp\src\contrib\graphbuilderadapter.h"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\..\..\ext\yaml-cpp\src\iterator.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\..\..\ext\yaml-cpp\src\node.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\..\..\ext\yaml-cpp\src\nodebuilder.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\..\..\ext\yaml-cpp\src\nodeownership.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\..\..\ext\yaml-cpp\src\null.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\..\..\ext\yaml-cpp\src\ostream.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\..\..\ext\yaml-cpp\src\parser.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\..\..\ext\yaml-cpp\src\regex.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\..\..\ext\yaml-cpp\src\scanner.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\..\..\ext\yaml-cpp\src\scanscalar.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\..\..\ext\yaml-cpp\src\scantag.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\..\..\ext\yaml-cpp\src\scantoken.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\..\..\ext\yaml-cpp\src\simplekey.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\..\..\ext\yaml-cpp\src\singledocparser.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\..\..\ext\yaml-cpp\src\stream.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\..\..\ext\yaml-cpp\src\tag.cpp"
+ >
+ </File>
+ </Filter>
+ <Filter
+ Name="Header Files"
+ Filter="h;hpp;hxx;hm;inl;inc;xsd"
+ UniqueIdentifier="{93995380-89BD-4b04-88EB-625FBE52EBFB}"
+ >
+ <File
+ RelativePath="..\..\..\..\..\ext\yaml-cpp\include\yaml-cpp\aliasmanager.h"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\..\..\ext\yaml-cpp\include\yaml-cpp\anchor.h"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\..\..\ext\yaml-cpp\include\yaml-cpp\contrib\anchordict.h"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\..\..\ext\yaml-cpp\src\collectionstack.h"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\..\..\ext\yaml-cpp\include\yaml-cpp\conversion.h"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\..\..\ext\yaml-cpp\src\directives.h"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\..\..\ext\yaml-cpp\include\yaml-cpp\dll.h"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\..\..\ext\yaml-cpp\include\yaml-cpp\emitfromevents.h"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\..\..\ext\yaml-cpp\include\yaml-cpp\emitter.h"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\..\..\ext\yaml-cpp\include\yaml-cpp\emittermanip.h"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\..\..\ext\yaml-cpp\src\emitterstate.h"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\..\..\ext\yaml-cpp\src\emitterutils.h"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\..\..\ext\yaml-cpp\include\yaml-cpp\eventhandler.h"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\..\..\ext\yaml-cpp\include\yaml-cpp\exceptions.h"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\..\..\ext\yaml-cpp\src\exp.h"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\..\..\ext\yaml-cpp\include\yaml-cpp\contrib\graphbuilder.h"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\..\..\ext\yaml-cpp\src\indentation.h"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\..\..\ext\yaml-cpp\include\yaml-cpp\iterator.h"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\..\..\ext\yaml-cpp\src\iterpriv.h"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\..\..\ext\yaml-cpp\include\yaml-cpp\ltnode.h"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\..\..\ext\yaml-cpp\include\yaml-cpp\mark.h"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\..\..\ext\yaml-cpp\include\yaml-cpp\node.h"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\..\..\ext\yaml-cpp\src\nodebuilder.h"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\..\..\ext\yaml-cpp\include\yaml-cpp\nodeimpl.h"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\..\..\ext\yaml-cpp\src\nodeownership.h"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\..\..\ext\yaml-cpp\include\yaml-cpp\nodereadimpl.h"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\..\..\ext\yaml-cpp\include\yaml-cpp\nodeutil.h"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\..\..\ext\yaml-cpp\include\yaml-cpp\noncopyable.h"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\..\..\ext\yaml-cpp\include\yaml-cpp\null.h"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\..\..\ext\yaml-cpp\include\yaml-cpp\ostream.h"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\..\..\ext\yaml-cpp\include\yaml-cpp\parser.h"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\..\..\ext\yaml-cpp\src\ptr_stack.h"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\..\..\ext\yaml-cpp\src\ptr_vector.h"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\..\..\ext\yaml-cpp\src\regex.h"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\..\..\ext\yaml-cpp\src\regeximpl.h"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\..\..\ext\yaml-cpp\src\scanner.h"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\..\..\ext\yaml-cpp\src\scanscalar.h"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\..\..\ext\yaml-cpp\src\scantag.h"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\..\..\ext\yaml-cpp\src\setting.h"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\..\..\ext\yaml-cpp\src\singledocparser.h"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\..\..\ext\yaml-cpp\include\yaml-cpp\stlemitter.h"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\..\..\ext\yaml-cpp\include\yaml-cpp\stlnode.h"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\..\..\ext\yaml-cpp\src\stream.h"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\..\..\ext\yaml-cpp\src\streamcharsource.h"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\..\..\ext\yaml-cpp\src\stringsource.h"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\..\..\ext\yaml-cpp\src\tag.h"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\..\..\ext\yaml-cpp\src\token.h"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\..\..\ext\yaml-cpp\include\yaml-cpp\traits.h"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\..\..\ext\yaml-cpp\include\yaml-cpp\yaml.h"
+ >
+ </File>
+ </Filter>
+ <Filter
+ Name="Resource Files"
+ Filter="rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav"
+ UniqueIdentifier="{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}"
+ >
+ </Filter>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
diff --git a/src/aftereffects/win/OpenColorIO.rc b/src/aftereffects/win/OpenColorIO.rc
new file mode 100644
index 0000000..e93fa8c
--- /dev/null
+++ b/src/aftereffects/win/OpenColorIO.rc
@@ -0,0 +1,99 @@
+// Microsoft Visual C++ generated resource script.
+//
+#include "resource.h"
+
+#define APSTUDIO_READONLY_SYMBOLS
+/////////////////////////////////////////////////////////////////////////////
+//
+// Generated from the TEXTINCLUDE 2 resource.
+//
+#include "afxres.h"
+
+/////////////////////////////////////////////////////////////////////////////
+#undef APSTUDIO_READONLY_SYMBOLS
+
+/////////////////////////////////////////////////////////////////////////////
+// English (U.S.) resources
+
+#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU)
+#ifdef _WIN32
+LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US
+#pragma code_page(1252)
+#endif //_WIN32
+
+#ifdef APSTUDIO_INVOKED
+/////////////////////////////////////////////////////////////////////////////
+//
+// TEXTINCLUDE
+//
+
+1 TEXTINCLUDE
+BEGIN
+ "resource.h\0"
+END
+
+2 TEXTINCLUDE
+BEGIN
+ "#include ""afxres.h""\r\n"
+ "\0"
+END
+
+3 TEXTINCLUDE
+BEGIN
+ "\r\n"
+ "\0"
+END
+
+#endif // APSTUDIO_INVOKED
+
+
+/////////////////////////////////////////////////////////////////////////////
+//
+// Dialog
+//
+
+PROFILEDIALOG DIALOGEX 0, 0, 233, 78
+STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | DS_CENTER | WS_POPUP | WS_CAPTION | WS_SYSMENU
+CAPTION "OpenColorIO"
+FONT 8, "MS Shell Dlg", 400, 0, 0x1
+BEGIN
+ DEFPUSHBUTTON "OK",IDOK,176,57,50,14
+ PUSHBUTTON "Cancel",IDCANCEL,117,57,50,14
+ COMBOBOX 3,74,20,133,12,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
+ LTEXT "Monitor Profile:",IDC_STATIC,15,20,55,12,SS_CENTERIMAGE,WS_EX_RIGHT
+END
+
+
+/////////////////////////////////////////////////////////////////////////////
+//
+// DESIGNINFO
+//
+
+#ifdef APSTUDIO_INVOKED
+GUIDELINES DESIGNINFO
+BEGIN
+ "PROFILEDIALOG", DIALOG
+ BEGIN
+ LEFTMARGIN, 7
+ RIGHTMARGIN, 226
+ TOPMARGIN, 7
+ BOTTOMMARGIN, 71
+ END
+END
+#endif // APSTUDIO_INVOKED
+
+#endif // English (U.S.) resources
+/////////////////////////////////////////////////////////////////////////////
+
+
+
+#ifndef APSTUDIO_INVOKED
+/////////////////////////////////////////////////////////////////////////////
+//
+// Generated from the TEXTINCLUDE 3 resource.
+//
+
+
+/////////////////////////////////////////////////////////////////////////////
+#endif // not APSTUDIO_INVOKED
+
diff --git a/src/aftereffects/win/OpenColorIO_AE_Dialogs_Win.cpp b/src/aftereffects/win/OpenColorIO_AE_Dialogs_Win.cpp
new file mode 100644
index 0000000..78e8648
--- /dev/null
+++ b/src/aftereffects/win/OpenColorIO_AE_Dialogs_Win.cpp
@@ -0,0 +1,564 @@
+/*
+Copyright (c) 2003-2012 Sony Pictures Imageworks Inc., et al.
+All Rights Reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are
+met:
+* Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in the
+ documentation and/or other materials provided with the distribution.
+* Neither the name of Sony Pictures Imageworks nor the names of its
+ contributors may be used to endorse or promote products derived from
+ this software without specific prior written permission.
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+
+
+#include "OpenColorIO_AE_Dialogs.h"
+
+#include <list>
+
+#include <Windows.h>
+#include <Shlobj.h>
+#include <Icm.h>
+
+
+#include "lcms2.h"
+
+
+HINSTANCE hDllInstance = NULL;
+
+static void AppendString(char *text, int &length, const char *str, int len = -1)
+{
+ if(len < 0)
+ len = strlen(str);
+
+ const char *in = str;
+ char *out = &text[length];
+
+ for(int i=0; i < len; i++)
+ {
+ *out++ = *in++;
+
+ length++;
+ }
+}
+
+static void AppendNull(char *text, int &length)
+{
+ AppendString(text, length, "\0\0", 1);
+}
+
+static void MakeFilterText(char *filter_text,
+ const ExtensionMap &extensions,
+ bool do_combined)
+{
+ // Construct the Windows file dialog filter string, which looks like this:
+ //
+ // "All OCIO files\0"
+ // "*.ocio;*.cube;*.vf;*.mga\0"
+ // "OpenColorIO (*.ocio)\0"
+ // "*.ocio\0"
+ // "Iridas (*.cube)\0"
+ // "*.cube\0"
+ // "Nuke Vectorfield (*.vf)\0"
+ // "*.vf\0"
+ // "Apple Color (*.mga)\0"
+ // "*.mga\0"
+ // "\0";
+ //
+ // Note the inline nulls and final double-null, which foil regular string functions.
+
+ char combined_entry[512];
+ int combined_length = 0;
+
+ char seperate_entries[512];
+ int seperate_length = 0;
+
+ AppendString(combined_entry, combined_length, "All OCIO files");
+ AppendNull(combined_entry, combined_length);
+
+ for(ExtensionMap::const_iterator i = extensions.begin(); i != extensions.end(); i++)
+ {
+ std::string extension = i->first;
+ std::string format = i->second;
+
+ std::string format_part = format + " (*." + extension + ")";
+ std::string extension_part = "*." + extension;
+ std::string combined_part = extension_part + ";";
+
+ AppendString(seperate_entries, seperate_length, format_part.c_str(), format_part.size());
+ AppendNull(seperate_entries, seperate_length);
+ AppendString(seperate_entries, seperate_length, extension_part.c_str(), extension_part.size());
+ AppendNull(seperate_entries, seperate_length);
+
+ AppendString(combined_entry, combined_length, combined_part.c_str(), combined_part.size());
+ }
+
+ AppendNull(seperate_entries, seperate_length);
+ AppendNull(combined_entry, combined_length);
+
+
+ char *in = combined_entry;
+ char *out = filter_text;
+
+ if(do_combined)
+ {
+ for(int i=0; i < combined_length; i++)
+ *out++ = *in++;
+ }
+
+ in = seperate_entries;
+
+ for(int i=0; i < seperate_length; i++)
+ *out++ = *in++;
+}
+
+
+bool OpenFile(char *path, int buf_len, const ExtensionMap &extensions, const void *hwnd)
+{
+ const char *my_lpstrTitle = "Import OCIO";
+ const char *my_lpstrDefExt = "ocio";
+
+ char my_lpstrFilter[512];
+ MakeFilterText(my_lpstrFilter, extensions, true);
+
+
+ OPENFILENAME lpofn;
+
+ lpofn.lStructSize = sizeof(lpofn);
+ lpofn.hwndOwner = (HWND)hwnd;
+ lpofn.hInstance = hDllInstance;
+ lpofn.lpstrFilter = my_lpstrFilter;
+ lpofn.lpstrCustomFilter = NULL;
+ lpofn.nMaxCustFilter = 0;
+ lpofn.nFilterIndex = 0;
+ lpofn.lpstrFile = path;
+ lpofn.nMaxFile = buf_len;
+ lpofn.lpstrFileTitle = path;
+ lpofn.nMaxFileTitle = buf_len;
+ lpofn.lpstrInitialDir = NULL;
+ lpofn.lpstrTitle = my_lpstrTitle;
+ lpofn.Flags = OFN_LONGNAMES |
+ OFN_HIDEREADONLY |
+ OFN_PATHMUSTEXIST |
+ OFN_OVERWRITEPROMPT;
+ lpofn.nFileOffset = 0;
+ lpofn.nFileExtension = 0;
+ lpofn.lpstrDefExt = my_lpstrDefExt;
+ lpofn.lCustData = 0;
+ lpofn.lpfnHook = NULL;
+ lpofn.lpTemplateName = NULL;
+ lpofn.lStructSize = sizeof(lpofn);
+
+ return GetOpenFileName(&lpofn);
+}
+
+
+bool SaveFile(char *path, int buf_len, const ExtensionMap &extensions, const void *hwnd)
+{
+ const char *my_lpstrTitle = "Export OCIO";
+ const char *my_lpstrDefExt = "icc";
+
+ char my_lpstrFilter[256];
+ MakeFilterText(my_lpstrFilter, extensions, false);
+
+
+ OPENFILENAME lpofn;
+
+ lpofn.lStructSize = sizeof(lpofn);
+ lpofn.hwndOwner = (HWND)hwnd;
+ lpofn.hInstance = hDllInstance;
+ lpofn.lpstrFilter = my_lpstrFilter;
+ lpofn.lpstrCustomFilter = NULL;
+ lpofn.nMaxCustFilter = 0;
+ lpofn.nFilterIndex = 0;
+ lpofn.lpstrFile = path;
+ lpofn.nMaxFile = buf_len;
+ lpofn.lpstrFileTitle = path;
+ lpofn.nMaxFileTitle = buf_len;
+ lpofn.lpstrInitialDir = NULL;
+ lpofn.lpstrTitle = my_lpstrTitle;
+ lpofn.Flags = OFN_LONGNAMES |
+ OFN_HIDEREADONLY |
+ OFN_PATHMUSTEXIST |
+ OFN_OVERWRITEPROMPT;
+ lpofn.nFileOffset = 0;
+ lpofn.nFileExtension = 0;
+ lpofn.lpstrDefExt = my_lpstrDefExt;
+ lpofn.lCustData = 0;
+ lpofn.lpfnHook = NULL;
+ lpofn.lpTemplateName = NULL;
+ lpofn.lStructSize = sizeof(lpofn);
+
+ return GetSaveFileName(&lpofn);
+}
+
+// dialog item IDs
+enum {
+ DLOG_noUI = -1,
+ DLOG_OK = IDOK, // was 1
+ DLOG_Cancel = IDCANCEL, // was 2
+ DLOG_Profile_Menu = 3
+};
+
+
+static std::vector<std::string> *g_profile_vec = NULL;
+static int g_selected_item = DLOG_noUI;
+
+static WORD g_item_clicked = 0;
+
+static BOOL CALLBACK DialogProc(HWND hwndDlg, UINT message, WPARAM wParam, LPARAM lParam)
+{
+ BOOL fError;
+
+ switch (message)
+ {
+ case WM_INITDIALOG:
+ do{
+ // add profile list to combo boxe
+ HWND menu = GetDlgItem(hwndDlg, DLOG_Profile_Menu);
+
+ for(int i=0; i < g_profile_vec->size(); i++)
+ {
+ SendMessage(menu, (UINT)CB_ADDSTRING,
+ (WPARAM)wParam, (LPARAM)(LPCTSTR)g_profile_vec->at(i).c_str() );
+
+ SendMessage(menu,(UINT)CB_SETITEMDATA,
+ (WPARAM)i, (LPARAM)(DWORD)i); // channel index number
+
+ if( g_selected_item == i )
+ SendMessage(menu, CB_SETCURSEL, (WPARAM)i, (LPARAM)0);
+ }
+ }while(0);
+ return FALSE;
+
+ case WM_COMMAND:
+ g_item_clicked = LOWORD(wParam);
+
+ switch(LOWORD(wParam))
+ {
+ case DLOG_OK:
+ case DLOG_Cancel: // do the same thing, but g_item_clicked differ
+ do{
+ HWND menu = GetDlgItem(hwndDlg, DLOG_Profile_Menu);
+
+ LRESULT cur_sel = SendMessage(menu, (UINT)CB_GETCURSEL,
+ (WPARAM)0, (LPARAM)0);
+
+ g_selected_item = SendMessage(menu, (UINT)CB_GETITEMDATA,
+ (WPARAM)cur_sel, (LPARAM)0);
+
+ }while(0);
+
+ EndDialog(hwndDlg, 0);
+ return TRUE;
+ }
+ }
+
+ return FALSE;
+}
+
+bool GetMonitorProfile(char *path, int buf_len, const void *hwnd)
+{
+ std::list<std::string> profile_descriptions;
+ std::map<std::string, std::string> profile_paths;
+
+ // path to the monitor's profile
+ char monitor_profile_path[256] = { '\0' };
+ DWORD path_size = 256;
+ BOOL get_icm_result = GetICMProfile(GetDC((HWND)hwnd), &path_size, monitor_profile_path);
+
+ // directory where Windows stores its profiles
+ char profile_directory[256] = { '\0' };
+ DWORD dir_name_size = 256;
+ BOOL get_color_dir_result = GetColorDirectory(NULL, profile_directory, &dir_name_size);
+
+ // Get the profile file names from Windows
+ ENUMTYPE enum_type;
+ enum_type.dwSize = sizeof(ENUMTYPE);
+ enum_type.dwVersion = ENUM_TYPE_VERSION;
+ enum_type.dwFields = ET_DEVICECLASS; // alternately could use ET_CLASS
+ enum_type.dwDeviceClass = CLASS_MONITOR;
+
+ BYTE *buf = NULL;
+ DWORD buf_size = 0;
+ DWORD num_profiles = 0;
+
+ BOOL other_enum_result = EnumColorProfiles(NULL, &enum_type,
+ buf, &buf_size, &num_profiles);
+
+ if(buf_size > 0 && num_profiles > 0)
+ {
+ buf = (BYTE *)malloc(buf_size);
+
+ other_enum_result = EnumColorProfiles(NULL, &enum_type,
+ buf, &buf_size, &num_profiles);
+
+ if(other_enum_result)
+ {
+ // build a list of the profile descriptions
+ // and a map to return the paths
+ char *prof_name = (char *)buf;
+
+ for(int i=0; i < num_profiles; i++)
+ {
+ std::string prof = prof_name;
+ std::string prof_path = std::string(profile_directory) + "\\" + prof_name;
+
+ cmsHPROFILE hProfile = cmsOpenProfileFromFile(prof_path.c_str(), "r");
+
+ // Note: Windows will give us profiles that aren't ICC (.cdmp for example).
+ // Don't worry, LittleCMS will just return NULL for those.
+ if(hProfile)
+ {
+ char profile_description[256];
+
+ cmsUInt32Number got_desc = cmsGetProfileInfoASCII(hProfile,
+ cmsInfoDescription,
+ "en", "US",
+ profile_description,
+ 256);
+
+ if(got_desc)
+ {
+ profile_descriptions.push_back(profile_description);
+
+ profile_paths[ profile_description ] = prof_path;
+ }
+
+ cmsCloseProfile(hProfile);
+ }
+
+ prof_name += strlen(prof_name) + 1;
+ }
+ }
+
+ free(buf);
+ }
+
+
+ if(profile_descriptions.size() > 0)
+ {
+ // set a vector and selected index for building the profile menu
+ profile_descriptions.sort();
+ profile_descriptions.unique();
+
+ std::vector<std::string> profile_vec;
+ int selected = 0;
+
+ for(std::list<std::string>::const_iterator i = profile_descriptions.begin(); i != profile_descriptions.end(); i++)
+ {
+ profile_vec.push_back( *i );
+
+ if( profile_paths[ *i ] == monitor_profile_path)
+ {
+ selected = profile_vec.size() - 1;
+ }
+ }
+
+ // run the dialog
+ g_profile_vec = &profile_vec;
+ g_selected_item = selected;
+
+ int status = DialogBox(hDllInstance, (LPSTR)"PROFILEDIALOG",
+ (HWND)hwnd, (DLGPROC)DialogProc);
+
+
+ if(status == -1)
+ {
+ // dialog didn't open, my bad
+ return true;
+ }
+ else if(g_item_clicked == DLOG_Cancel)
+ {
+ return false;
+ }
+ else
+ {
+ strncpy(path, profile_paths[ profile_vec[ g_selected_item ] ].c_str(), buf_len);
+
+ return true;
+ }
+ }
+ else
+ return true;
+}
+
+
+int PopUpMenu(const MenuVec &menu_items, int selected_index, const void *hwnd)
+{
+ HMENU menu = CreatePopupMenu();
+
+ if(menu)
+ {
+ for(int i=0; i < menu_items.size(); i++)
+ {
+ std::string label = menu_items[i];
+
+ UINT flags = (i == selected_index ? (MF_STRING | MF_CHECKED) : MF_STRING);
+
+ if(label == "(-")
+ {
+ flags |= MF_SEPARATOR;
+ }
+ else if(label == "$OCIO")
+ {
+ char *file = std::getenv("OCIO");
+
+ if(file == NULL)
+ flags |= MF_GRAYED;
+ }
+ else if(label == "(nada)")
+ {
+ flags |= MF_GRAYED;
+
+ char appdata_path[MAX_PATH];
+ HRESULT result = SHGetFolderPath(NULL, CSIDL_COMMON_APPDATA, NULL,
+ SHGFP_TYPE_CURRENT, appdata_path);
+
+ if(result == S_OK)
+ {
+ label = "No configs in " + std::string(appdata_path) + "\\OpenColorIO\\";
+ }
+ }
+
+ AppendMenu(menu, flags, i + 1, label.c_str());
+ }
+
+ POINT pos;
+ GetCursorPos(&pos);
+
+ int result = TrackPopupMenuEx(menu,
+ (TPM_NONOTIFY | TPM_LEFTALIGN | TPM_TOPALIGN | TPM_RETURNCMD),
+ pos.x, pos.y, (HWND)hwnd, NULL);
+
+ DestroyMenu(menu);
+
+ if(result == 0)
+ {
+ // means the user clicked off the menu
+ return selected_index;
+ }
+ else
+ return result - 1;
+ }
+ else
+ return selected_index;
+}
+
+
+void GetStdConfigs(ConfigVec &configs)
+{
+ char appdata_path[MAX_PATH];
+
+ HRESULT result = SHGetFolderPath(NULL, CSIDL_COMMON_APPDATA, NULL,
+ SHGFP_TYPE_CURRENT, appdata_path);
+
+ if(result == S_OK)
+ {
+ std::string dir_path = std::string(appdata_path) + "\\OpenColorIO\\";
+
+ std::string search_path = dir_path + "*";
+
+ WIN32_FIND_DATA find_data;
+
+ HANDLE searchH = FindFirstFile(search_path.c_str(), &find_data);
+
+ if(searchH != INVALID_HANDLE_VALUE)
+ {
+ if(find_data.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
+ {
+ std::string config_path = dir_path + find_data.cFileName + "\\config.ocio";
+
+ WIN32_FIND_DATA find_data_temp;
+
+ HANDLE fileH = FindFirstFile(config_path.c_str(), &find_data_temp);
+
+ if(fileH != INVALID_HANDLE_VALUE)
+ {
+ configs.push_back(find_data.cFileName);
+
+ FindClose(fileH);
+ }
+ }
+
+ while( FindNextFile(searchH, &find_data) )
+ {
+ if(find_data.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
+ {
+ std::string config_path = dir_path + find_data.cFileName + "\\config.ocio";
+
+ WIN32_FIND_DATA find_data_temp;
+
+ HANDLE fileH = FindFirstFile(config_path.c_str(), &find_data_temp);
+
+ if(fileH != INVALID_HANDLE_VALUE)
+ {
+ configs.push_back(find_data.cFileName);
+
+ FindClose(fileH);
+ }
+ }
+ }
+
+ FindClose(searchH);
+ }
+ }
+}
+
+
+std::string GetStdConfigPath(const std::string &name)
+{
+ char appdata_path[MAX_PATH];
+
+ HRESULT result = SHGetFolderPath(NULL, CSIDL_COMMON_APPDATA, NULL,
+ SHGFP_TYPE_CURRENT, appdata_path);
+
+ if(result == S_OK)
+ {
+ std::string config_path = std::string(appdata_path) + "\\OpenColorIO\\" +
+ name + "\\config.ocio";
+
+ WIN32_FIND_DATA find_data;
+
+ HANDLE searchH = FindFirstFile(config_path.c_str(), &find_data);
+
+ if(searchH != INVALID_HANDLE_VALUE)
+ {
+ FindClose(searchH);
+
+ return config_path;
+ }
+ }
+
+ return "";
+}
+
+
+void ErrorMessage(const char *message , const void *hwnd)
+{
+ MessageBox((HWND)hwnd, message, "OpenColorIO", MB_OK);
+}
+
+
+BOOL WINAPI DllMain(HANDLE hInstance, DWORD fdwReason, LPVOID lpReserved)
+{
+ if (fdwReason == DLL_PROCESS_ATTACH)
+ hDllInstance = (HINSTANCE)hInstance;
+
+ return TRUE;
+}
diff --git a/src/aftereffects/win/OpenColorIO_AE_GL_Win.cpp b/src/aftereffects/win/OpenColorIO_AE_GL_Win.cpp
new file mode 100644
index 0000000..867522a
--- /dev/null
+++ b/src/aftereffects/win/OpenColorIO_AE_GL_Win.cpp
@@ -0,0 +1,212 @@
+/*
+Copyright (c) 2003-2012 Sony Pictures Imageworks Inc., et al.
+All Rights Reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are
+met:
+* Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in the
+ documentation and/or other materials provided with the distribution.
+* Neither the name of Sony Pictures Imageworks nor the names of its
+ contributors may be used to endorse or promote products derived from
+ this software without specific prior written permission.
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+
+
+#include "OpenColorIO_AE_GL.h"
+
+#include <windows.h>
+#include <stdlib.h>
+#include <stdio.h>
+
+static HWND g_win = NULL;
+static HDC g_hdc = NULL;
+static HGLRC g_context = NULL;
+static GLuint g_framebuffer;
+
+
+static bool HaveRequiredExtensions()
+{
+ const GLubyte *strVersion = glGetString(GL_VERSION);
+ const GLubyte *strExt = glGetString(GL_EXTENSIONS);
+
+ if(strVersion == NULL)
+ return false;
+
+#define CheckExtension(N) glewIsExtensionSupported(N)
+
+ return (GLEW_VERSION_2_0 &&
+ CheckExtension("GL_ARB_color_buffer_float") &&
+ CheckExtension("GL_ARB_texture_float") &&
+ CheckExtension("GL_ARB_vertex_program") &&
+ CheckExtension("GL_ARB_vertex_shader") &&
+ CheckExtension("GL_ARB_texture_cube_map") &&
+ CheckExtension("GL_ARB_fragment_shader") &&
+ CheckExtension("GL_ARB_draw_buffers") &&
+ CheckExtension("GL_ARB_framebuffer_object") );
+}
+
+
+void GlobalSetup_GL()
+{
+ GLenum init = glewInit();
+
+ if(init != GLEW_OK)
+ return;
+
+
+ WNDCLASSEX winClass;
+ MSG uMsg;
+
+ memset(&uMsg,0,sizeof(uMsg));
+
+ winClass.lpszClassName = "OpenColorIO_AE_Win_Class";
+ winClass.cbSize = sizeof(WNDCLASSEX);
+ winClass.style = CS_HREDRAW | CS_VREDRAW;
+ winClass.lpfnWndProc = DefWindowProc;
+ winClass.hInstance = NULL;
+ winClass.hIcon = NULL;
+ winClass.hIconSm = NULL;
+ winClass.hCursor = LoadCursor(NULL, IDC_ARROW);
+ winClass.hbrBackground = (HBRUSH)GetStockObject(BLACK_BRUSH);
+ winClass.lpszMenuName = NULL;
+ winClass.cbClsExtra = 0;
+ winClass.cbWndExtra = 0;
+
+ if( !( RegisterClassEx(&winClass) ) )
+ return;
+
+ g_win = CreateWindowEx( NULL, "OpenColorIO_AE_Win_Class",
+ "OpenGL-using FBOs in AE",
+ 0, 0,
+ 0, 50, 50,
+ NULL,
+ NULL,
+ NULL,
+ NULL );
+
+ if(g_win == NULL)
+ return;
+
+ g_hdc = GetDC(g_win);
+
+
+ int pixelFormat;
+
+ PIXELFORMATDESCRIPTOR pfd;
+ ZeroMemory( &pfd, sizeof( pfd ) );
+
+ pfd.nSize = sizeof(PIXELFORMATDESCRIPTOR);
+ pfd.nVersion = 1;
+ pfd.dwFlags = PFD_DRAW_TO_WINDOW | PFD_SUPPORT_OPENGL | PFD_DOUBLEBUFFER;
+ pfd.iPixelType = PFD_TYPE_RGBA;
+ pfd.cColorBits = 128;
+ pfd.cDepthBits = 32;
+ pfd.cStencilBits = 32;
+ pfd.iLayerType = PFD_MAIN_PLANE;
+
+ pixelFormat = ChoosePixelFormat(g_hdc, &pfd);
+
+ BOOL set_format = SetPixelFormat(g_hdc, pixelFormat, &pfd);
+
+ if(!set_format)
+ {
+ GlobalSetdown_GL();
+ return;
+ }
+
+ g_context = wglCreateContext(g_hdc);
+
+ glFlush();
+
+ if(g_context == NULL)
+ {
+ GlobalSetdown_GL();
+ return;
+ }
+
+
+ SetPluginContext();
+
+
+ GLint units;
+ glGetIntegerv(GL_MAX_TEXTURE_UNITS, &units);
+
+
+ if( !HaveRequiredExtensions() || units < 2)
+ {
+ GlobalSetdown_GL();
+ SetAEContext();
+ return;
+ }
+
+ glGenFramebuffersEXT(1, &g_framebuffer);
+
+
+ SetAEContext();
+}
+
+
+bool HaveOpenGL()
+{
+ return (g_context != NULL && g_win != NULL);
+}
+
+
+static HDC g_ae_hdc;
+static HGLRC g_ae_context;
+
+void SetPluginContext()
+{
+ g_ae_hdc = wglGetCurrentDC();
+ g_ae_context = wglGetCurrentContext();
+
+ wglMakeCurrent(g_hdc, g_context);
+}
+
+
+void SetAEContext()
+{
+ wglMakeCurrent(g_ae_hdc, g_ae_context);
+}
+
+
+GLuint GetFrameBuffer()
+{
+ return g_framebuffer;
+}
+
+
+void GlobalSetdown_GL()
+{
+ if(g_context)
+ {
+ wglDeleteContext(g_context);
+ g_context = NULL;
+
+ glDeleteFramebuffersEXT(1, &g_framebuffer);
+ }
+
+ if(g_win)
+ {
+ ReleaseDC(g_win, g_hdc);
+ g_win = NULL;
+ g_hdc = NULL;
+
+ UnregisterClass("OpenColorIO_AE_Win_Class", NULL);
+ }
+}
diff --git a/src/aftereffects/win/resource.h b/src/aftereffects/win/resource.h
new file mode 100644
index 0000000..2191cce
--- /dev/null
+++ b/src/aftereffects/win/resource.h
@@ -0,0 +1,17 @@
+//{{NO_DEPENDENCIES}}
+// Microsoft Visual C++ generated include file.
+// Used by OpenColorIO.rc
+//
+#define IDB_BITMAP1 102
+#define BANNER1 102
+
+// Next default values for new objects
+//
+#ifdef APSTUDIO_INVOKED
+#ifndef APSTUDIO_READONLY_SYMBOLS
+#define _APS_NEXT_RESOURCE_VALUE 103
+#define _APS_NEXT_COMMAND_VALUE 40001
+#define _APS_NEXT_CONTROL_VALUE 1002
+#define _APS_NEXT_SYMED_VALUE 101
+#endif
+#endif
diff --git a/src/aftereffects/xcode/OpenColorABI.h b/src/aftereffects/xcode/OpenColorABI.h
new file mode 100644
index 0000000..a3ce756
--- /dev/null
+++ b/src/aftereffects/xcode/OpenColorABI.h
@@ -0,0 +1,100 @@
+/*
+Copyright (c) 2003-2010 Sony Pictures Imageworks Inc., et al.
+All Rights Reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are
+met:
+* Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in the
+ documentation and/or other materials provided with the distribution.
+* Neither the name of Sony Pictures Imageworks nor the names of its
+ contributors may be used to endorse or promote products derived from
+ this software without specific prior written permission.
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+
+#ifndef INCLUDED_OCIO_OPENCOLORABI_H
+#define INCLUDED_OCIO_OPENCOLORABI_H
+
+// Makefile configuration options
+#define OCIO_NAMESPACE OpenColorIO
+#define OCIO_USE_BOOST_PTR 0
+#define OCIO_VERSION "1.0.7"
+#define OCIO_VERSION_NS v1
+
+/* Version as a single 4-byte hex number, e.g. 0x01050200 == 1.5.2
+ Use this for numeric comparisons, e.g. #if OCIO_VERSION_HEX >= ...
+ Note: in the case where SOVERSION is overridden at compile-time,
+ this will reflect the original API version number.
+ */
+#define OCIO_VERSION_HEX ((1 << 24) | \
+ (0 << 16) | \
+ (7 << 8))
+
+
+// Namespace / version mojo
+#define OCIO_NAMESPACE_ENTER namespace OCIO_NAMESPACE { namespace OCIO_VERSION_NS
+#define OCIO_NAMESPACE_EXIT using namespace OCIO_VERSION_NS; }
+#define OCIO_NAMESPACE_USING using namespace OCIO_NAMESPACE;
+
+// shared_ptr / dynamic_pointer_cast
+#if OCIO_USE_BOOST_PTR
+#include <boost/shared_ptr.hpp>
+#define OCIO_SHARED_PTR boost::shared_ptr
+#define OCIO_DYNAMIC_POINTER_CAST boost::dynamic_pointer_cast
+#elif __GNUC__ >= 4
+#include <tr1/memory>
+#define OCIO_SHARED_PTR std::tr1::shared_ptr
+#define OCIO_DYNAMIC_POINTER_CAST std::tr1::dynamic_pointer_cast
+#else
+#error OCIO needs gcc 4 or later to get access to <tr1/memory> (or specify USE_BOOST_PTR instead)
+#endif
+
+#ifdef OpenColorIO_SHARED
+ // If supported, define OCIOEXPORT, OCIOHIDDEN
+ // (used to choose which symbols to export from OpenColorIO)
+ #if defined __linux__ || __APPLE__
+ #if __GNUC__ >= 4
+ #define OCIOEXPORT __attribute__ ((visibility("default")))
+ #define OCIOHIDDEN __attribute__ ((visibility("hidden")))
+ #else
+ #define OCIOEXPORT
+ #define OCIOHIDDEN
+ #endif
+ #elif defined(_WIN32) || defined(_WIN64) || defined(_WINDOWS) || defined(_MSC_VER)
+ // Windows requires you to export from the main library and then import in any others
+ #if defined OpenColorIO_EXPORTS
+ #define OCIOEXPORT __declspec(dllexport)
+ #else
+ #define OCIOEXPORT __declspec(dllimport)
+ #endif
+ #define OCIOHIDDEN
+ #else // Others platforms not supported atm
+ #define OCIOEXPORT
+ #define OCIOHIDDEN
+ #endif
+#else
+ #define OCIOEXPORT
+ #define OCIOHIDDEN
+#endif
+
+// Windows defines these troublesome macros that collide with std::limits
+#if defined(_WIN32) || defined(_WIN64) || defined(_WINDOWS) || defined(_MSC_VER)
+#undef min
+#undef max
+#endif
+
+#endif // INCLUDED_OCIO_OPENCOLORABI_H
diff --git a/src/aftereffects/xcode/OpenColorIO.xcodeproj/project.pbxproj b/src/aftereffects/xcode/OpenColorIO.xcodeproj/project.pbxproj
new file mode 100644
index 0000000..eb84949
--- /dev/null
+++ b/src/aftereffects/xcode/OpenColorIO.xcodeproj/project.pbxproj
@@ -0,0 +1,589 @@
+// !$*UTF8*$!
+{
+ archiveVersion = 1;
+ classes = {
+ };
+ objectVersion = 45;
+ objects = {
+
+/* Begin PBXBuildFile section */
+ 2A7CACBB15536CD700F52C98 /* FileFormatIridasLook.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2A7CACB515536CD700F52C98 /* FileFormatIridasLook.cpp */; };
+ 2A7CACBC15536CD700F52C98 /* LookParse.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2A7CACB615536CD700F52C98 /* LookParse.cpp */; };
+ 2A7CACBD15536CD700F52C98 /* LookParse.h in Headers */ = {isa = PBXBuildFile; fileRef = 2A7CACB715536CD700F52C98 /* LookParse.h */; };
+ 2A7CACBE15536CD700F52C98 /* NoOps.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2A7CACB815536CD700F52C98 /* NoOps.cpp */; };
+ 2A7CACBF15536CD700F52C98 /* NoOps.h in Headers */ = {isa = PBXBuildFile; fileRef = 2A7CACB915536CD700F52C98 /* NoOps.h */; };
+ 2A7CACC015536CD700F52C98 /* OpOptimizers.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2A7CACBA15536CD700F52C98 /* OpOptimizers.cpp */; };
+ 2ACF56CC14776A1E00991ED5 /* AllocationOp.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2ACF567614776A1E00991ED5 /* AllocationOp.cpp */; };
+ 2ACF56CD14776A1E00991ED5 /* AllocationOp.h in Headers */ = {isa = PBXBuildFile; fileRef = 2ACF567714776A1E00991ED5 /* AllocationOp.h */; };
+ 2ACF56CE14776A1E00991ED5 /* AllocationTransform.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2ACF567814776A1E00991ED5 /* AllocationTransform.cpp */; };
+ 2ACF56CF14776A1E00991ED5 /* Baker.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2ACF567914776A1E00991ED5 /* Baker.cpp */; };
+ 2ACF56D014776A1E00991ED5 /* Caching.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2ACF567A14776A1E00991ED5 /* Caching.cpp */; };
+ 2ACF56D114776A1E00991ED5 /* CDLTransform.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2ACF567B14776A1E00991ED5 /* CDLTransform.cpp */; };
+ 2ACF56D214776A1E00991ED5 /* CDLTransform.h in Headers */ = {isa = PBXBuildFile; fileRef = 2ACF567C14776A1E00991ED5 /* CDLTransform.h */; };
+ 2ACF56D314776A1E00991ED5 /* ColorSpace.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2ACF567D14776A1E00991ED5 /* ColorSpace.cpp */; };
+ 2ACF56D414776A1E00991ED5 /* ColorSpaceTransform.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2ACF567E14776A1E00991ED5 /* ColorSpaceTransform.cpp */; };
+ 2ACF56D514776A1E00991ED5 /* Config.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2ACF567F14776A1E00991ED5 /* Config.cpp */; };
+ 2ACF56D614776A1E00991ED5 /* Context.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2ACF568014776A1E00991ED5 /* Context.cpp */; };
+ 2ACF56D714776A1E00991ED5 /* DisplayTransform.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2ACF568114776A1E00991ED5 /* DisplayTransform.cpp */; };
+ 2ACF56D814776A1E00991ED5 /* Exception.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2ACF568214776A1E00991ED5 /* Exception.cpp */; };
+ 2ACF56D914776A1E00991ED5 /* ExponentOps.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2ACF568314776A1E00991ED5 /* ExponentOps.cpp */; };
+ 2ACF56DA14776A1E00991ED5 /* ExponentOps.h in Headers */ = {isa = PBXBuildFile; fileRef = 2ACF568414776A1E00991ED5 /* ExponentOps.h */; };
+ 2ACF56DB14776A1E00991ED5 /* ExponentTransform.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2ACF568514776A1E00991ED5 /* ExponentTransform.cpp */; };
+ 2ACF56DC14776A1E00991ED5 /* FileFormat3DL.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2ACF568614776A1E00991ED5 /* FileFormat3DL.cpp */; };
+ 2ACF56DD14776A1E00991ED5 /* FileFormatCC.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2ACF568714776A1E00991ED5 /* FileFormatCC.cpp */; };
+ 2ACF56DE14776A1E00991ED5 /* FileFormatCCC.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2ACF568814776A1E00991ED5 /* FileFormatCCC.cpp */; };
+ 2ACF56DF14776A1E00991ED5 /* FileFormatCSP.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2ACF568914776A1E00991ED5 /* FileFormatCSP.cpp */; };
+ 2ACF56E014776A1E00991ED5 /* FileFormatHDL.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2ACF568A14776A1E00991ED5 /* FileFormatHDL.cpp */; };
+ 2ACF56E114776A1E00991ED5 /* FileFormatIridasCube.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2ACF568B14776A1E00991ED5 /* FileFormatIridasCube.cpp */; };
+ 2ACF56E214776A1E00991ED5 /* FileFormatIridasItx.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2ACF568C14776A1E00991ED5 /* FileFormatIridasItx.cpp */; };
+ 2ACF56E314776A1E00991ED5 /* FileFormatPandora.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2ACF568D14776A1E00991ED5 /* FileFormatPandora.cpp */; };
+ 2ACF56E414776A1E00991ED5 /* FileFormatSpi1D.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2ACF568E14776A1E00991ED5 /* FileFormatSpi1D.cpp */; };
+ 2ACF56E514776A1E00991ED5 /* FileFormatSpi3D.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2ACF568F14776A1E00991ED5 /* FileFormatSpi3D.cpp */; };
+ 2ACF56E614776A1E00991ED5 /* FileFormatSpiMtx.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2ACF569014776A1E00991ED5 /* FileFormatSpiMtx.cpp */; };
+ 2ACF56E714776A1E00991ED5 /* FileFormatTruelight.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2ACF569114776A1E00991ED5 /* FileFormatTruelight.cpp */; };
+ 2ACF56E814776A1E00991ED5 /* FileFormatVF.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2ACF569214776A1E00991ED5 /* FileFormatVF.cpp */; };
+ 2ACF56E914776A1E00991ED5 /* FileTransform.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2ACF569314776A1E00991ED5 /* FileTransform.cpp */; };
+ 2ACF56EA14776A1E00991ED5 /* FileTransform.h in Headers */ = {isa = PBXBuildFile; fileRef = 2ACF569414776A1E00991ED5 /* FileTransform.h */; };
+ 2ACF56EC14776A1E00991ED5 /* GpuShaderDesc.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2ACF569614776A1E00991ED5 /* GpuShaderDesc.cpp */; };
+ 2ACF56ED14776A1E00991ED5 /* GpuShaderUtils.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2ACF569714776A1E00991ED5 /* GpuShaderUtils.cpp */; };
+ 2ACF56EE14776A1E00991ED5 /* GpuShaderUtils.h in Headers */ = {isa = PBXBuildFile; fileRef = 2ACF569814776A1E00991ED5 /* GpuShaderUtils.h */; };
+ 2ACF56EF14776A1E00991ED5 /* GroupTransform.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2ACF569914776A1E00991ED5 /* GroupTransform.cpp */; };
+ 2ACF56F014776A1E00991ED5 /* HashUtils.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2ACF569A14776A1E00991ED5 /* HashUtils.cpp */; };
+ 2ACF56F114776A1E00991ED5 /* HashUtils.h in Headers */ = {isa = PBXBuildFile; fileRef = 2ACF569B14776A1E00991ED5 /* HashUtils.h */; };
+ 2ACF56F214776A1E00991ED5 /* ImageDesc.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2ACF569C14776A1E00991ED5 /* ImageDesc.cpp */; };
+ 2ACF56F314776A1E00991ED5 /* ImagePacking.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2ACF569D14776A1E00991ED5 /* ImagePacking.cpp */; };
+ 2ACF56F414776A1E00991ED5 /* ImagePacking.h in Headers */ = {isa = PBXBuildFile; fileRef = 2ACF569E14776A1E00991ED5 /* ImagePacking.h */; };
+ 2ACF56F514776A1E00991ED5 /* Logging.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2ACF569F14776A1E00991ED5 /* Logging.cpp */; };
+ 2ACF56F614776A1E00991ED5 /* Logging.h in Headers */ = {isa = PBXBuildFile; fileRef = 2ACF56A014776A1E00991ED5 /* Logging.h */; };
+ 2ACF56F714776A1E00991ED5 /* LogOps.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2ACF56A114776A1E00991ED5 /* LogOps.cpp */; };
+ 2ACF56F814776A1E00991ED5 /* LogOps.h in Headers */ = {isa = PBXBuildFile; fileRef = 2ACF56A214776A1E00991ED5 /* LogOps.h */; };
+ 2ACF56F914776A1E00991ED5 /* LogTransform.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2ACF56A314776A1E00991ED5 /* LogTransform.cpp */; };
+ 2ACF56FA14776A1E00991ED5 /* Look.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2ACF56A414776A1E00991ED5 /* Look.cpp */; };
+ 2ACF56FB14776A1E00991ED5 /* LookTransform.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2ACF56A514776A1E00991ED5 /* LookTransform.cpp */; };
+ 2ACF56FC14776A1E00991ED5 /* Lut1DOp.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2ACF56A614776A1E00991ED5 /* Lut1DOp.cpp */; };
+ 2ACF56FD14776A1E00991ED5 /* Lut1DOp.h in Headers */ = {isa = PBXBuildFile; fileRef = 2ACF56A714776A1E00991ED5 /* Lut1DOp.h */; };
+ 2ACF56FE14776A1E00991ED5 /* Lut3DOp.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2ACF56A814776A1E00991ED5 /* Lut3DOp.cpp */; };
+ 2ACF56FF14776A1E00991ED5 /* Lut3DOp.h in Headers */ = {isa = PBXBuildFile; fileRef = 2ACF56A914776A1E00991ED5 /* Lut3DOp.h */; };
+ 2ACF570014776A1E00991ED5 /* MathUtils.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2ACF56AA14776A1E00991ED5 /* MathUtils.cpp */; };
+ 2ACF570114776A1E00991ED5 /* MathUtils.h in Headers */ = {isa = PBXBuildFile; fileRef = 2ACF56AB14776A1E00991ED5 /* MathUtils.h */; };
+ 2ACF570214776A1E00991ED5 /* MatrixOps.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2ACF56AC14776A1E00991ED5 /* MatrixOps.cpp */; };
+ 2ACF570314776A1E00991ED5 /* MatrixOps.h in Headers */ = {isa = PBXBuildFile; fileRef = 2ACF56AD14776A1E00991ED5 /* MatrixOps.h */; };
+ 2ACF570414776A1E00991ED5 /* MatrixTransform.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2ACF56AE14776A1E00991ED5 /* MatrixTransform.cpp */; };
+ 2ACF570514776A1E00991ED5 /* md5.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2ACF56B014776A1E00991ED5 /* md5.cpp */; };
+ 2ACF570614776A1E00991ED5 /* md5.h in Headers */ = {isa = PBXBuildFile; fileRef = 2ACF56B114776A1E00991ED5 /* md5.h */; };
+ 2ACF570714776A1E00991ED5 /* Mutex.h in Headers */ = {isa = PBXBuildFile; fileRef = 2ACF56B214776A1E00991ED5 /* Mutex.h */; };
+ 2ACF570814776A1E00991ED5 /* OCIOYaml.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2ACF56B314776A1E00991ED5 /* OCIOYaml.cpp */; };
+ 2ACF570914776A1E00991ED5 /* OCIOYaml.h in Headers */ = {isa = PBXBuildFile; fileRef = 2ACF56B414776A1E00991ED5 /* OCIOYaml.h */; };
+ 2ACF570A14776A1E00991ED5 /* Op.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2ACF56B514776A1E00991ED5 /* Op.cpp */; };
+ 2ACF570B14776A1E00991ED5 /* Op.h in Headers */ = {isa = PBXBuildFile; fileRef = 2ACF56B614776A1E00991ED5 /* Op.h */; };
+ 2ACF570C14776A1E00991ED5 /* OpBuilders.h in Headers */ = {isa = PBXBuildFile; fileRef = 2ACF56B714776A1E00991ED5 /* OpBuilders.h */; };
+ 2ACF570D14776A1E00991ED5 /* ParseUtils.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2ACF56B814776A1E00991ED5 /* ParseUtils.cpp */; };
+ 2ACF570E14776A1E00991ED5 /* ParseUtils.h in Headers */ = {isa = PBXBuildFile; fileRef = 2ACF56B914776A1E00991ED5 /* ParseUtils.h */; };
+ 2ACF570F14776A1E00991ED5 /* PathUtils.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2ACF56BA14776A1E00991ED5 /* PathUtils.cpp */; };
+ 2ACF571014776A1E00991ED5 /* PathUtils.h in Headers */ = {isa = PBXBuildFile; fileRef = 2ACF56BB14776A1E00991ED5 /* PathUtils.h */; };
+ 2ACF571114776A1E00991ED5 /* Platform.h in Headers */ = {isa = PBXBuildFile; fileRef = 2ACF56BC14776A1E00991ED5 /* Platform.h */; };
+ 2ACF571214776A1E00991ED5 /* PrivateTypes.h in Headers */ = {isa = PBXBuildFile; fileRef = 2ACF56BD14776A1E00991ED5 /* PrivateTypes.h */; };
+ 2ACF571314776A1E00991ED5 /* Processor.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2ACF56BE14776A1E00991ED5 /* Processor.cpp */; };
+ 2ACF571414776A1E00991ED5 /* Processor.h in Headers */ = {isa = PBXBuildFile; fileRef = 2ACF56BF14776A1E00991ED5 /* Processor.h */; };
+ 2ACF571514776A1E00991ED5 /* pystring.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2ACF56C114776A1E00991ED5 /* pystring.cpp */; };
+ 2ACF571614776A1E00991ED5 /* pystring.h in Headers */ = {isa = PBXBuildFile; fileRef = 2ACF56C214776A1E00991ED5 /* pystring.h */; };
+ 2ACF571714776A1E00991ED5 /* ScanlineHelper.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2ACF56C314776A1E00991ED5 /* ScanlineHelper.cpp */; };
+ 2ACF571814776A1E00991ED5 /* ScanlineHelper.h in Headers */ = {isa = PBXBuildFile; fileRef = 2ACF56C414776A1E00991ED5 /* ScanlineHelper.h */; };
+ 2ACF571914776A1E00991ED5 /* SSE.h in Headers */ = {isa = PBXBuildFile; fileRef = 2ACF56C514776A1E00991ED5 /* SSE.h */; };
+ 2ACF571A14776A1E00991ED5 /* Transform.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2ACF56C614776A1E00991ED5 /* Transform.cpp */; };
+ 2ACF571B14776A1E00991ED5 /* TruelightOp.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2ACF56C714776A1E00991ED5 /* TruelightOp.cpp */; };
+ 2ACF571C14776A1E00991ED5 /* TruelightOp.h in Headers */ = {isa = PBXBuildFile; fileRef = 2ACF56C814776A1E00991ED5 /* TruelightOp.h */; };
+ 2ACF571D14776A1E00991ED5 /* TruelightTransform.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2ACF56C914776A1E00991ED5 /* TruelightTransform.cpp */; };
+ 2ACF571E14776A1E00991ED5 /* UnitTest.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2ACF56CA14776A1E00991ED5 /* UnitTest.cpp */; };
+ 2ACF571F14776A1E00991ED5 /* UnitTest.h in Headers */ = {isa = PBXBuildFile; fileRef = 2ACF56CB14776A1E00991ED5 /* UnitTest.h */; };
+ 2ACF573F14776B7000991ED5 /* OpenColorABI.h in Headers */ = {isa = PBXBuildFile; fileRef = 2ACF573E14776B7000991ED5 /* OpenColorABI.h */; };
+/* End PBXBuildFile section */
+
+/* Begin PBXFileReference section */
+ 2A7CACB515536CD700F52C98 /* FileFormatIridasLook.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = FileFormatIridasLook.cpp; sourceTree = "<group>"; };
+ 2A7CACB615536CD700F52C98 /* LookParse.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = LookParse.cpp; sourceTree = "<group>"; };
+ 2A7CACB715536CD700F52C98 /* LookParse.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = LookParse.h; sourceTree = "<group>"; };
+ 2A7CACB815536CD700F52C98 /* NoOps.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = NoOps.cpp; sourceTree = "<group>"; };
+ 2A7CACB915536CD700F52C98 /* NoOps.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = NoOps.h; sourceTree = "<group>"; };
+ 2A7CACBA15536CD700F52C98 /* OpOptimizers.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = OpOptimizers.cpp; sourceTree = "<group>"; };
+ 2ACF567114776A0A00991ED5 /* libOpenColorIO.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libOpenColorIO.a; sourceTree = BUILT_PRODUCTS_DIR; };
+ 2ACF567614776A1E00991ED5 /* AllocationOp.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = AllocationOp.cpp; sourceTree = "<group>"; };
+ 2ACF567714776A1E00991ED5 /* AllocationOp.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AllocationOp.h; sourceTree = "<group>"; };
+ 2ACF567814776A1E00991ED5 /* AllocationTransform.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = AllocationTransform.cpp; sourceTree = "<group>"; };
+ 2ACF567914776A1E00991ED5 /* Baker.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Baker.cpp; sourceTree = "<group>"; };
+ 2ACF567A14776A1E00991ED5 /* Caching.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Caching.cpp; sourceTree = "<group>"; };
+ 2ACF567B14776A1E00991ED5 /* CDLTransform.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CDLTransform.cpp; sourceTree = "<group>"; };
+ 2ACF567C14776A1E00991ED5 /* CDLTransform.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CDLTransform.h; sourceTree = "<group>"; };
+ 2ACF567D14776A1E00991ED5 /* ColorSpace.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ColorSpace.cpp; sourceTree = "<group>"; };
+ 2ACF567E14776A1E00991ED5 /* ColorSpaceTransform.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ColorSpaceTransform.cpp; sourceTree = "<group>"; };
+ 2ACF567F14776A1E00991ED5 /* Config.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Config.cpp; sourceTree = "<group>"; };
+ 2ACF568014776A1E00991ED5 /* Context.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Context.cpp; sourceTree = "<group>"; };
+ 2ACF568114776A1E00991ED5 /* DisplayTransform.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = DisplayTransform.cpp; sourceTree = "<group>"; };
+ 2ACF568214776A1E00991ED5 /* Exception.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Exception.cpp; sourceTree = "<group>"; };
+ 2ACF568314776A1E00991ED5 /* ExponentOps.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ExponentOps.cpp; sourceTree = "<group>"; };
+ 2ACF568414776A1E00991ED5 /* ExponentOps.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ExponentOps.h; sourceTree = "<group>"; };
+ 2ACF568514776A1E00991ED5 /* ExponentTransform.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ExponentTransform.cpp; sourceTree = "<group>"; };
+ 2ACF568614776A1E00991ED5 /* FileFormat3DL.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = FileFormat3DL.cpp; sourceTree = "<group>"; };
+ 2ACF568714776A1E00991ED5 /* FileFormatCC.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = FileFormatCC.cpp; sourceTree = "<group>"; };
+ 2ACF568814776A1E00991ED5 /* FileFormatCCC.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = FileFormatCCC.cpp; sourceTree = "<group>"; };
+ 2ACF568914776A1E00991ED5 /* FileFormatCSP.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = FileFormatCSP.cpp; sourceTree = "<group>"; };
+ 2ACF568A14776A1E00991ED5 /* FileFormatHDL.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = FileFormatHDL.cpp; sourceTree = "<group>"; };
+ 2ACF568B14776A1E00991ED5 /* FileFormatIridasCube.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = FileFormatIridasCube.cpp; sourceTree = "<group>"; };
+ 2ACF568C14776A1E00991ED5 /* FileFormatIridasItx.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = FileFormatIridasItx.cpp; sourceTree = "<group>"; };
+ 2ACF568D14776A1E00991ED5 /* FileFormatPandora.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = FileFormatPandora.cpp; sourceTree = "<group>"; };
+ 2ACF568E14776A1E00991ED5 /* FileFormatSpi1D.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = FileFormatSpi1D.cpp; sourceTree = "<group>"; };
+ 2ACF568F14776A1E00991ED5 /* FileFormatSpi3D.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = FileFormatSpi3D.cpp; sourceTree = "<group>"; };
+ 2ACF569014776A1E00991ED5 /* FileFormatSpiMtx.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = FileFormatSpiMtx.cpp; sourceTree = "<group>"; };
+ 2ACF569114776A1E00991ED5 /* FileFormatTruelight.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = FileFormatTruelight.cpp; sourceTree = "<group>"; };
+ 2ACF569214776A1E00991ED5 /* FileFormatVF.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = FileFormatVF.cpp; sourceTree = "<group>"; };
+ 2ACF569314776A1E00991ED5 /* FileTransform.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = FileTransform.cpp; sourceTree = "<group>"; };
+ 2ACF569414776A1E00991ED5 /* FileTransform.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FileTransform.h; sourceTree = "<group>"; };
+ 2ACF569614776A1E00991ED5 /* GpuShaderDesc.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = GpuShaderDesc.cpp; sourceTree = "<group>"; };
+ 2ACF569714776A1E00991ED5 /* GpuShaderUtils.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = GpuShaderUtils.cpp; sourceTree = "<group>"; };
+ 2ACF569814776A1E00991ED5 /* GpuShaderUtils.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GpuShaderUtils.h; sourceTree = "<group>"; };
+ 2ACF569914776A1E00991ED5 /* GroupTransform.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = GroupTransform.cpp; sourceTree = "<group>"; };
+ 2ACF569A14776A1E00991ED5 /* HashUtils.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = HashUtils.cpp; sourceTree = "<group>"; };
+ 2ACF569B14776A1E00991ED5 /* HashUtils.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = HashUtils.h; sourceTree = "<group>"; };
+ 2ACF569C14776A1E00991ED5 /* ImageDesc.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ImageDesc.cpp; sourceTree = "<group>"; };
+ 2ACF569D14776A1E00991ED5 /* ImagePacking.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ImagePacking.cpp; sourceTree = "<group>"; };
+ 2ACF569E14776A1E00991ED5 /* ImagePacking.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ImagePacking.h; sourceTree = "<group>"; };
+ 2ACF569F14776A1E00991ED5 /* Logging.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Logging.cpp; sourceTree = "<group>"; };
+ 2ACF56A014776A1E00991ED5 /* Logging.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Logging.h; sourceTree = "<group>"; };
+ 2ACF56A114776A1E00991ED5 /* LogOps.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = LogOps.cpp; sourceTree = "<group>"; };
+ 2ACF56A214776A1E00991ED5 /* LogOps.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = LogOps.h; sourceTree = "<group>"; };
+ 2ACF56A314776A1E00991ED5 /* LogTransform.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = LogTransform.cpp; sourceTree = "<group>"; };
+ 2ACF56A414776A1E00991ED5 /* Look.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Look.cpp; sourceTree = "<group>"; };
+ 2ACF56A514776A1E00991ED5 /* LookTransform.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = LookTransform.cpp; sourceTree = "<group>"; };
+ 2ACF56A614776A1E00991ED5 /* Lut1DOp.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Lut1DOp.cpp; sourceTree = "<group>"; };
+ 2ACF56A714776A1E00991ED5 /* Lut1DOp.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Lut1DOp.h; sourceTree = "<group>"; };
+ 2ACF56A814776A1E00991ED5 /* Lut3DOp.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Lut3DOp.cpp; sourceTree = "<group>"; };
+ 2ACF56A914776A1E00991ED5 /* Lut3DOp.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Lut3DOp.h; sourceTree = "<group>"; };
+ 2ACF56AA14776A1E00991ED5 /* MathUtils.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = MathUtils.cpp; sourceTree = "<group>"; };
+ 2ACF56AB14776A1E00991ED5 /* MathUtils.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MathUtils.h; sourceTree = "<group>"; };
+ 2ACF56AC14776A1E00991ED5 /* MatrixOps.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = MatrixOps.cpp; sourceTree = "<group>"; };
+ 2ACF56AD14776A1E00991ED5 /* MatrixOps.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MatrixOps.h; sourceTree = "<group>"; };
+ 2ACF56AE14776A1E00991ED5 /* MatrixTransform.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = MatrixTransform.cpp; sourceTree = "<group>"; };
+ 2ACF56B014776A1E00991ED5 /* md5.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = md5.cpp; sourceTree = "<group>"; };
+ 2ACF56B114776A1E00991ED5 /* md5.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = md5.h; sourceTree = "<group>"; };
+ 2ACF56B214776A1E00991ED5 /* Mutex.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Mutex.h; sourceTree = "<group>"; };
+ 2ACF56B314776A1E00991ED5 /* OCIOYaml.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = OCIOYaml.cpp; sourceTree = "<group>"; };
+ 2ACF56B414776A1E00991ED5 /* OCIOYaml.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = OCIOYaml.h; sourceTree = "<group>"; };
+ 2ACF56B514776A1E00991ED5 /* Op.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Op.cpp; sourceTree = "<group>"; };
+ 2ACF56B614776A1E00991ED5 /* Op.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Op.h; sourceTree = "<group>"; };
+ 2ACF56B714776A1E00991ED5 /* OpBuilders.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = OpBuilders.h; sourceTree = "<group>"; };
+ 2ACF56B814776A1E00991ED5 /* ParseUtils.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ParseUtils.cpp; sourceTree = "<group>"; };
+ 2ACF56B914776A1E00991ED5 /* ParseUtils.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ParseUtils.h; sourceTree = "<group>"; };
+ 2ACF56BA14776A1E00991ED5 /* PathUtils.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = PathUtils.cpp; sourceTree = "<group>"; };
+ 2ACF56BB14776A1E00991ED5 /* PathUtils.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PathUtils.h; sourceTree = "<group>"; };
+ 2ACF56BC14776A1E00991ED5 /* Platform.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Platform.h; sourceTree = "<group>"; };
+ 2ACF56BD14776A1E00991ED5 /* PrivateTypes.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PrivateTypes.h; sourceTree = "<group>"; };
+ 2ACF56BE14776A1E00991ED5 /* Processor.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Processor.cpp; sourceTree = "<group>"; };
+ 2ACF56BF14776A1E00991ED5 /* Processor.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Processor.h; sourceTree = "<group>"; };
+ 2ACF56C114776A1E00991ED5 /* pystring.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = pystring.cpp; sourceTree = "<group>"; };
+ 2ACF56C214776A1E00991ED5 /* pystring.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = pystring.h; sourceTree = "<group>"; };
+ 2ACF56C314776A1E00991ED5 /* ScanlineHelper.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ScanlineHelper.cpp; sourceTree = "<group>"; };
+ 2ACF56C414776A1E00991ED5 /* ScanlineHelper.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ScanlineHelper.h; sourceTree = "<group>"; };
+ 2ACF56C514776A1E00991ED5 /* SSE.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SSE.h; sourceTree = "<group>"; };
+ 2ACF56C614776A1E00991ED5 /* Transform.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Transform.cpp; sourceTree = "<group>"; };
+ 2ACF56C714776A1E00991ED5 /* TruelightOp.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = TruelightOp.cpp; sourceTree = "<group>"; };
+ 2ACF56C814776A1E00991ED5 /* TruelightOp.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TruelightOp.h; sourceTree = "<group>"; };
+ 2ACF56C914776A1E00991ED5 /* TruelightTransform.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = TruelightTransform.cpp; sourceTree = "<group>"; };
+ 2ACF56CA14776A1E00991ED5 /* UnitTest.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = UnitTest.cpp; sourceTree = "<group>"; };
+ 2ACF56CB14776A1E00991ED5 /* UnitTest.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = UnitTest.h; sourceTree = "<group>"; };
+ 2ACF573E14776B7000991ED5 /* OpenColorABI.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = OpenColorABI.h; sourceTree = "<group>"; };
+/* End PBXFileReference section */
+
+/* Begin PBXFrameworksBuildPhase section */
+ 2ACF566F14776A0A00991ED5 /* Frameworks */ = {
+ isa = PBXFrameworksBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+/* End PBXFrameworksBuildPhase section */
+
+/* Begin PBXGroup section */
+ 034768DDFF38A45A11DB9C8B /* Products */ = {
+ isa = PBXGroup;
+ children = (
+ 2ACF567114776A0A00991ED5 /* libOpenColorIO.a */,
+ );
+ name = Products;
+ sourceTree = "<group>";
+ };
+ 0867D691FE84028FC02AAC07 /* OpenColorIO */ = {
+ isa = PBXGroup;
+ children = (
+ 2ACF573E14776B7000991ED5 /* OpenColorABI.h */,
+ 2ACF567514776A1E00991ED5 /* core */,
+ 034768DDFF38A45A11DB9C8B /* Products */,
+ );
+ name = OpenColorIO;
+ sourceTree = "<group>";
+ };
+ 2ACF567514776A1E00991ED5 /* core */ = {
+ isa = PBXGroup;
+ children = (
+ 2ACF567614776A1E00991ED5 /* AllocationOp.cpp */,
+ 2ACF567714776A1E00991ED5 /* AllocationOp.h */,
+ 2ACF567814776A1E00991ED5 /* AllocationTransform.cpp */,
+ 2ACF567914776A1E00991ED5 /* Baker.cpp */,
+ 2ACF567A14776A1E00991ED5 /* Caching.cpp */,
+ 2ACF567B14776A1E00991ED5 /* CDLTransform.cpp */,
+ 2ACF567C14776A1E00991ED5 /* CDLTransform.h */,
+ 2ACF567D14776A1E00991ED5 /* ColorSpace.cpp */,
+ 2ACF567E14776A1E00991ED5 /* ColorSpaceTransform.cpp */,
+ 2ACF567F14776A1E00991ED5 /* Config.cpp */,
+ 2ACF568014776A1E00991ED5 /* Context.cpp */,
+ 2ACF568114776A1E00991ED5 /* DisplayTransform.cpp */,
+ 2ACF568214776A1E00991ED5 /* Exception.cpp */,
+ 2ACF568314776A1E00991ED5 /* ExponentOps.cpp */,
+ 2ACF568414776A1E00991ED5 /* ExponentOps.h */,
+ 2ACF568514776A1E00991ED5 /* ExponentTransform.cpp */,
+ 2ACF568614776A1E00991ED5 /* FileFormat3DL.cpp */,
+ 2ACF568714776A1E00991ED5 /* FileFormatCC.cpp */,
+ 2ACF568814776A1E00991ED5 /* FileFormatCCC.cpp */,
+ 2ACF568914776A1E00991ED5 /* FileFormatCSP.cpp */,
+ 2ACF568A14776A1E00991ED5 /* FileFormatHDL.cpp */,
+ 2ACF568B14776A1E00991ED5 /* FileFormatIridasCube.cpp */,
+ 2ACF568C14776A1E00991ED5 /* FileFormatIridasItx.cpp */,
+ 2A7CACB515536CD700F52C98 /* FileFormatIridasLook.cpp */,
+ 2ACF568D14776A1E00991ED5 /* FileFormatPandora.cpp */,
+ 2ACF568E14776A1E00991ED5 /* FileFormatSpi1D.cpp */,
+ 2ACF568F14776A1E00991ED5 /* FileFormatSpi3D.cpp */,
+ 2ACF569014776A1E00991ED5 /* FileFormatSpiMtx.cpp */,
+ 2ACF569114776A1E00991ED5 /* FileFormatTruelight.cpp */,
+ 2ACF569214776A1E00991ED5 /* FileFormatVF.cpp */,
+ 2ACF569314776A1E00991ED5 /* FileTransform.cpp */,
+ 2ACF569414776A1E00991ED5 /* FileTransform.h */,
+ 2ACF569614776A1E00991ED5 /* GpuShaderDesc.cpp */,
+ 2ACF569714776A1E00991ED5 /* GpuShaderUtils.cpp */,
+ 2ACF569814776A1E00991ED5 /* GpuShaderUtils.h */,
+ 2ACF569914776A1E00991ED5 /* GroupTransform.cpp */,
+ 2ACF569A14776A1E00991ED5 /* HashUtils.cpp */,
+ 2ACF569B14776A1E00991ED5 /* HashUtils.h */,
+ 2ACF569C14776A1E00991ED5 /* ImageDesc.cpp */,
+ 2ACF569D14776A1E00991ED5 /* ImagePacking.cpp */,
+ 2ACF569E14776A1E00991ED5 /* ImagePacking.h */,
+ 2ACF569F14776A1E00991ED5 /* Logging.cpp */,
+ 2ACF56A014776A1E00991ED5 /* Logging.h */,
+ 2ACF56A114776A1E00991ED5 /* LogOps.cpp */,
+ 2ACF56A214776A1E00991ED5 /* LogOps.h */,
+ 2A7CACB615536CD700F52C98 /* LookParse.cpp */,
+ 2A7CACB715536CD700F52C98 /* LookParse.h */,
+ 2ACF56A314776A1E00991ED5 /* LogTransform.cpp */,
+ 2ACF56A414776A1E00991ED5 /* Look.cpp */,
+ 2ACF56A514776A1E00991ED5 /* LookTransform.cpp */,
+ 2ACF56A614776A1E00991ED5 /* Lut1DOp.cpp */,
+ 2ACF56A714776A1E00991ED5 /* Lut1DOp.h */,
+ 2ACF56A814776A1E00991ED5 /* Lut3DOp.cpp */,
+ 2ACF56A914776A1E00991ED5 /* Lut3DOp.h */,
+ 2ACF56AA14776A1E00991ED5 /* MathUtils.cpp */,
+ 2ACF56AB14776A1E00991ED5 /* MathUtils.h */,
+ 2ACF56AC14776A1E00991ED5 /* MatrixOps.cpp */,
+ 2ACF56AD14776A1E00991ED5 /* MatrixOps.h */,
+ 2ACF56AE14776A1E00991ED5 /* MatrixTransform.cpp */,
+ 2ACF56AF14776A1E00991ED5 /* md5 */,
+ 2ACF56B214776A1E00991ED5 /* Mutex.h */,
+ 2A7CACB815536CD700F52C98 /* NoOps.cpp */,
+ 2A7CACB915536CD700F52C98 /* NoOps.h */,
+ 2ACF56B314776A1E00991ED5 /* OCIOYaml.cpp */,
+ 2ACF56B414776A1E00991ED5 /* OCIOYaml.h */,
+ 2ACF56B514776A1E00991ED5 /* Op.cpp */,
+ 2ACF56B614776A1E00991ED5 /* Op.h */,
+ 2ACF56B714776A1E00991ED5 /* OpBuilders.h */,
+ 2A7CACBA15536CD700F52C98 /* OpOptimizers.cpp */,
+ 2ACF56B814776A1E00991ED5 /* ParseUtils.cpp */,
+ 2ACF56B914776A1E00991ED5 /* ParseUtils.h */,
+ 2ACF56BA14776A1E00991ED5 /* PathUtils.cpp */,
+ 2ACF56BB14776A1E00991ED5 /* PathUtils.h */,
+ 2ACF56BC14776A1E00991ED5 /* Platform.h */,
+ 2ACF56BD14776A1E00991ED5 /* PrivateTypes.h */,
+ 2ACF56BE14776A1E00991ED5 /* Processor.cpp */,
+ 2ACF56BF14776A1E00991ED5 /* Processor.h */,
+ 2ACF56C014776A1E00991ED5 /* pystring */,
+ 2ACF56C314776A1E00991ED5 /* ScanlineHelper.cpp */,
+ 2ACF56C414776A1E00991ED5 /* ScanlineHelper.h */,
+ 2ACF56C514776A1E00991ED5 /* SSE.h */,
+ 2ACF56C614776A1E00991ED5 /* Transform.cpp */,
+ 2ACF56C714776A1E00991ED5 /* TruelightOp.cpp */,
+ 2ACF56C814776A1E00991ED5 /* TruelightOp.h */,
+ 2ACF56C914776A1E00991ED5 /* TruelightTransform.cpp */,
+ 2ACF56CA14776A1E00991ED5 /* UnitTest.cpp */,
+ 2ACF56CB14776A1E00991ED5 /* UnitTest.h */,
+ );
+ name = core;
+ path = ../../core;
+ sourceTree = SOURCE_ROOT;
+ };
+ 2ACF56AF14776A1E00991ED5 /* md5 */ = {
+ isa = PBXGroup;
+ children = (
+ 2ACF56B014776A1E00991ED5 /* md5.cpp */,
+ 2ACF56B114776A1E00991ED5 /* md5.h */,
+ );
+ path = md5;
+ sourceTree = "<group>";
+ };
+ 2ACF56C014776A1E00991ED5 /* pystring */ = {
+ isa = PBXGroup;
+ children = (
+ 2ACF56C114776A1E00991ED5 /* pystring.cpp */,
+ 2ACF56C214776A1E00991ED5 /* pystring.h */,
+ );
+ path = pystring;
+ sourceTree = "<group>";
+ };
+/* End PBXGroup section */
+
+/* Begin PBXHeadersBuildPhase section */
+ 2ACF566D14776A0A00991ED5 /* Headers */ = {
+ isa = PBXHeadersBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ 2ACF56CD14776A1E00991ED5 /* AllocationOp.h in Headers */,
+ 2ACF56D214776A1E00991ED5 /* CDLTransform.h in Headers */,
+ 2ACF56DA14776A1E00991ED5 /* ExponentOps.h in Headers */,
+ 2ACF56EA14776A1E00991ED5 /* FileTransform.h in Headers */,
+ 2ACF56EE14776A1E00991ED5 /* GpuShaderUtils.h in Headers */,
+ 2ACF56F114776A1E00991ED5 /* HashUtils.h in Headers */,
+ 2ACF56F414776A1E00991ED5 /* ImagePacking.h in Headers */,
+ 2ACF56F614776A1E00991ED5 /* Logging.h in Headers */,
+ 2ACF56F814776A1E00991ED5 /* LogOps.h in Headers */,
+ 2ACF56FD14776A1E00991ED5 /* Lut1DOp.h in Headers */,
+ 2ACF56FF14776A1E00991ED5 /* Lut3DOp.h in Headers */,
+ 2ACF570114776A1E00991ED5 /* MathUtils.h in Headers */,
+ 2ACF570314776A1E00991ED5 /* MatrixOps.h in Headers */,
+ 2ACF570614776A1E00991ED5 /* md5.h in Headers */,
+ 2ACF570714776A1E00991ED5 /* Mutex.h in Headers */,
+ 2ACF570914776A1E00991ED5 /* OCIOYaml.h in Headers */,
+ 2ACF570B14776A1E00991ED5 /* Op.h in Headers */,
+ 2ACF570C14776A1E00991ED5 /* OpBuilders.h in Headers */,
+ 2ACF570E14776A1E00991ED5 /* ParseUtils.h in Headers */,
+ 2ACF571014776A1E00991ED5 /* PathUtils.h in Headers */,
+ 2ACF571114776A1E00991ED5 /* Platform.h in Headers */,
+ 2ACF571214776A1E00991ED5 /* PrivateTypes.h in Headers */,
+ 2ACF571414776A1E00991ED5 /* Processor.h in Headers */,
+ 2ACF571614776A1E00991ED5 /* pystring.h in Headers */,
+ 2ACF571814776A1E00991ED5 /* ScanlineHelper.h in Headers */,
+ 2ACF571914776A1E00991ED5 /* SSE.h in Headers */,
+ 2ACF571C14776A1E00991ED5 /* TruelightOp.h in Headers */,
+ 2ACF571F14776A1E00991ED5 /* UnitTest.h in Headers */,
+ 2ACF573F14776B7000991ED5 /* OpenColorABI.h in Headers */,
+ 2A7CACBD15536CD700F52C98 /* LookParse.h in Headers */,
+ 2A7CACBF15536CD700F52C98 /* NoOps.h in Headers */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+/* End PBXHeadersBuildPhase section */
+
+/* Begin PBXNativeTarget section */
+ 2ACF567014776A0A00991ED5 /* OpenColorIO */ = {
+ isa = PBXNativeTarget;
+ buildConfigurationList = 2ACF567414776A1300991ED5 /* Build configuration list for PBXNativeTarget "OpenColorIO" */;
+ buildPhases = (
+ 2ACF566D14776A0A00991ED5 /* Headers */,
+ 2ACF566E14776A0A00991ED5 /* Sources */,
+ 2ACF566F14776A0A00991ED5 /* Frameworks */,
+ );
+ buildRules = (
+ );
+ dependencies = (
+ );
+ name = OpenColorIO;
+ productName = OpenColorIO;
+ productReference = 2ACF567114776A0A00991ED5 /* libOpenColorIO.a */;
+ productType = "com.apple.product-type.library.static";
+ };
+/* End PBXNativeTarget section */
+
+/* Begin PBXProject section */
+ 0867D690FE84028FC02AAC07 /* Project object */ = {
+ isa = PBXProject;
+ buildConfigurationList = 1DEB916408733D950010E9CD /* Build configuration list for PBXProject "OpenColorIO" */;
+ compatibilityVersion = "Xcode 3.1";
+ developmentRegion = English;
+ hasScannedForEncodings = 1;
+ knownRegions = (
+ English,
+ Japanese,
+ French,
+ German,
+ );
+ mainGroup = 0867D691FE84028FC02AAC07 /* OpenColorIO */;
+ productRefGroup = 034768DDFF38A45A11DB9C8B /* Products */;
+ projectDirPath = "";
+ projectRoot = "";
+ targets = (
+ 2ACF567014776A0A00991ED5 /* OpenColorIO */,
+ );
+ };
+/* End PBXProject section */
+
+/* Begin PBXSourcesBuildPhase section */
+ 2ACF566E14776A0A00991ED5 /* Sources */ = {
+ isa = PBXSourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ 2ACF56CC14776A1E00991ED5 /* AllocationOp.cpp in Sources */,
+ 2ACF56CE14776A1E00991ED5 /* AllocationTransform.cpp in Sources */,
+ 2ACF56CF14776A1E00991ED5 /* Baker.cpp in Sources */,
+ 2ACF56D014776A1E00991ED5 /* Caching.cpp in Sources */,
+ 2ACF56D114776A1E00991ED5 /* CDLTransform.cpp in Sources */,
+ 2ACF56D314776A1E00991ED5 /* ColorSpace.cpp in Sources */,
+ 2ACF56D414776A1E00991ED5 /* ColorSpaceTransform.cpp in Sources */,
+ 2ACF56D514776A1E00991ED5 /* Config.cpp in Sources */,
+ 2ACF56D614776A1E00991ED5 /* Context.cpp in Sources */,
+ 2ACF56D714776A1E00991ED5 /* DisplayTransform.cpp in Sources */,
+ 2ACF56D814776A1E00991ED5 /* Exception.cpp in Sources */,
+ 2ACF56D914776A1E00991ED5 /* ExponentOps.cpp in Sources */,
+ 2ACF56DB14776A1E00991ED5 /* ExponentTransform.cpp in Sources */,
+ 2ACF56DC14776A1E00991ED5 /* FileFormat3DL.cpp in Sources */,
+ 2ACF56DD14776A1E00991ED5 /* FileFormatCC.cpp in Sources */,
+ 2ACF56DE14776A1E00991ED5 /* FileFormatCCC.cpp in Sources */,
+ 2ACF56DF14776A1E00991ED5 /* FileFormatCSP.cpp in Sources */,
+ 2ACF56E014776A1E00991ED5 /* FileFormatHDL.cpp in Sources */,
+ 2ACF56E114776A1E00991ED5 /* FileFormatIridasCube.cpp in Sources */,
+ 2ACF56E214776A1E00991ED5 /* FileFormatIridasItx.cpp in Sources */,
+ 2ACF56E314776A1E00991ED5 /* FileFormatPandora.cpp in Sources */,
+ 2ACF56E414776A1E00991ED5 /* FileFormatSpi1D.cpp in Sources */,
+ 2ACF56E514776A1E00991ED5 /* FileFormatSpi3D.cpp in Sources */,
+ 2ACF56E614776A1E00991ED5 /* FileFormatSpiMtx.cpp in Sources */,
+ 2ACF56E714776A1E00991ED5 /* FileFormatTruelight.cpp in Sources */,
+ 2ACF56E814776A1E00991ED5 /* FileFormatVF.cpp in Sources */,
+ 2ACF56E914776A1E00991ED5 /* FileTransform.cpp in Sources */,
+ 2ACF56EC14776A1E00991ED5 /* GpuShaderDesc.cpp in Sources */,
+ 2ACF56ED14776A1E00991ED5 /* GpuShaderUtils.cpp in Sources */,
+ 2ACF56EF14776A1E00991ED5 /* GroupTransform.cpp in Sources */,
+ 2ACF56F014776A1E00991ED5 /* HashUtils.cpp in Sources */,
+ 2ACF56F214776A1E00991ED5 /* ImageDesc.cpp in Sources */,
+ 2ACF56F314776A1E00991ED5 /* ImagePacking.cpp in Sources */,
+ 2ACF56F514776A1E00991ED5 /* Logging.cpp in Sources */,
+ 2ACF56F714776A1E00991ED5 /* LogOps.cpp in Sources */,
+ 2ACF56F914776A1E00991ED5 /* LogTransform.cpp in Sources */,
+ 2ACF56FA14776A1E00991ED5 /* Look.cpp in Sources */,
+ 2ACF56FB14776A1E00991ED5 /* LookTransform.cpp in Sources */,
+ 2ACF56FC14776A1E00991ED5 /* Lut1DOp.cpp in Sources */,
+ 2ACF56FE14776A1E00991ED5 /* Lut3DOp.cpp in Sources */,
+ 2ACF570014776A1E00991ED5 /* MathUtils.cpp in Sources */,
+ 2ACF570214776A1E00991ED5 /* MatrixOps.cpp in Sources */,
+ 2ACF570414776A1E00991ED5 /* MatrixTransform.cpp in Sources */,
+ 2ACF570514776A1E00991ED5 /* md5.cpp in Sources */,
+ 2ACF570814776A1E00991ED5 /* OCIOYaml.cpp in Sources */,
+ 2ACF570A14776A1E00991ED5 /* Op.cpp in Sources */,
+ 2ACF570D14776A1E00991ED5 /* ParseUtils.cpp in Sources */,
+ 2ACF570F14776A1E00991ED5 /* PathUtils.cpp in Sources */,
+ 2ACF571314776A1E00991ED5 /* Processor.cpp in Sources */,
+ 2ACF571514776A1E00991ED5 /* pystring.cpp in Sources */,
+ 2ACF571714776A1E00991ED5 /* ScanlineHelper.cpp in Sources */,
+ 2ACF571A14776A1E00991ED5 /* Transform.cpp in Sources */,
+ 2ACF571B14776A1E00991ED5 /* TruelightOp.cpp in Sources */,
+ 2ACF571D14776A1E00991ED5 /* TruelightTransform.cpp in Sources */,
+ 2ACF571E14776A1E00991ED5 /* UnitTest.cpp in Sources */,
+ 2A7CACBB15536CD700F52C98 /* FileFormatIridasLook.cpp in Sources */,
+ 2A7CACBC15536CD700F52C98 /* LookParse.cpp in Sources */,
+ 2A7CACBE15536CD700F52C98 /* NoOps.cpp in Sources */,
+ 2A7CACC015536CD700F52C98 /* OpOptimizers.cpp in Sources */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+/* End PBXSourcesBuildPhase section */
+
+/* Begin XCBuildConfiguration section */
+ 1DEB916508733D950010E9CD /* Debug */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ ARCHS = "$(ARCHS_STANDARD_32_64_BIT)";
+ GCC_C_LANGUAGE_STANDARD = gnu99;
+ GCC_OPTIMIZATION_LEVEL = 0;
+ GCC_PREPROCESSOR_DEFINITIONS = TIXML_USE_STL;
+ GCC_WARN_ABOUT_RETURN_TYPE = YES;
+ GCC_WARN_UNUSED_VARIABLE = YES;
+ HEADER_SEARCH_PATHS = (
+ ../../../export,
+ ../../../ext/tinyxml,
+ "../../../ext/yaml-cpp/include",
+ );
+ ONLY_ACTIVE_ARCH = YES;
+ PREBINDING = NO;
+ SDKROOT = macosx10.5;
+ };
+ name = Debug;
+ };
+ 1DEB916608733D950010E9CD /* Release */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ ARCHS = "$(ARCHS_STANDARD_32_64_BIT)";
+ GCC_C_LANGUAGE_STANDARD = gnu99;
+ GCC_PREPROCESSOR_DEFINITIONS = (
+ NDEBUG,
+ TIXML_USE_STL,
+ );
+ GCC_WARN_ABOUT_RETURN_TYPE = YES;
+ GCC_WARN_UNUSED_VARIABLE = YES;
+ HEADER_SEARCH_PATHS = (
+ ../../../export,
+ ../../../ext/tinyxml,
+ "../../../ext/yaml-cpp/include",
+ );
+ PREBINDING = NO;
+ SDKROOT = macosx10.5;
+ };
+ name = Release;
+ };
+ 2ACF567214776A0A00991ED5 /* Debug */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ ALWAYS_SEARCH_USER_PATHS = NO;
+ COPY_PHASE_STRIP = NO;
+ GCC_DYNAMIC_NO_PIC = NO;
+ GCC_ENABLE_FIX_AND_CONTINUE = YES;
+ GCC_MODEL_TUNING = G5;
+ GCC_OPTIMIZATION_LEVEL = 0;
+ INSTALL_PATH = /usr/local/lib;
+ PREBINDING = NO;
+ PRODUCT_NAME = OpenColorIO;
+ };
+ name = Debug;
+ };
+ 2ACF567314776A0A00991ED5 /* Release */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ ALWAYS_SEARCH_USER_PATHS = NO;
+ COPY_PHASE_STRIP = YES;
+ DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
+ GCC_ENABLE_FIX_AND_CONTINUE = NO;
+ GCC_MODEL_TUNING = G5;
+ INSTALL_PATH = /usr/local/lib;
+ PREBINDING = NO;
+ PRODUCT_NAME = OpenColorIO;
+ ZERO_LINK = NO;
+ };
+ name = Release;
+ };
+/* End XCBuildConfiguration section */
+
+/* Begin XCConfigurationList section */
+ 1DEB916408733D950010E9CD /* Build configuration list for PBXProject "OpenColorIO" */ = {
+ isa = XCConfigurationList;
+ buildConfigurations = (
+ 1DEB916508733D950010E9CD /* Debug */,
+ 1DEB916608733D950010E9CD /* Release */,
+ );
+ defaultConfigurationIsVisible = 0;
+ defaultConfigurationName = Release;
+ };
+ 2ACF567414776A1300991ED5 /* Build configuration list for PBXNativeTarget "OpenColorIO" */ = {
+ isa = XCConfigurationList;
+ buildConfigurations = (
+ 2ACF567214776A0A00991ED5 /* Debug */,
+ 2ACF567314776A0A00991ED5 /* Release */,
+ );
+ defaultConfigurationIsVisible = 0;
+ defaultConfigurationName = Release;
+ };
+/* End XCConfigurationList section */
+ };
+ rootObject = 0867D690FE84028FC02AAC07 /* Project object */;
+}
diff --git a/src/aftereffects/xcode/aftereffects/OpenColorIO_AE.xcodeproj/project.pbxproj b/src/aftereffects/xcode/aftereffects/OpenColorIO_AE.xcodeproj/project.pbxproj
new file mode 100755
index 0000000..84253ae
--- /dev/null
+++ b/src/aftereffects/xcode/aftereffects/OpenColorIO_AE.xcodeproj/project.pbxproj
@@ -0,0 +1,509 @@
+// !$*UTF8*$!
+{
+ archiveVersion = 1;
+ classes = {
+ };
+ objectVersion = 44;
+ objects = {
+
+/* Begin PBXBuildFile section */
+ 2A180A6914801EB90000D11A /* OpenColorIO_AE_MonitorProfileChooser.xib in Resources */ = {isa = PBXBuildFile; fileRef = 2A180A6814801EB90000D11A /* OpenColorIO_AE_MonitorProfileChooser.xib */; };
+ 2A180A6D14801FFA0000D11A /* OpenColorIO_AE_MonitorProfileChooser_Controller.m in Sources */ = {isa = PBXBuildFile; fileRef = 2A180A6B14801FFA0000D11A /* OpenColorIO_AE_MonitorProfileChooser_Controller.m */; };
+ 2A3BAA7110C0F40600AD32F2 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 2A3BAA7010C0F40600AD32F2 /* Cocoa.framework */; };
+ 2A4A0AF61554679400D5AEB7 /* ocioicc.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2A4A0AF41554679400D5AEB7 /* ocioicc.cpp */; };
+ 2A60CADB1491A51C009D6DBF /* OpenColorIO_AE_GL_Cocoa.mm in Sources */ = {isa = PBXBuildFile; fileRef = 2A60CADA1491A51C009D6DBF /* OpenColorIO_AE_GL_Cocoa.mm */; };
+ 2A60CB091491A9FF009D6DBF /* AGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 2A60CB081491A9FF009D6DBF /* AGL.framework */; };
+ 2A60CB0B1491A9FF009D6DBF /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 2A60CB0A1491A9FF009D6DBF /* OpenGL.framework */; };
+ 2AF56B96147A431100F9968C /* OpenColorIO_AE_ArbData.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2AF56B8F147A431100F9968C /* OpenColorIO_AE_ArbData.cpp */; };
+ 2AF56B99147A431100F9968C /* OpenColorIO_AE_PiPL.r in Rez */ = {isa = PBXBuildFile; fileRef = 2AF56B92147A431100F9968C /* OpenColorIO_AE_PiPL.r */; };
+ 2AF56B9A147A431100F9968C /* OpenColorIO_AE_UI.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2AF56B93147A431100F9968C /* OpenColorIO_AE_UI.cpp */; };
+ 2AF56B9B147A431100F9968C /* OpenColorIO_AE.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2AF56B94147A431100F9968C /* OpenColorIO_AE.cpp */; };
+ 2AF56BA0147A458800F9968C /* AEGP_SuiteHandler.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2AF56B9D147A458800F9968C /* AEGP_SuiteHandler.cpp */; };
+ 2AF56BA1147A458800F9968C /* MissingSuiteError.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2AF56B9F147A458800F9968C /* MissingSuiteError.cpp */; };
+ 2AF56C24147A54A300F9968C /* OpenColorIO_AE_Dialogs_Cocoa.mm in Sources */ = {isa = PBXBuildFile; fileRef = 2AF56B90147A431100F9968C /* OpenColorIO_AE_Dialogs_Cocoa.mm */; };
+ 2AF56D06147AB5C900F9968C /* DrawbotBot.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2AF56D04147AB5C900F9968C /* DrawbotBot.cpp */; };
+ 2AF56EE8147AD11200F9968C /* libOpenColorIO.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 2AF56EE7147AD10E00F9968C /* libOpenColorIO.a */; };
+ 2AF57004147AE17200F9968C /* libtinyxml.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 2AF56FFB147AE16A00F9968C /* libtinyxml.a */; };
+ 2AF57005147AE17400F9968C /* libyaml.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 2AF57001147AE16A00F9968C /* libyaml.a */; };
+ 2AF57B93147C6FE000F9968C /* OpenColorIO_AE_Menu.m in Sources */ = {isa = PBXBuildFile; fileRef = 2AF57B92147C6FE000F9968C /* OpenColorIO_AE_Menu.m */; };
+ 2AF57D20147C994100F9968C /* OpenColorIO_AE_Context.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2AF57D1F147C994100F9968C /* OpenColorIO_AE_Context.cpp */; };
+ 2AF999CB147E1DD200FEB83B /* liblcms.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 2AF999C8147E1DCA00FEB83B /* liblcms.a */; };
+/* End PBXBuildFile section */
+
+/* Begin PBXContainerItemProxy section */
+ 2AF56EE6147AD10E00F9968C /* PBXContainerItemProxy */ = {
+ isa = PBXContainerItemProxy;
+ containerPortal = 2AF56EE2147AD10E00F9968C /* OpenColorIO.xcodeproj */;
+ proxyType = 2;
+ remoteGlobalIDString = 2ACF567114776A0A00991ED5;
+ remoteInfo = OpenColorIO;
+ };
+ 2AF56FFA147AE16A00F9968C /* PBXContainerItemProxy */ = {
+ isa = PBXContainerItemProxy;
+ containerPortal = 2AF56FF0147AE16A00F9968C /* tinyxml.xcodeproj */;
+ proxyType = 2;
+ remoteGlobalIDString = 2ACF55441477682B00991ED5;
+ remoteInfo = tinyxml;
+ };
+ 2AF57000147AE16A00F9968C /* PBXContainerItemProxy */ = {
+ isa = PBXContainerItemProxy;
+ containerPortal = 2AF56FF3147AE16A00F9968C /* yaml.xcodeproj */;
+ proxyType = 2;
+ remoteGlobalIDString = 2ACF559C1477692300991ED5;
+ remoteInfo = yaml;
+ };
+ 2AF57012147AE18600F9968C /* PBXContainerItemProxy */ = {
+ isa = PBXContainerItemProxy;
+ containerPortal = 2AF56FF0147AE16A00F9968C /* tinyxml.xcodeproj */;
+ proxyType = 1;
+ remoteGlobalIDString = 2ACF55431477682B00991ED5;
+ remoteInfo = tinyxml;
+ };
+ 2AF57014147AE18600F9968C /* PBXContainerItemProxy */ = {
+ isa = PBXContainerItemProxy;
+ containerPortal = 2AF56FF3147AE16A00F9968C /* yaml.xcodeproj */;
+ proxyType = 1;
+ remoteGlobalIDString = 2ACF559B1477692300991ED5;
+ remoteInfo = yaml;
+ };
+ 2AF57016147AE18600F9968C /* PBXContainerItemProxy */ = {
+ isa = PBXContainerItemProxy;
+ containerPortal = 2AF56EE2147AD10E00F9968C /* OpenColorIO.xcodeproj */;
+ proxyType = 1;
+ remoteGlobalIDString = 2ACF567014776A0A00991ED5;
+ remoteInfo = OpenColorIO;
+ };
+ 2AF999C7147E1DCA00FEB83B /* PBXContainerItemProxy */ = {
+ isa = PBXContainerItemProxy;
+ containerPortal = 2AF999C0147E1DCA00FEB83B /* lcms.xcodeproj */;
+ proxyType = 2;
+ remoteGlobalIDString = 2ACF9E56147824F500991ED5;
+ remoteInfo = lcms;
+ };
+ 2AF999CC147E1DDB00FEB83B /* PBXContainerItemProxy */ = {
+ isa = PBXContainerItemProxy;
+ containerPortal = 2AF999C0147E1DCA00FEB83B /* lcms.xcodeproj */;
+ proxyType = 1;
+ remoteGlobalIDString = 2ACF9E55147824F500991ED5;
+ remoteInfo = lcms;
+ };
+/* End PBXContainerItemProxy section */
+
+/* Begin PBXFileReference section */
+ 2A180A6814801EB90000D11A /* OpenColorIO_AE_MonitorProfileChooser.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = OpenColorIO_AE_MonitorProfileChooser.xib; path = ../../mac/OpenColorIO_AE_MonitorProfileChooser.xib; sourceTree = "<group>"; };
+ 2A180A6B14801FFA0000D11A /* OpenColorIO_AE_MonitorProfileChooser_Controller.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = OpenColorIO_AE_MonitorProfileChooser_Controller.m; path = ../../mac/OpenColorIO_AE_MonitorProfileChooser_Controller.m; sourceTree = "<group>"; usesTabs = 0; };
+ 2A180A6C14801FFA0000D11A /* OpenColorIO_AE_MonitorProfileChooser_Controller.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = OpenColorIO_AE_MonitorProfileChooser_Controller.h; path = ../../mac/OpenColorIO_AE_MonitorProfileChooser_Controller.h; sourceTree = "<group>"; usesTabs = 0; };
+ 2A3BAA7010C0F40600AD32F2 /* Cocoa.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Cocoa.framework; path = /System/Library/Frameworks/Cocoa.framework; sourceTree = "<absolute>"; };
+ 2A4A0AF41554679400D5AEB7 /* ocioicc.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = ocioicc.cpp; path = ../../../apps/ociobakelut/ocioicc.cpp; sourceTree = SOURCE_ROOT; };
+ 2A4A0AF51554679400D5AEB7 /* ocioicc.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = ocioicc.h; path = ../../../apps/ociobakelut/ocioicc.h; sourceTree = SOURCE_ROOT; };
+ 2A60CAD91491A506009D6DBF /* OpenColorIO_AE_GL.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = OpenColorIO_AE_GL.h; path = ../../OpenColorIO_AE_GL.h; sourceTree = SOURCE_ROOT; usesTabs = 0; };
+ 2A60CADA1491A51C009D6DBF /* OpenColorIO_AE_GL_Cocoa.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; name = OpenColorIO_AE_GL_Cocoa.mm; path = ../../mac/OpenColorIO_AE_GL_Cocoa.mm; sourceTree = SOURCE_ROOT; usesTabs = 0; };
+ 2A60CB081491A9FF009D6DBF /* AGL.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AGL.framework; path = System/Library/Frameworks/AGL.framework; sourceTree = SDKROOT; };
+ 2A60CB0A1491A9FF009D6DBF /* OpenGL.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = OpenGL.framework; path = System/Library/Frameworks/OpenGL.framework; sourceTree = SDKROOT; };
+ 2AF56B8F147A431100F9968C /* OpenColorIO_AE_ArbData.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = OpenColorIO_AE_ArbData.cpp; path = ../../OpenColorIO_AE_ArbData.cpp; sourceTree = SOURCE_ROOT; usesTabs = 0; };
+ 2AF56B90147A431100F9968C /* OpenColorIO_AE_Dialogs_Cocoa.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; name = OpenColorIO_AE_Dialogs_Cocoa.mm; path = ../../mac/OpenColorIO_AE_Dialogs_Cocoa.mm; sourceTree = SOURCE_ROOT; usesTabs = 0; };
+ 2AF56B92147A431100F9968C /* OpenColorIO_AE_PiPL.r */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.rez; name = OpenColorIO_AE_PiPL.r; path = ../../OpenColorIO_AE_PiPL.r; sourceTree = SOURCE_ROOT; usesTabs = 0; };
+ 2AF56B93147A431100F9968C /* OpenColorIO_AE_UI.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = OpenColorIO_AE_UI.cpp; path = ../../OpenColorIO_AE_UI.cpp; sourceTree = SOURCE_ROOT; usesTabs = 0; };
+ 2AF56B94147A431100F9968C /* OpenColorIO_AE.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = OpenColorIO_AE.cpp; path = ../../OpenColorIO_AE.cpp; sourceTree = SOURCE_ROOT; usesTabs = 0; };
+ 2AF56B95147A431100F9968C /* OpenColorIO_AE.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = OpenColorIO_AE.h; path = ../../OpenColorIO_AE.h; sourceTree = SOURCE_ROOT; usesTabs = 0; };
+ 2AF56B9D147A458800F9968C /* AEGP_SuiteHandler.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = AEGP_SuiteHandler.cpp; path = "../../../../ext/Adobe After Effects CS5 SDK/Examples/Util/AEGP_SuiteHandler.cpp"; sourceTree = SOURCE_ROOT; usesTabs = 0; };
+ 2AF56B9E147A458800F9968C /* AEGP_SuiteHandler.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = AEGP_SuiteHandler.h; path = "../../../../ext/Adobe After Effects CS5 SDK/Examples/Util/AEGP_SuiteHandler.h"; sourceTree = SOURCE_ROOT; usesTabs = 0; };
+ 2AF56B9F147A458800F9968C /* MissingSuiteError.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = MissingSuiteError.cpp; path = "../../../../ext/Adobe After Effects CS5 SDK/Examples/Util/MissingSuiteError.cpp"; sourceTree = SOURCE_ROOT; usesTabs = 0; };
+ 2AF56D04147AB5C900F9968C /* DrawbotBot.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = DrawbotBot.cpp; path = ../../DrawbotBot.cpp; sourceTree = SOURCE_ROOT; usesTabs = 0; };
+ 2AF56D05147AB5C900F9968C /* DrawbotBot.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = DrawbotBot.h; path = ../../DrawbotBot.h; sourceTree = SOURCE_ROOT; usesTabs = 0; };
+ 2AF56EE2147AD10E00F9968C /* OpenColorIO.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = OpenColorIO.xcodeproj; path = ../OpenColorIO.xcodeproj; sourceTree = SOURCE_ROOT; };
+ 2AF56FF0147AE16A00F9968C /* tinyxml.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = tinyxml.xcodeproj; path = ../ext/tinyxml.xcodeproj; sourceTree = SOURCE_ROOT; };
+ 2AF56FF3147AE16A00F9968C /* yaml.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = yaml.xcodeproj; path = ../ext/yaml.xcodeproj; sourceTree = SOURCE_ROOT; };
+ 2AF57171147B36F300F9968C /* OpenColorIO_AE_Dialogs.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = OpenColorIO_AE_Dialogs.h; path = ../../OpenColorIO_AE_Dialogs.h; sourceTree = SOURCE_ROOT; usesTabs = 0; };
+ 2AF57B91147C6FE000F9968C /* OpenColorIO_AE_Menu.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = OpenColorIO_AE_Menu.h; path = ../../mac/OpenColorIO_AE_Menu.h; sourceTree = "<group>"; usesTabs = 0; };
+ 2AF57B92147C6FE000F9968C /* OpenColorIO_AE_Menu.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = OpenColorIO_AE_Menu.m; path = ../../mac/OpenColorIO_AE_Menu.m; sourceTree = "<group>"; usesTabs = 0; };
+ 2AF57D1E147C994100F9968C /* OpenColorIO_AE_Context.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = OpenColorIO_AE_Context.h; path = ../../OpenColorIO_AE_Context.h; sourceTree = SOURCE_ROOT; usesTabs = 0; };
+ 2AF57D1F147C994100F9968C /* OpenColorIO_AE_Context.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = OpenColorIO_AE_Context.cpp; path = ../../OpenColorIO_AE_Context.cpp; sourceTree = SOURCE_ROOT; usesTabs = 0; };
+ 2AF999C0147E1DCA00FEB83B /* lcms.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = lcms.xcodeproj; path = ../ext/lcms.xcodeproj; sourceTree = SOURCE_ROOT; };
+ C4E618CC095A3CE80012CA3F /* OpenColorIO.plugin */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = OpenColorIO.plugin; sourceTree = BUILT_PRODUCTS_DIR; };
+/* End PBXFileReference section */
+
+/* Begin PBXFrameworksBuildPhase section */
+ C4E618CA095A3CE80012CA3F /* Frameworks */ = {
+ isa = PBXFrameworksBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ 2A3BAA7110C0F40600AD32F2 /* Cocoa.framework in Frameworks */,
+ 2AF56EE8147AD11200F9968C /* libOpenColorIO.a in Frameworks */,
+ 2AF57004147AE17200F9968C /* libtinyxml.a in Frameworks */,
+ 2AF57005147AE17400F9968C /* libyaml.a in Frameworks */,
+ 2AF999CB147E1DD200FEB83B /* liblcms.a in Frameworks */,
+ 2A60CB091491A9FF009D6DBF /* AGL.framework in Frameworks */,
+ 2A60CB0B1491A9FF009D6DBF /* OpenGL.framework in Frameworks */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+/* End PBXFrameworksBuildPhase section */
+
+/* Begin PBXGroup section */
+ 2AF56EE3147AD10E00F9968C /* Products */ = {
+ isa = PBXGroup;
+ children = (
+ 2AF56EE7147AD10E00F9968C /* libOpenColorIO.a */,
+ );
+ name = Products;
+ sourceTree = "<group>";
+ };
+ 2AF56FF1147AE16A00F9968C /* Products */ = {
+ isa = PBXGroup;
+ children = (
+ 2AF56FFB147AE16A00F9968C /* libtinyxml.a */,
+ );
+ name = Products;
+ sourceTree = "<group>";
+ };
+ 2AF56FF4147AE16A00F9968C /* Products */ = {
+ isa = PBXGroup;
+ children = (
+ 2AF57001147AE16A00F9968C /* libyaml.a */,
+ );
+ name = Products;
+ sourceTree = "<group>";
+ };
+ 2AF999C1147E1DCA00FEB83B /* Products */ = {
+ isa = PBXGroup;
+ children = (
+ 2AF999C8147E1DCA00FEB83B /* liblcms.a */,
+ );
+ name = Products;
+ sourceTree = "<group>";
+ };
+ C4E6187C095A3C800012CA3F = {
+ isa = PBXGroup;
+ children = (
+ 2AF56B95147A431100F9968C /* OpenColorIO_AE.h */,
+ 2AF56B94147A431100F9968C /* OpenColorIO_AE.cpp */,
+ 2AF57D1E147C994100F9968C /* OpenColorIO_AE_Context.h */,
+ 2AF57D1F147C994100F9968C /* OpenColorIO_AE_Context.cpp */,
+ 2AF56B8F147A431100F9968C /* OpenColorIO_AE_ArbData.cpp */,
+ 2AF56B93147A431100F9968C /* OpenColorIO_AE_UI.cpp */,
+ 2A60CAD91491A506009D6DBF /* OpenColorIO_AE_GL.h */,
+ 2A60CADA1491A51C009D6DBF /* OpenColorIO_AE_GL_Cocoa.mm */,
+ 2AF57171147B36F300F9968C /* OpenColorIO_AE_Dialogs.h */,
+ 2AF56B90147A431100F9968C /* OpenColorIO_AE_Dialogs_Cocoa.mm */,
+ 2AF57B91147C6FE000F9968C /* OpenColorIO_AE_Menu.h */,
+ 2AF57B92147C6FE000F9968C /* OpenColorIO_AE_Menu.m */,
+ 2AF56B92147A431100F9968C /* OpenColorIO_AE_PiPL.r */,
+ 2AF56B9E147A458800F9968C /* AEGP_SuiteHandler.h */,
+ 2AF56B9D147A458800F9968C /* AEGP_SuiteHandler.cpp */,
+ 2AF56B9F147A458800F9968C /* MissingSuiteError.cpp */,
+ 2AF56D05147AB5C900F9968C /* DrawbotBot.h */,
+ 2AF56D04147AB5C900F9968C /* DrawbotBot.cpp */,
+ 2A4A0AF51554679400D5AEB7 /* ocioicc.h */,
+ 2A4A0AF41554679400D5AEB7 /* ocioicc.cpp */,
+ 2A180A6814801EB90000D11A /* OpenColorIO_AE_MonitorProfileChooser.xib */,
+ 2A180A6C14801FFA0000D11A /* OpenColorIO_AE_MonitorProfileChooser_Controller.h */,
+ 2A180A6B14801FFA0000D11A /* OpenColorIO_AE_MonitorProfileChooser_Controller.m */,
+ 2AF56EE2147AD10E00F9968C /* OpenColorIO.xcodeproj */,
+ 2AF56FF0147AE16A00F9968C /* tinyxml.xcodeproj */,
+ 2AF56FF3147AE16A00F9968C /* yaml.xcodeproj */,
+ 2AF999C0147E1DCA00FEB83B /* lcms.xcodeproj */,
+ C4E6188C095A3C800012CA3F /* Products */,
+ 2A3BAA7010C0F40600AD32F2 /* Cocoa.framework */,
+ 2A60CB081491A9FF009D6DBF /* AGL.framework */,
+ 2A60CB0A1491A9FF009D6DBF /* OpenGL.framework */,
+ );
+ comments = "SDK Backwards is some pretty rudimentary audio processing, but the flags and params are handled in an appropriate manner.";
+ sourceTree = "<group>";
+ };
+ C4E6188C095A3C800012CA3F /* Products */ = {
+ isa = PBXGroup;
+ children = (
+ C4E618CC095A3CE80012CA3F /* OpenColorIO.plugin */,
+ );
+ name = Products;
+ sourceTree = "<group>";
+ };
+/* End PBXGroup section */
+
+/* Begin PBXNativeTarget section */
+ C4E618CB095A3CE80012CA3F /* OpenColorIO */ = {
+ isa = PBXNativeTarget;
+ buildConfigurationList = C4E618CE095A3CE90012CA3F /* Build configuration list for PBXNativeTarget "OpenColorIO" */;
+ buildPhases = (
+ C4E618C8095A3CE80012CA3F /* Resources */,
+ C4E618C9095A3CE80012CA3F /* Sources */,
+ C4E618CA095A3CE80012CA3F /* Frameworks */,
+ C4E618EA095A3E040012CA3F /* Rez */,
+ );
+ buildRules = (
+ );
+ dependencies = (
+ 2AF57013147AE18600F9968C /* PBXTargetDependency */,
+ 2AF57015147AE18600F9968C /* PBXTargetDependency */,
+ 2AF57017147AE18600F9968C /* PBXTargetDependency */,
+ 2AF999CD147E1DDB00FEB83B /* PBXTargetDependency */,
+ );
+ name = OpenColorIO;
+ productName = SDK_Backwards.plugin;
+ productReference = C4E618CC095A3CE80012CA3F /* OpenColorIO.plugin */;
+ productType = "com.apple.product-type.bundle";
+ };
+/* End PBXNativeTarget section */
+
+/* Begin PBXProject section */
+ C4E6187E095A3C800012CA3F /* Project object */ = {
+ isa = PBXProject;
+ buildConfigurationList = C4E6187F095A3C800012CA3F /* Build configuration list for PBXProject "OpenColorIO_AE" */;
+ compatibilityVersion = "Xcode 3.0";
+ developmentRegion = English;
+ hasScannedForEncodings = 0;
+ knownRegions = (
+ English,
+ Japanese,
+ French,
+ German,
+ );
+ mainGroup = C4E6187C095A3C800012CA3F;
+ productRefGroup = C4E6188C095A3C800012CA3F /* Products */;
+ projectDirPath = "";
+ projectReferences = (
+ {
+ ProductGroup = 2AF999C1147E1DCA00FEB83B /* Products */;
+ ProjectRef = 2AF999C0147E1DCA00FEB83B /* lcms.xcodeproj */;
+ },
+ {
+ ProductGroup = 2AF56EE3147AD10E00F9968C /* Products */;
+ ProjectRef = 2AF56EE2147AD10E00F9968C /* OpenColorIO.xcodeproj */;
+ },
+ {
+ ProductGroup = 2AF56FF1147AE16A00F9968C /* Products */;
+ ProjectRef = 2AF56FF0147AE16A00F9968C /* tinyxml.xcodeproj */;
+ },
+ {
+ ProductGroup = 2AF56FF4147AE16A00F9968C /* Products */;
+ ProjectRef = 2AF56FF3147AE16A00F9968C /* yaml.xcodeproj */;
+ },
+ );
+ projectRoot = "";
+ targets = (
+ C4E618CB095A3CE80012CA3F /* OpenColorIO */,
+ );
+ };
+/* End PBXProject section */
+
+/* Begin PBXReferenceProxy section */
+ 2AF56EE7147AD10E00F9968C /* libOpenColorIO.a */ = {
+ isa = PBXReferenceProxy;
+ fileType = archive.ar;
+ path = libOpenColorIO.a;
+ remoteRef = 2AF56EE6147AD10E00F9968C /* PBXContainerItemProxy */;
+ sourceTree = BUILT_PRODUCTS_DIR;
+ };
+ 2AF56FFB147AE16A00F9968C /* libtinyxml.a */ = {
+ isa = PBXReferenceProxy;
+ fileType = archive.ar;
+ path = libtinyxml.a;
+ remoteRef = 2AF56FFA147AE16A00F9968C /* PBXContainerItemProxy */;
+ sourceTree = BUILT_PRODUCTS_DIR;
+ };
+ 2AF57001147AE16A00F9968C /* libyaml.a */ = {
+ isa = PBXReferenceProxy;
+ fileType = archive.ar;
+ path = libyaml.a;
+ remoteRef = 2AF57000147AE16A00F9968C /* PBXContainerItemProxy */;
+ sourceTree = BUILT_PRODUCTS_DIR;
+ };
+ 2AF999C8147E1DCA00FEB83B /* liblcms.a */ = {
+ isa = PBXReferenceProxy;
+ fileType = archive.ar;
+ path = liblcms.a;
+ remoteRef = 2AF999C7147E1DCA00FEB83B /* PBXContainerItemProxy */;
+ sourceTree = BUILT_PRODUCTS_DIR;
+ };
+/* End PBXReferenceProxy section */
+
+/* Begin PBXResourcesBuildPhase section */
+ C4E618C8095A3CE80012CA3F /* Resources */ = {
+ isa = PBXResourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ 2A180A6914801EB90000D11A /* OpenColorIO_AE_MonitorProfileChooser.xib in Resources */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+/* End PBXResourcesBuildPhase section */
+
+/* Begin PBXRezBuildPhase section */
+ C4E618EA095A3E040012CA3F /* Rez */ = {
+ isa = PBXRezBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ 2AF56B99147A431100F9968C /* OpenColorIO_AE_PiPL.r in Rez */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+/* End PBXRezBuildPhase section */
+
+/* Begin PBXSourcesBuildPhase section */
+ C4E618C9095A3CE80012CA3F /* Sources */ = {
+ isa = PBXSourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ 2AF56B96147A431100F9968C /* OpenColorIO_AE_ArbData.cpp in Sources */,
+ 2AF56B9A147A431100F9968C /* OpenColorIO_AE_UI.cpp in Sources */,
+ 2AF56B9B147A431100F9968C /* OpenColorIO_AE.cpp in Sources */,
+ 2AF56BA0147A458800F9968C /* AEGP_SuiteHandler.cpp in Sources */,
+ 2AF56BA1147A458800F9968C /* MissingSuiteError.cpp in Sources */,
+ 2AF56C24147A54A300F9968C /* OpenColorIO_AE_Dialogs_Cocoa.mm in Sources */,
+ 2AF56D06147AB5C900F9968C /* DrawbotBot.cpp in Sources */,
+ 2AF57B93147C6FE000F9968C /* OpenColorIO_AE_Menu.m in Sources */,
+ 2AF57D20147C994100F9968C /* OpenColorIO_AE_Context.cpp in Sources */,
+ 2A180A6D14801FFA0000D11A /* OpenColorIO_AE_MonitorProfileChooser_Controller.m in Sources */,
+ 2A60CADB1491A51C009D6DBF /* OpenColorIO_AE_GL_Cocoa.mm in Sources */,
+ 2A4A0AF61554679400D5AEB7 /* ocioicc.cpp in Sources */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+/* End PBXSourcesBuildPhase section */
+
+/* Begin PBXTargetDependency section */
+ 2AF57013147AE18600F9968C /* PBXTargetDependency */ = {
+ isa = PBXTargetDependency;
+ name = tinyxml;
+ targetProxy = 2AF57012147AE18600F9968C /* PBXContainerItemProxy */;
+ };
+ 2AF57015147AE18600F9968C /* PBXTargetDependency */ = {
+ isa = PBXTargetDependency;
+ name = yaml;
+ targetProxy = 2AF57014147AE18600F9968C /* PBXContainerItemProxy */;
+ };
+ 2AF57017147AE18600F9968C /* PBXTargetDependency */ = {
+ isa = PBXTargetDependency;
+ name = OpenColorIO;
+ targetProxy = 2AF57016147AE18600F9968C /* PBXContainerItemProxy */;
+ };
+ 2AF999CD147E1DDB00FEB83B /* PBXTargetDependency */ = {
+ isa = PBXTargetDependency;
+ name = lcms;
+ targetProxy = 2AF999CC147E1DDB00FEB83B /* PBXContainerItemProxy */;
+ };
+/* End PBXTargetDependency section */
+
+/* Begin XCBuildConfiguration section */
+ 2A1BAC2310C3C82A00244D12 /* Release */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ AE_SDK = "\"../../../../ext/Adobe After Effects CS5 SDK\"";
+ "AE_SDK[arch=i386]" = "\"../../../../ext/Adobe After Effects CS3 SDK\"";
+ "AE_SDK[arch=ppc]" = "\"../../../../ext/Adobe After Effects CS3 SDK\"";
+ ARCHS = x86_64;
+ GCC_GENERATE_DEBUGGING_SYMBOLS = NO;
+ GCC_MODEL_TUNING = "";
+ GCC_OPTIMIZATION_LEVEL = 3;
+ GCC_PREPROCESSOR_DEFINITIONS = NDEBUG;
+ GCC_WARN_ABOUT_DEPRECATED_FUNCTIONS = NO;
+ HEADER_SEARCH_PATHS = (
+ ../,
+ "$(AE_SDK)/Examples/Headers",
+ "$(AE_SDK)/Examples/Util",
+ "$(AE_SDK)/Examples/Headers/SP",
+ "$(AE_SDK)/Examples/Resources",
+ ../../../../export,
+ ../../../../src/core,
+ ../../../../ext/tinyxml,
+ "../../../../ext/yaml-cpp/include",
+ "../../../../ext/lcms2-2.1/include",
+ );
+ REZ_PREPROCESSOR_DEFINITIONS = __MACH__;
+ REZ_SEARCH_PATHS = "$(SDK_PATH)/Developer/Headers/FlatCarbon";
+ SDKROOT = "$(DEVELOPER_SDK_DIR)/MacOSX10.5.sdk";
+ };
+ name = Release;
+ };
+ 2A1BAC2410C3C82A00244D12 /* Release */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ GCC_ENABLE_FIX_AND_CONTINUE = YES;
+ GCC_MODEL_TUNING = G5;
+ GCC_PRECOMPILE_PREFIX_HEADER = YES;
+ GCC_PREFIX_HEADER = "$(SDKROOT)/System/Library/Frameworks/Carbon.framework/Headers/Carbon.h";
+ GENERATE_PKGINFO_FILE = YES;
+ INFOPLIST_FILE = "../../mac/OpenColorIO_AE.plugin-Info.plist";
+ INSTALL_PATH = "$(HOME)/Library/Bundles";
+ LINK_WITH_STANDARD_LIBRARIES = YES;
+ PREBINDING = NO;
+ PRODUCT_NAME = OpenColorIO;
+ WRAPPER_EXTENSION = plugin;
+ ZERO_LINK = NO;
+ };
+ name = Release;
+ };
+ C4E61880095A3C800012CA3F /* Debug */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ AE_SDK = "\"../../../../ext/Adobe After Effects CS5 SDK\"";
+ "AE_SDK[arch=i386]" = "\"../../../../ext/Adobe After Effects CS3 SDK\"";
+ "AE_SDK[arch=ppc]" = "\"../../../../ext/Adobe After Effects CS3 SDK\"";
+ ARCHS = x86_64;
+ COPY_PHASE_STRIP = NO;
+ GCC_MODEL_TUNING = "";
+ GCC_OPTIMIZATION_LEVEL = 0;
+ GCC_WARN_ABOUT_DEPRECATED_FUNCTIONS = NO;
+ HEADER_SEARCH_PATHS = (
+ ../,
+ "$(AE_SDK)/Examples/Headers",
+ "$(AE_SDK)/Examples/Util",
+ "$(AE_SDK)/Examples/Headers/SP",
+ "$(AE_SDK)/Examples/Resources",
+ ../../../../export,
+ ../../../../src/core,
+ ../../../../ext/tinyxml,
+ "../../../../ext/yaml-cpp/include",
+ "../../../../ext/lcms2-2.1/include",
+ );
+ REZ_PREPROCESSOR_DEFINITIONS = __MACH__;
+ REZ_SEARCH_PATHS = "$(SDK_PATH)/Developer/Headers/FlatCarbon";
+ SDKROOT = "$(DEVELOPER_SDK_DIR)/MacOSX10.5.sdk";
+ STRIP_INSTALLED_PRODUCT = NO;
+ };
+ name = Debug;
+ };
+ C4E618CF095A3CE90012CA3F /* Debug */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ GCC_ENABLE_FIX_AND_CONTINUE = YES;
+ GCC_MODEL_TUNING = G5;
+ GCC_PRECOMPILE_PREFIX_HEADER = YES;
+ GCC_PREFIX_HEADER = "$(SDKROOT)/System/Library/Frameworks/Carbon.framework/Headers/Carbon.h";
+ GENERATE_PKGINFO_FILE = YES;
+ INFOPLIST_FILE = "../../mac/OpenColorIO_AE.plugin-Info.plist";
+ INSTALL_PATH = "$(HOME)/Library/Bundles";
+ LINK_WITH_STANDARD_LIBRARIES = YES;
+ PREBINDING = NO;
+ PRODUCT_NAME = OpenColorIO;
+ WRAPPER_EXTENSION = plugin;
+ ZERO_LINK = NO;
+ };
+ name = Debug;
+ };
+/* End XCBuildConfiguration section */
+
+/* Begin XCConfigurationList section */
+ C4E6187F095A3C800012CA3F /* Build configuration list for PBXProject "OpenColorIO_AE" */ = {
+ isa = XCConfigurationList;
+ buildConfigurations = (
+ C4E61880095A3C800012CA3F /* Debug */,
+ 2A1BAC2310C3C82A00244D12 /* Release */,
+ );
+ defaultConfigurationIsVisible = 1;
+ defaultConfigurationName = Debug;
+ };
+ C4E618CE095A3CE90012CA3F /* Build configuration list for PBXNativeTarget "OpenColorIO" */ = {
+ isa = XCConfigurationList;
+ buildConfigurations = (
+ C4E618CF095A3CE90012CA3F /* Debug */,
+ 2A1BAC2410C3C82A00244D12 /* Release */,
+ );
+ defaultConfigurationIsVisible = 0;
+ defaultConfigurationName = Debug;
+ };
+/* End XCConfigurationList section */
+ };
+ rootObject = C4E6187E095A3C800012CA3F /* Project object */;
+}
diff --git a/src/aftereffects/xcode/ext/lcms.xcodeproj/project.pbxproj b/src/aftereffects/xcode/ext/lcms.xcodeproj/project.pbxproj
new file mode 100644
index 0000000..42e7bda
--- /dev/null
+++ b/src/aftereffects/xcode/ext/lcms.xcodeproj/project.pbxproj
@@ -0,0 +1,343 @@
+// !$*UTF8*$!
+{
+ archiveVersion = 1;
+ classes = {
+ };
+ objectVersion = 45;
+ objects = {
+
+/* Begin PBXBuildFile section */
+ 2ACF9F2C1478251500991ED5 /* lcms2.h in Headers */ = {isa = PBXBuildFile; fileRef = 2ACF9E6D1478251500991ED5 /* lcms2.h */; };
+ 2ACF9F2D1478251500991ED5 /* lcms2_plugin.h in Headers */ = {isa = PBXBuildFile; fileRef = 2ACF9E6E1478251500991ED5 /* lcms2_plugin.h */; };
+ 2ACF9F311478251500991ED5 /* cmscam02.c in Sources */ = {isa = PBXBuildFile; fileRef = 2ACF9ECE1478251500991ED5 /* cmscam02.c */; };
+ 2ACF9F321478251500991ED5 /* cmscgats.c in Sources */ = {isa = PBXBuildFile; fileRef = 2ACF9ECF1478251500991ED5 /* cmscgats.c */; };
+ 2ACF9F331478251500991ED5 /* cmscnvrt.c in Sources */ = {isa = PBXBuildFile; fileRef = 2ACF9ED01478251500991ED5 /* cmscnvrt.c */; };
+ 2ACF9F341478251500991ED5 /* cmserr.c in Sources */ = {isa = PBXBuildFile; fileRef = 2ACF9ED11478251500991ED5 /* cmserr.c */; };
+ 2ACF9F351478251500991ED5 /* cmsgamma.c in Sources */ = {isa = PBXBuildFile; fileRef = 2ACF9ED21478251500991ED5 /* cmsgamma.c */; };
+ 2ACF9F361478251500991ED5 /* cmsgmt.c in Sources */ = {isa = PBXBuildFile; fileRef = 2ACF9ED31478251500991ED5 /* cmsgmt.c */; };
+ 2ACF9F371478251500991ED5 /* cmsintrp.c in Sources */ = {isa = PBXBuildFile; fileRef = 2ACF9ED41478251500991ED5 /* cmsintrp.c */; };
+ 2ACF9F381478251500991ED5 /* cmsio0.c in Sources */ = {isa = PBXBuildFile; fileRef = 2ACF9ED51478251500991ED5 /* cmsio0.c */; };
+ 2ACF9F391478251500991ED5 /* cmsio1.c in Sources */ = {isa = PBXBuildFile; fileRef = 2ACF9ED61478251500991ED5 /* cmsio1.c */; };
+ 2ACF9F3A1478251500991ED5 /* cmslut.c in Sources */ = {isa = PBXBuildFile; fileRef = 2ACF9ED71478251500991ED5 /* cmslut.c */; };
+ 2ACF9F3B1478251500991ED5 /* cmsmd5.c in Sources */ = {isa = PBXBuildFile; fileRef = 2ACF9ED81478251500991ED5 /* cmsmd5.c */; };
+ 2ACF9F3C1478251500991ED5 /* cmsmtrx.c in Sources */ = {isa = PBXBuildFile; fileRef = 2ACF9ED91478251500991ED5 /* cmsmtrx.c */; };
+ 2ACF9F3D1478251500991ED5 /* cmsnamed.c in Sources */ = {isa = PBXBuildFile; fileRef = 2ACF9EDA1478251500991ED5 /* cmsnamed.c */; };
+ 2ACF9F3E1478251500991ED5 /* cmsopt.c in Sources */ = {isa = PBXBuildFile; fileRef = 2ACF9EDB1478251500991ED5 /* cmsopt.c */; };
+ 2ACF9F3F1478251500991ED5 /* cmspack.c in Sources */ = {isa = PBXBuildFile; fileRef = 2ACF9EDC1478251500991ED5 /* cmspack.c */; };
+ 2ACF9F401478251500991ED5 /* cmspcs.c in Sources */ = {isa = PBXBuildFile; fileRef = 2ACF9EDD1478251500991ED5 /* cmspcs.c */; };
+ 2ACF9F411478251500991ED5 /* cmsplugin.c in Sources */ = {isa = PBXBuildFile; fileRef = 2ACF9EDE1478251500991ED5 /* cmsplugin.c */; };
+ 2ACF9F421478251500991ED5 /* cmsps2.c in Sources */ = {isa = PBXBuildFile; fileRef = 2ACF9EDF1478251500991ED5 /* cmsps2.c */; };
+ 2ACF9F431478251500991ED5 /* cmssamp.c in Sources */ = {isa = PBXBuildFile; fileRef = 2ACF9EE01478251500991ED5 /* cmssamp.c */; };
+ 2ACF9F441478251500991ED5 /* cmssm.c in Sources */ = {isa = PBXBuildFile; fileRef = 2ACF9EE11478251500991ED5 /* cmssm.c */; };
+ 2ACF9F451478251500991ED5 /* cmstypes.c in Sources */ = {isa = PBXBuildFile; fileRef = 2ACF9EE21478251500991ED5 /* cmstypes.c */; };
+ 2ACF9F461478251500991ED5 /* cmsvirt.c in Sources */ = {isa = PBXBuildFile; fileRef = 2ACF9EE31478251500991ED5 /* cmsvirt.c */; };
+ 2ACF9F471478251500991ED5 /* cmswtpnt.c in Sources */ = {isa = PBXBuildFile; fileRef = 2ACF9EE41478251500991ED5 /* cmswtpnt.c */; };
+ 2ACF9F481478251500991ED5 /* cmsxform.c in Sources */ = {isa = PBXBuildFile; fileRef = 2ACF9EE51478251500991ED5 /* cmsxform.c */; };
+ 2ACF9F491478251500991ED5 /* lcms2_internal.h in Headers */ = {isa = PBXBuildFile; fileRef = 2ACF9EE71478251500991ED5 /* lcms2_internal.h */; };
+/* End PBXBuildFile section */
+
+/* Begin PBXFileReference section */
+ 2ACF9E56147824F500991ED5 /* liblcms.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = liblcms.a; sourceTree = BUILT_PRODUCTS_DIR; };
+ 2ACF9E6D1478251500991ED5 /* lcms2.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = lcms2.h; sourceTree = "<group>"; };
+ 2ACF9E6E1478251500991ED5 /* lcms2_plugin.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = lcms2_plugin.h; sourceTree = "<group>"; };
+ 2ACF9ECE1478251500991ED5 /* cmscam02.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = cmscam02.c; sourceTree = "<group>"; };
+ 2ACF9ECF1478251500991ED5 /* cmscgats.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = cmscgats.c; sourceTree = "<group>"; };
+ 2ACF9ED01478251500991ED5 /* cmscnvrt.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = cmscnvrt.c; sourceTree = "<group>"; };
+ 2ACF9ED11478251500991ED5 /* cmserr.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = cmserr.c; sourceTree = "<group>"; };
+ 2ACF9ED21478251500991ED5 /* cmsgamma.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = cmsgamma.c; sourceTree = "<group>"; };
+ 2ACF9ED31478251500991ED5 /* cmsgmt.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = cmsgmt.c; sourceTree = "<group>"; };
+ 2ACF9ED41478251500991ED5 /* cmsintrp.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = cmsintrp.c; sourceTree = "<group>"; };
+ 2ACF9ED51478251500991ED5 /* cmsio0.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = cmsio0.c; sourceTree = "<group>"; };
+ 2ACF9ED61478251500991ED5 /* cmsio1.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = cmsio1.c; sourceTree = "<group>"; };
+ 2ACF9ED71478251500991ED5 /* cmslut.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = cmslut.c; sourceTree = "<group>"; };
+ 2ACF9ED81478251500991ED5 /* cmsmd5.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = cmsmd5.c; sourceTree = "<group>"; };
+ 2ACF9ED91478251500991ED5 /* cmsmtrx.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = cmsmtrx.c; sourceTree = "<group>"; };
+ 2ACF9EDA1478251500991ED5 /* cmsnamed.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = cmsnamed.c; sourceTree = "<group>"; };
+ 2ACF9EDB1478251500991ED5 /* cmsopt.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = cmsopt.c; sourceTree = "<group>"; };
+ 2ACF9EDC1478251500991ED5 /* cmspack.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = cmspack.c; sourceTree = "<group>"; };
+ 2ACF9EDD1478251500991ED5 /* cmspcs.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = cmspcs.c; sourceTree = "<group>"; };
+ 2ACF9EDE1478251500991ED5 /* cmsplugin.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = cmsplugin.c; sourceTree = "<group>"; };
+ 2ACF9EDF1478251500991ED5 /* cmsps2.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = cmsps2.c; sourceTree = "<group>"; };
+ 2ACF9EE01478251500991ED5 /* cmssamp.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = cmssamp.c; sourceTree = "<group>"; };
+ 2ACF9EE11478251500991ED5 /* cmssm.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = cmssm.c; sourceTree = "<group>"; };
+ 2ACF9EE21478251500991ED5 /* cmstypes.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = cmstypes.c; sourceTree = "<group>"; };
+ 2ACF9EE31478251500991ED5 /* cmsvirt.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = cmsvirt.c; sourceTree = "<group>"; };
+ 2ACF9EE41478251500991ED5 /* cmswtpnt.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = cmswtpnt.c; sourceTree = "<group>"; };
+ 2ACF9EE51478251500991ED5 /* cmsxform.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = cmsxform.c; sourceTree = "<group>"; };
+ 2ACF9EE71478251500991ED5 /* lcms2_internal.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = lcms2_internal.h; sourceTree = "<group>"; };
+/* End PBXFileReference section */
+
+/* Begin PBXFrameworksBuildPhase section */
+ 2ACF9E54147824F500991ED5 /* Frameworks */ = {
+ isa = PBXFrameworksBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+/* End PBXFrameworksBuildPhase section */
+
+/* Begin PBXGroup section */
+ 034768DDFF38A45A11DB9C8B /* Products */ = {
+ isa = PBXGroup;
+ children = (
+ 2ACF9E56147824F500991ED5 /* liblcms.a */,
+ );
+ name = Products;
+ sourceTree = "<group>";
+ };
+ 0867D691FE84028FC02AAC07 /* lcms */ = {
+ isa = PBXGroup;
+ children = (
+ 2ACF9E5A1478251500991ED5 /* lcms2-2.1 */,
+ 034768DDFF38A45A11DB9C8B /* Products */,
+ );
+ name = lcms;
+ sourceTree = "<group>";
+ };
+ 2ACF9E5A1478251500991ED5 /* lcms2-2.1 */ = {
+ isa = PBXGroup;
+ children = (
+ 2ACF9E6C1478251500991ED5 /* include */,
+ 2ACF9ECD1478251500991ED5 /* src */,
+ );
+ name = "lcms2-2.1";
+ path = "../../../../ext/lcms2-2.1";
+ sourceTree = SOURCE_ROOT;
+ };
+ 2ACF9E6C1478251500991ED5 /* include */ = {
+ isa = PBXGroup;
+ children = (
+ 2ACF9E6D1478251500991ED5 /* lcms2.h */,
+ 2ACF9E6E1478251500991ED5 /* lcms2_plugin.h */,
+ );
+ path = include;
+ sourceTree = "<group>";
+ };
+ 2ACF9ECD1478251500991ED5 /* src */ = {
+ isa = PBXGroup;
+ children = (
+ 2ACF9ECE1478251500991ED5 /* cmscam02.c */,
+ 2ACF9ECF1478251500991ED5 /* cmscgats.c */,
+ 2ACF9ED01478251500991ED5 /* cmscnvrt.c */,
+ 2ACF9ED11478251500991ED5 /* cmserr.c */,
+ 2ACF9ED21478251500991ED5 /* cmsgamma.c */,
+ 2ACF9ED31478251500991ED5 /* cmsgmt.c */,
+ 2ACF9ED41478251500991ED5 /* cmsintrp.c */,
+ 2ACF9ED51478251500991ED5 /* cmsio0.c */,
+ 2ACF9ED61478251500991ED5 /* cmsio1.c */,
+ 2ACF9ED71478251500991ED5 /* cmslut.c */,
+ 2ACF9ED81478251500991ED5 /* cmsmd5.c */,
+ 2ACF9ED91478251500991ED5 /* cmsmtrx.c */,
+ 2ACF9EDA1478251500991ED5 /* cmsnamed.c */,
+ 2ACF9EDB1478251500991ED5 /* cmsopt.c */,
+ 2ACF9EDC1478251500991ED5 /* cmspack.c */,
+ 2ACF9EDD1478251500991ED5 /* cmspcs.c */,
+ 2ACF9EDE1478251500991ED5 /* cmsplugin.c */,
+ 2ACF9EDF1478251500991ED5 /* cmsps2.c */,
+ 2ACF9EE01478251500991ED5 /* cmssamp.c */,
+ 2ACF9EE11478251500991ED5 /* cmssm.c */,
+ 2ACF9EE21478251500991ED5 /* cmstypes.c */,
+ 2ACF9EE31478251500991ED5 /* cmsvirt.c */,
+ 2ACF9EE41478251500991ED5 /* cmswtpnt.c */,
+ 2ACF9EE51478251500991ED5 /* cmsxform.c */,
+ 2ACF9EE71478251500991ED5 /* lcms2_internal.h */,
+ );
+ path = src;
+ sourceTree = "<group>";
+ };
+/* End PBXGroup section */
+
+/* Begin PBXHeadersBuildPhase section */
+ 2ACF9E52147824F500991ED5 /* Headers */ = {
+ isa = PBXHeadersBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ 2ACF9F2C1478251500991ED5 /* lcms2.h in Headers */,
+ 2ACF9F2D1478251500991ED5 /* lcms2_plugin.h in Headers */,
+ 2ACF9F491478251500991ED5 /* lcms2_internal.h in Headers */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+/* End PBXHeadersBuildPhase section */
+
+/* Begin PBXNativeTarget section */
+ 2ACF9E55147824F500991ED5 /* lcms */ = {
+ isa = PBXNativeTarget;
+ buildConfigurationList = 2ACF9E59147824FB00991ED5 /* Build configuration list for PBXNativeTarget "lcms" */;
+ buildPhases = (
+ 2AF569A814799AF900F9968C /* Unpack lcms2 */,
+ 2ACF9E52147824F500991ED5 /* Headers */,
+ 2ACF9E53147824F500991ED5 /* Sources */,
+ 2ACF9E54147824F500991ED5 /* Frameworks */,
+ );
+ buildRules = (
+ );
+ dependencies = (
+ );
+ name = lcms;
+ productName = lcms;
+ productReference = 2ACF9E56147824F500991ED5 /* liblcms.a */;
+ productType = "com.apple.product-type.library.static";
+ };
+/* End PBXNativeTarget section */
+
+/* Begin PBXProject section */
+ 0867D690FE84028FC02AAC07 /* Project object */ = {
+ isa = PBXProject;
+ buildConfigurationList = 1DEB916408733D950010E9CD /* Build configuration list for PBXProject "lcms" */;
+ compatibilityVersion = "Xcode 3.1";
+ developmentRegion = English;
+ hasScannedForEncodings = 1;
+ knownRegions = (
+ English,
+ Japanese,
+ French,
+ German,
+ );
+ mainGroup = 0867D691FE84028FC02AAC07 /* lcms */;
+ productRefGroup = 034768DDFF38A45A11DB9C8B /* Products */;
+ projectDirPath = "";
+ projectRoot = "";
+ targets = (
+ 2ACF9E55147824F500991ED5 /* lcms */,
+ );
+ };
+/* End PBXProject section */
+
+/* Begin PBXShellScriptBuildPhase section */
+ 2AF569A814799AF900F9968C /* Unpack lcms2 */ = {
+ isa = PBXShellScriptBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ );
+ inputPaths = (
+ "$(SRCROOT)/../../../../ext/lcms2-2.1.tar.gz",
+ );
+ name = "Unpack lcms2";
+ outputPaths = (
+ "$(SRCROOT)/../../../../ext/lcms2-2.1",
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ shellPath = /bin/sh;
+ shellScript = "cd $SRCROOT/../../../../ext\n\nif [ ! -d lcms2-2.1 ]\nthen\n\ttar -xzf lcms2-2.1.tar.gz\nfi\n";
+ };
+/* End PBXShellScriptBuildPhase section */
+
+/* Begin PBXSourcesBuildPhase section */
+ 2ACF9E53147824F500991ED5 /* Sources */ = {
+ isa = PBXSourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ 2ACF9F311478251500991ED5 /* cmscam02.c in Sources */,
+ 2ACF9F321478251500991ED5 /* cmscgats.c in Sources */,
+ 2ACF9F331478251500991ED5 /* cmscnvrt.c in Sources */,
+ 2ACF9F341478251500991ED5 /* cmserr.c in Sources */,
+ 2ACF9F351478251500991ED5 /* cmsgamma.c in Sources */,
+ 2ACF9F361478251500991ED5 /* cmsgmt.c in Sources */,
+ 2ACF9F371478251500991ED5 /* cmsintrp.c in Sources */,
+ 2ACF9F381478251500991ED5 /* cmsio0.c in Sources */,
+ 2ACF9F391478251500991ED5 /* cmsio1.c in Sources */,
+ 2ACF9F3A1478251500991ED5 /* cmslut.c in Sources */,
+ 2ACF9F3B1478251500991ED5 /* cmsmd5.c in Sources */,
+ 2ACF9F3C1478251500991ED5 /* cmsmtrx.c in Sources */,
+ 2ACF9F3D1478251500991ED5 /* cmsnamed.c in Sources */,
+ 2ACF9F3E1478251500991ED5 /* cmsopt.c in Sources */,
+ 2ACF9F3F1478251500991ED5 /* cmspack.c in Sources */,
+ 2ACF9F401478251500991ED5 /* cmspcs.c in Sources */,
+ 2ACF9F411478251500991ED5 /* cmsplugin.c in Sources */,
+ 2ACF9F421478251500991ED5 /* cmsps2.c in Sources */,
+ 2ACF9F431478251500991ED5 /* cmssamp.c in Sources */,
+ 2ACF9F441478251500991ED5 /* cmssm.c in Sources */,
+ 2ACF9F451478251500991ED5 /* cmstypes.c in Sources */,
+ 2ACF9F461478251500991ED5 /* cmsvirt.c in Sources */,
+ 2ACF9F471478251500991ED5 /* cmswtpnt.c in Sources */,
+ 2ACF9F481478251500991ED5 /* cmsxform.c in Sources */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+/* End PBXSourcesBuildPhase section */
+
+/* Begin XCBuildConfiguration section */
+ 1DEB916508733D950010E9CD /* Debug */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ ARCHS = "$(ARCHS_STANDARD_32_64_BIT)";
+ GCC_C_LANGUAGE_STANDARD = gnu99;
+ GCC_OPTIMIZATION_LEVEL = 0;
+ GCC_WARN_ABOUT_RETURN_TYPE = YES;
+ GCC_WARN_UNUSED_VARIABLE = YES;
+ ONLY_ACTIVE_ARCH = YES;
+ PREBINDING = NO;
+ SDKROOT = macosx10.5;
+ };
+ name = Debug;
+ };
+ 1DEB916608733D950010E9CD /* Release */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ ARCHS = "$(ARCHS_STANDARD_32_64_BIT)";
+ GCC_C_LANGUAGE_STANDARD = gnu99;
+ GCC_PREPROCESSOR_DEFINITIONS = NDEBUG;
+ GCC_WARN_ABOUT_RETURN_TYPE = YES;
+ GCC_WARN_UNUSED_VARIABLE = YES;
+ PREBINDING = NO;
+ SDKROOT = macosx10.5;
+ };
+ name = Release;
+ };
+ 2ACF9E57147824F600991ED5 /* Debug */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ ALWAYS_SEARCH_USER_PATHS = NO;
+ COPY_PHASE_STRIP = NO;
+ GCC_DYNAMIC_NO_PIC = NO;
+ GCC_ENABLE_FIX_AND_CONTINUE = YES;
+ GCC_MODEL_TUNING = G5;
+ GCC_OPTIMIZATION_LEVEL = 0;
+ INSTALL_PATH = /usr/local/lib;
+ PREBINDING = NO;
+ PRODUCT_NAME = lcms;
+ };
+ name = Debug;
+ };
+ 2ACF9E58147824F600991ED5 /* Release */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ ALWAYS_SEARCH_USER_PATHS = NO;
+ COPY_PHASE_STRIP = YES;
+ DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
+ GCC_ENABLE_FIX_AND_CONTINUE = NO;
+ GCC_MODEL_TUNING = G5;
+ INSTALL_PATH = /usr/local/lib;
+ PREBINDING = NO;
+ PRODUCT_NAME = lcms;
+ ZERO_LINK = NO;
+ };
+ name = Release;
+ };
+/* End XCBuildConfiguration section */
+
+/* Begin XCConfigurationList section */
+ 1DEB916408733D950010E9CD /* Build configuration list for PBXProject "lcms" */ = {
+ isa = XCConfigurationList;
+ buildConfigurations = (
+ 1DEB916508733D950010E9CD /* Debug */,
+ 1DEB916608733D950010E9CD /* Release */,
+ );
+ defaultConfigurationIsVisible = 0;
+ defaultConfigurationName = Release;
+ };
+ 2ACF9E59147824FB00991ED5 /* Build configuration list for PBXNativeTarget "lcms" */ = {
+ isa = XCConfigurationList;
+ buildConfigurations = (
+ 2ACF9E57147824F600991ED5 /* Debug */,
+ 2ACF9E58147824F600991ED5 /* Release */,
+ );
+ defaultConfigurationIsVisible = 0;
+ defaultConfigurationName = Release;
+ };
+/* End XCConfigurationList section */
+ };
+ rootObject = 0867D690FE84028FC02AAC07 /* Project object */;
+}
diff --git a/src/aftereffects/xcode/ext/tinyxml.xcodeproj/project.pbxproj b/src/aftereffects/xcode/ext/tinyxml.xcodeproj/project.pbxproj
new file mode 100644
index 0000000..2f07451
--- /dev/null
+++ b/src/aftereffects/xcode/ext/tinyxml.xcodeproj/project.pbxproj
@@ -0,0 +1,248 @@
+// !$*UTF8*$!
+{
+ archiveVersion = 1;
+ classes = {
+ };
+ objectVersion = 45;
+ objects = {
+
+/* Begin PBXBuildFile section */
+ 2ACF55501477685000991ED5 /* tinystr.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2ACF554A1477685000991ED5 /* tinystr.cpp */; };
+ 2ACF55511477685000991ED5 /* tinystr.h in Headers */ = {isa = PBXBuildFile; fileRef = 2ACF554B1477685000991ED5 /* tinystr.h */; };
+ 2ACF55521477685000991ED5 /* tinyxml.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2ACF554C1477685000991ED5 /* tinyxml.cpp */; };
+ 2ACF55531477685000991ED5 /* tinyxml.h in Headers */ = {isa = PBXBuildFile; fileRef = 2ACF554D1477685000991ED5 /* tinyxml.h */; };
+ 2ACF55541477685000991ED5 /* tinyxmlerror.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2ACF554E1477685000991ED5 /* tinyxmlerror.cpp */; };
+ 2ACF55551477685000991ED5 /* tinyxmlparser.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2ACF554F1477685000991ED5 /* tinyxmlparser.cpp */; };
+/* End PBXBuildFile section */
+
+/* Begin PBXFileReference section */
+ 2ACF55441477682B00991ED5 /* libtinyxml.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libtinyxml.a; sourceTree = BUILT_PRODUCTS_DIR; };
+ 2ACF554A1477685000991ED5 /* tinystr.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = tinystr.cpp; sourceTree = "<group>"; };
+ 2ACF554B1477685000991ED5 /* tinystr.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = tinystr.h; sourceTree = "<group>"; };
+ 2ACF554C1477685000991ED5 /* tinyxml.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = tinyxml.cpp; sourceTree = "<group>"; };
+ 2ACF554D1477685000991ED5 /* tinyxml.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = tinyxml.h; sourceTree = "<group>"; };
+ 2ACF554E1477685000991ED5 /* tinyxmlerror.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = tinyxmlerror.cpp; sourceTree = "<group>"; };
+ 2ACF554F1477685000991ED5 /* tinyxmlparser.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = tinyxmlparser.cpp; sourceTree = "<group>"; };
+/* End PBXFileReference section */
+
+/* Begin PBXFrameworksBuildPhase section */
+ 2ACF55421477682B00991ED5 /* Frameworks */ = {
+ isa = PBXFrameworksBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+/* End PBXFrameworksBuildPhase section */
+
+/* Begin PBXGroup section */
+ 034768DDFF38A45A11DB9C8B /* Products */ = {
+ isa = PBXGroup;
+ children = (
+ 2ACF55441477682B00991ED5 /* libtinyxml.a */,
+ );
+ name = Products;
+ sourceTree = "<group>";
+ };
+ 0867D691FE84028FC02AAC07 /* tinyxml */ = {
+ isa = PBXGroup;
+ children = (
+ 2ACF55481477685000991ED5 /* tinyxml */,
+ 034768DDFF38A45A11DB9C8B /* Products */,
+ );
+ name = tinyxml;
+ sourceTree = "<group>";
+ };
+ 2ACF55481477685000991ED5 /* tinyxml */ = {
+ isa = PBXGroup;
+ children = (
+ 2ACF554A1477685000991ED5 /* tinystr.cpp */,
+ 2ACF554B1477685000991ED5 /* tinystr.h */,
+ 2ACF554C1477685000991ED5 /* tinyxml.cpp */,
+ 2ACF554D1477685000991ED5 /* tinyxml.h */,
+ 2ACF554E1477685000991ED5 /* tinyxmlerror.cpp */,
+ 2ACF554F1477685000991ED5 /* tinyxmlparser.cpp */,
+ );
+ name = tinyxml;
+ path = ../../../../ext/tinyxml;
+ sourceTree = SOURCE_ROOT;
+ };
+/* End PBXGroup section */
+
+/* Begin PBXHeadersBuildPhase section */
+ 2ACF55401477682B00991ED5 /* Headers */ = {
+ isa = PBXHeadersBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ 2ACF55511477685000991ED5 /* tinystr.h in Headers */,
+ 2ACF55531477685000991ED5 /* tinyxml.h in Headers */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+/* End PBXHeadersBuildPhase section */
+
+/* Begin PBXNativeTarget section */
+ 2ACF55431477682B00991ED5 /* tinyxml */ = {
+ isa = PBXNativeTarget;
+ buildConfigurationList = 2ACF55471477683C00991ED5 /* Build configuration list for PBXNativeTarget "tinyxml" */;
+ buildPhases = (
+ 2AF569961479999900F9968C /* Unpack tinyxml */,
+ 2ACF55401477682B00991ED5 /* Headers */,
+ 2ACF55411477682B00991ED5 /* Sources */,
+ 2ACF55421477682B00991ED5 /* Frameworks */,
+ );
+ buildRules = (
+ );
+ dependencies = (
+ );
+ name = tinyxml;
+ productName = tinyxml;
+ productReference = 2ACF55441477682B00991ED5 /* libtinyxml.a */;
+ productType = "com.apple.product-type.library.static";
+ };
+/* End PBXNativeTarget section */
+
+/* Begin PBXProject section */
+ 0867D690FE84028FC02AAC07 /* Project object */ = {
+ isa = PBXProject;
+ buildConfigurationList = 1DEB916408733D950010E9CD /* Build configuration list for PBXProject "tinyxml" */;
+ compatibilityVersion = "Xcode 3.1";
+ developmentRegion = English;
+ hasScannedForEncodings = 1;
+ knownRegions = (
+ English,
+ Japanese,
+ French,
+ German,
+ );
+ mainGroup = 0867D691FE84028FC02AAC07 /* tinyxml */;
+ productRefGroup = 034768DDFF38A45A11DB9C8B /* Products */;
+ projectDirPath = "";
+ projectRoot = "";
+ targets = (
+ 2ACF55431477682B00991ED5 /* tinyxml */,
+ );
+ };
+/* End PBXProject section */
+
+/* Begin PBXShellScriptBuildPhase section */
+ 2AF569961479999900F9968C /* Unpack tinyxml */ = {
+ isa = PBXShellScriptBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ );
+ inputPaths = (
+ "$(SRCROOT)/../../../../ext/tinyxml_2_6_1.tar.gz",
+ "$(SRCROOT)/../../../../ext/tinyxml_2_6_1.patch",
+ );
+ name = "Unpack tinyxml";
+ outputPaths = (
+ "$(SRCROOT)/../../../../ext/tinyxml",
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ shellPath = /bin/sh;
+ shellScript = "cd $SRCROOT/../../../../ext\n\nif [ ! -d tinyxml ]\nthen\n\ttar -xzf tinyxml_2_6_1.tar.gz\n\tpatch -p0 < tinyxml_2_6_1.patch\nfi\n";
+ };
+/* End PBXShellScriptBuildPhase section */
+
+/* Begin PBXSourcesBuildPhase section */
+ 2ACF55411477682B00991ED5 /* Sources */ = {
+ isa = PBXSourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ 2ACF55501477685000991ED5 /* tinystr.cpp in Sources */,
+ 2ACF55521477685000991ED5 /* tinyxml.cpp in Sources */,
+ 2ACF55541477685000991ED5 /* tinyxmlerror.cpp in Sources */,
+ 2ACF55551477685000991ED5 /* tinyxmlparser.cpp in Sources */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+/* End PBXSourcesBuildPhase section */
+
+/* Begin XCBuildConfiguration section */
+ 1DEB916508733D950010E9CD /* Debug */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ ARCHS = "$(ARCHS_STANDARD_32_64_BIT)";
+ GCC_C_LANGUAGE_STANDARD = gnu99;
+ GCC_OPTIMIZATION_LEVEL = 0;
+ GCC_PREPROCESSOR_DEFINITIONS = TIXML_USE_STL;
+ GCC_WARN_ABOUT_RETURN_TYPE = YES;
+ GCC_WARN_UNUSED_VARIABLE = YES;
+ ONLY_ACTIVE_ARCH = YES;
+ PREBINDING = NO;
+ SDKROOT = macosx10.5;
+ };
+ name = Debug;
+ };
+ 1DEB916608733D950010E9CD /* Release */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ ARCHS = "$(ARCHS_STANDARD_32_64_BIT)";
+ GCC_C_LANGUAGE_STANDARD = gnu99;
+ GCC_PREPROCESSOR_DEFINITIONS = (
+ NDEBUG,
+ TIXML_USE_STL,
+ );
+ GCC_WARN_ABOUT_RETURN_TYPE = YES;
+ GCC_WARN_UNUSED_VARIABLE = YES;
+ PREBINDING = NO;
+ SDKROOT = macosx10.5;
+ };
+ name = Release;
+ };
+ 2ACF55451477682B00991ED5 /* Debug */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ ALWAYS_SEARCH_USER_PATHS = NO;
+ COPY_PHASE_STRIP = NO;
+ GCC_DYNAMIC_NO_PIC = NO;
+ GCC_ENABLE_FIX_AND_CONTINUE = YES;
+ GCC_MODEL_TUNING = G5;
+ GCC_OPTIMIZATION_LEVEL = 0;
+ INSTALL_PATH = /usr/local/lib;
+ PREBINDING = NO;
+ PRODUCT_NAME = tinyxml;
+ };
+ name = Debug;
+ };
+ 2ACF55461477682B00991ED5 /* Release */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ ALWAYS_SEARCH_USER_PATHS = NO;
+ COPY_PHASE_STRIP = YES;
+ DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
+ GCC_ENABLE_FIX_AND_CONTINUE = NO;
+ GCC_MODEL_TUNING = G5;
+ INSTALL_PATH = /usr/local/lib;
+ PREBINDING = NO;
+ PRODUCT_NAME = tinyxml;
+ ZERO_LINK = NO;
+ };
+ name = Release;
+ };
+/* End XCBuildConfiguration section */
+
+/* Begin XCConfigurationList section */
+ 1DEB916408733D950010E9CD /* Build configuration list for PBXProject "tinyxml" */ = {
+ isa = XCConfigurationList;
+ buildConfigurations = (
+ 1DEB916508733D950010E9CD /* Debug */,
+ 1DEB916608733D950010E9CD /* Release */,
+ );
+ defaultConfigurationIsVisible = 0;
+ defaultConfigurationName = Release;
+ };
+ 2ACF55471477683C00991ED5 /* Build configuration list for PBXNativeTarget "tinyxml" */ = {
+ isa = XCConfigurationList;
+ buildConfigurations = (
+ 2ACF55451477682B00991ED5 /* Debug */,
+ 2ACF55461477682B00991ED5 /* Release */,
+ );
+ defaultConfigurationIsVisible = 0;
+ defaultConfigurationName = Release;
+ };
+/* End XCConfigurationList section */
+ };
+ rootObject = 0867D690FE84028FC02AAC07 /* Project object */;
+}
diff --git a/src/aftereffects/xcode/ext/yaml.xcodeproj/project.pbxproj b/src/aftereffects/xcode/ext/yaml.xcodeproj/project.pbxproj
new file mode 100644
index 0000000..2dc9cbc
--- /dev/null
+++ b/src/aftereffects/xcode/ext/yaml.xcodeproj/project.pbxproj
@@ -0,0 +1,571 @@
+// !$*UTF8*$!
+{
+ archiveVersion = 1;
+ classes = {
+ };
+ objectVersion = 45;
+ objects = {
+
+/* Begin PBXBuildFile section */
+ 2AB6B01315538484007C3547 /* binary.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2AB6B01215538484007C3547 /* binary.cpp */; };
+ 2ACF55F21477693B00991ED5 /* aliasmanager.h in Headers */ = {isa = PBXBuildFile; fileRef = 2ACF55A31477693B00991ED5 /* aliasmanager.h */; };
+ 2ACF55F31477693B00991ED5 /* anchor.h in Headers */ = {isa = PBXBuildFile; fileRef = 2ACF55A41477693B00991ED5 /* anchor.h */; };
+ 2ACF55F41477693B00991ED5 /* anchordict.h in Headers */ = {isa = PBXBuildFile; fileRef = 2ACF55A61477693B00991ED5 /* anchordict.h */; };
+ 2ACF55F51477693B00991ED5 /* graphbuilder.h in Headers */ = {isa = PBXBuildFile; fileRef = 2ACF55A71477693B00991ED5 /* graphbuilder.h */; };
+ 2ACF55F61477693B00991ED5 /* conversion.h in Headers */ = {isa = PBXBuildFile; fileRef = 2ACF55A81477693B00991ED5 /* conversion.h */; };
+ 2ACF55F71477693B00991ED5 /* dll.h in Headers */ = {isa = PBXBuildFile; fileRef = 2ACF55A91477693B00991ED5 /* dll.h */; };
+ 2ACF55F81477693B00991ED5 /* emitfromevents.h in Headers */ = {isa = PBXBuildFile; fileRef = 2ACF55AA1477693B00991ED5 /* emitfromevents.h */; };
+ 2ACF55F91477693B00991ED5 /* emitter.h in Headers */ = {isa = PBXBuildFile; fileRef = 2ACF55AB1477693B00991ED5 /* emitter.h */; };
+ 2ACF55FA1477693B00991ED5 /* emittermanip.h in Headers */ = {isa = PBXBuildFile; fileRef = 2ACF55AC1477693B00991ED5 /* emittermanip.h */; };
+ 2ACF55FB1477693B00991ED5 /* eventhandler.h in Headers */ = {isa = PBXBuildFile; fileRef = 2ACF55AD1477693B00991ED5 /* eventhandler.h */; };
+ 2ACF55FC1477693B00991ED5 /* exceptions.h in Headers */ = {isa = PBXBuildFile; fileRef = 2ACF55AE1477693B00991ED5 /* exceptions.h */; };
+ 2ACF55FD1477693B00991ED5 /* iterator.h in Headers */ = {isa = PBXBuildFile; fileRef = 2ACF55AF1477693B00991ED5 /* iterator.h */; };
+ 2ACF55FE1477693B00991ED5 /* ltnode.h in Headers */ = {isa = PBXBuildFile; fileRef = 2ACF55B01477693B00991ED5 /* ltnode.h */; };
+ 2ACF55FF1477693B00991ED5 /* mark.h in Headers */ = {isa = PBXBuildFile; fileRef = 2ACF55B11477693B00991ED5 /* mark.h */; };
+ 2ACF56001477693B00991ED5 /* node.h in Headers */ = {isa = PBXBuildFile; fileRef = 2ACF55B21477693B00991ED5 /* node.h */; };
+ 2ACF56011477693B00991ED5 /* nodeimpl.h in Headers */ = {isa = PBXBuildFile; fileRef = 2ACF55B31477693B00991ED5 /* nodeimpl.h */; };
+ 2ACF56021477693B00991ED5 /* nodereadimpl.h in Headers */ = {isa = PBXBuildFile; fileRef = 2ACF55B41477693B00991ED5 /* nodereadimpl.h */; };
+ 2ACF56031477693B00991ED5 /* nodeutil.h in Headers */ = {isa = PBXBuildFile; fileRef = 2ACF55B51477693B00991ED5 /* nodeutil.h */; };
+ 2ACF56041477693B00991ED5 /* noncopyable.h in Headers */ = {isa = PBXBuildFile; fileRef = 2ACF55B61477693B00991ED5 /* noncopyable.h */; };
+ 2ACF56051477693B00991ED5 /* null.h in Headers */ = {isa = PBXBuildFile; fileRef = 2ACF55B71477693B00991ED5 /* null.h */; };
+ 2ACF56061477693B00991ED5 /* ostream.h in Headers */ = {isa = PBXBuildFile; fileRef = 2ACF55B81477693B00991ED5 /* ostream.h */; };
+ 2ACF56071477693B00991ED5 /* parser.h in Headers */ = {isa = PBXBuildFile; fileRef = 2ACF55B91477693B00991ED5 /* parser.h */; };
+ 2ACF56081477693B00991ED5 /* stlemitter.h in Headers */ = {isa = PBXBuildFile; fileRef = 2ACF55BA1477693B00991ED5 /* stlemitter.h */; };
+ 2ACF56091477693B00991ED5 /* stlnode.h in Headers */ = {isa = PBXBuildFile; fileRef = 2ACF55BB1477693B00991ED5 /* stlnode.h */; };
+ 2ACF560A1477693B00991ED5 /* traits.h in Headers */ = {isa = PBXBuildFile; fileRef = 2ACF55BC1477693B00991ED5 /* traits.h */; };
+ 2ACF560B1477693B00991ED5 /* yaml.h in Headers */ = {isa = PBXBuildFile; fileRef = 2ACF55BD1477693B00991ED5 /* yaml.h */; };
+ 2ACF560C1477693B00991ED5 /* aliasmanager.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2ACF55BF1477693B00991ED5 /* aliasmanager.cpp */; };
+ 2ACF560D1477693B00991ED5 /* collectionstack.h in Headers */ = {isa = PBXBuildFile; fileRef = 2ACF55C01477693B00991ED5 /* collectionstack.h */; };
+ 2ACF560E1477693B00991ED5 /* graphbuilder.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2ACF55C21477693B00991ED5 /* graphbuilder.cpp */; };
+ 2ACF560F1477693B00991ED5 /* graphbuilderadapter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2ACF55C31477693B00991ED5 /* graphbuilderadapter.cpp */; };
+ 2ACF56101477693B00991ED5 /* graphbuilderadapter.h in Headers */ = {isa = PBXBuildFile; fileRef = 2ACF55C41477693B00991ED5 /* graphbuilderadapter.h */; };
+ 2ACF56111477693B00991ED5 /* conversion.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2ACF55C51477693B00991ED5 /* conversion.cpp */; };
+ 2ACF56121477693B00991ED5 /* directives.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2ACF55C61477693B00991ED5 /* directives.cpp */; };
+ 2ACF56131477693B00991ED5 /* directives.h in Headers */ = {isa = PBXBuildFile; fileRef = 2ACF55C71477693B00991ED5 /* directives.h */; };
+ 2ACF56141477693B00991ED5 /* emitfromevents.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2ACF55C81477693B00991ED5 /* emitfromevents.cpp */; };
+ 2ACF56151477693B00991ED5 /* emitter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2ACF55C91477693B00991ED5 /* emitter.cpp */; };
+ 2ACF56161477693B00991ED5 /* emitterstate.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2ACF55CA1477693B00991ED5 /* emitterstate.cpp */; };
+ 2ACF56171477693B00991ED5 /* emitterstate.h in Headers */ = {isa = PBXBuildFile; fileRef = 2ACF55CB1477693B00991ED5 /* emitterstate.h */; };
+ 2ACF56181477693B00991ED5 /* emitterutils.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2ACF55CC1477693B00991ED5 /* emitterutils.cpp */; };
+ 2ACF56191477693B00991ED5 /* emitterutils.h in Headers */ = {isa = PBXBuildFile; fileRef = 2ACF55CD1477693B00991ED5 /* emitterutils.h */; };
+ 2ACF561A1477693B00991ED5 /* exp.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2ACF55CE1477693B00991ED5 /* exp.cpp */; };
+ 2ACF561B1477693B00991ED5 /* exp.h in Headers */ = {isa = PBXBuildFile; fileRef = 2ACF55CF1477693B00991ED5 /* exp.h */; };
+ 2ACF561C1477693B00991ED5 /* indentation.h in Headers */ = {isa = PBXBuildFile; fileRef = 2ACF55D01477693B00991ED5 /* indentation.h */; };
+ 2ACF561D1477693B00991ED5 /* iterator.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2ACF55D11477693B00991ED5 /* iterator.cpp */; };
+ 2ACF561E1477693B00991ED5 /* iterpriv.h in Headers */ = {isa = PBXBuildFile; fileRef = 2ACF55D21477693B00991ED5 /* iterpriv.h */; };
+ 2ACF561F1477693B00991ED5 /* node.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2ACF55D31477693B00991ED5 /* node.cpp */; };
+ 2ACF56201477693B00991ED5 /* nodebuilder.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2ACF55D41477693B00991ED5 /* nodebuilder.cpp */; };
+ 2ACF56211477693B00991ED5 /* nodebuilder.h in Headers */ = {isa = PBXBuildFile; fileRef = 2ACF55D51477693B00991ED5 /* nodebuilder.h */; };
+ 2ACF56221477693B00991ED5 /* nodeownership.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2ACF55D61477693B00991ED5 /* nodeownership.cpp */; };
+ 2ACF56231477693B00991ED5 /* nodeownership.h in Headers */ = {isa = PBXBuildFile; fileRef = 2ACF55D71477693B00991ED5 /* nodeownership.h */; };
+ 2ACF56241477693B00991ED5 /* null.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2ACF55D81477693B00991ED5 /* null.cpp */; };
+ 2ACF56251477693B00991ED5 /* ostream.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2ACF55D91477693B00991ED5 /* ostream.cpp */; };
+ 2ACF56261477693B00991ED5 /* parser.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2ACF55DA1477693B00991ED5 /* parser.cpp */; };
+ 2ACF56271477693B00991ED5 /* ptr_stack.h in Headers */ = {isa = PBXBuildFile; fileRef = 2ACF55DB1477693B00991ED5 /* ptr_stack.h */; };
+ 2ACF56281477693B00991ED5 /* ptr_vector.h in Headers */ = {isa = PBXBuildFile; fileRef = 2ACF55DC1477693B00991ED5 /* ptr_vector.h */; };
+ 2ACF56291477693B00991ED5 /* regex.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2ACF55DD1477693B00991ED5 /* regex.cpp */; };
+ 2ACF562A1477693B00991ED5 /* regex.h in Headers */ = {isa = PBXBuildFile; fileRef = 2ACF55DE1477693B00991ED5 /* regex.h */; };
+ 2ACF562B1477693B00991ED5 /* regeximpl.h in Headers */ = {isa = PBXBuildFile; fileRef = 2ACF55DF1477693B00991ED5 /* regeximpl.h */; };
+ 2ACF562C1477693B00991ED5 /* scanner.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2ACF55E01477693B00991ED5 /* scanner.cpp */; };
+ 2ACF562D1477693B00991ED5 /* scanner.h in Headers */ = {isa = PBXBuildFile; fileRef = 2ACF55E11477693B00991ED5 /* scanner.h */; };
+ 2ACF562E1477693B00991ED5 /* scanscalar.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2ACF55E21477693B00991ED5 /* scanscalar.cpp */; };
+ 2ACF562F1477693B00991ED5 /* scanscalar.h in Headers */ = {isa = PBXBuildFile; fileRef = 2ACF55E31477693B00991ED5 /* scanscalar.h */; };
+ 2ACF56301477693B00991ED5 /* scantag.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2ACF55E41477693B00991ED5 /* scantag.cpp */; };
+ 2ACF56311477693B00991ED5 /* scantag.h in Headers */ = {isa = PBXBuildFile; fileRef = 2ACF55E51477693B00991ED5 /* scantag.h */; };
+ 2ACF56321477693B00991ED5 /* scantoken.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2ACF55E61477693B00991ED5 /* scantoken.cpp */; };
+ 2ACF56331477693B00991ED5 /* setting.h in Headers */ = {isa = PBXBuildFile; fileRef = 2ACF55E71477693B00991ED5 /* setting.h */; };
+ 2ACF56341477693B00991ED5 /* simplekey.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2ACF55E81477693B00991ED5 /* simplekey.cpp */; };
+ 2ACF56351477693B00991ED5 /* singledocparser.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2ACF55E91477693B00991ED5 /* singledocparser.cpp */; };
+ 2ACF56361477693B00991ED5 /* singledocparser.h in Headers */ = {isa = PBXBuildFile; fileRef = 2ACF55EA1477693B00991ED5 /* singledocparser.h */; };
+ 2ACF56371477693B00991ED5 /* stream.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2ACF55EB1477693B00991ED5 /* stream.cpp */; };
+ 2ACF56381477693B00991ED5 /* stream.h in Headers */ = {isa = PBXBuildFile; fileRef = 2ACF55EC1477693B00991ED5 /* stream.h */; };
+ 2ACF56391477693B00991ED5 /* streamcharsource.h in Headers */ = {isa = PBXBuildFile; fileRef = 2ACF55ED1477693B00991ED5 /* streamcharsource.h */; };
+ 2ACF563A1477693B00991ED5 /* stringsource.h in Headers */ = {isa = PBXBuildFile; fileRef = 2ACF55EE1477693B00991ED5 /* stringsource.h */; };
+ 2ACF563B1477693B00991ED5 /* tag.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2ACF55EF1477693B00991ED5 /* tag.cpp */; };
+ 2ACF563C1477693B00991ED5 /* tag.h in Headers */ = {isa = PBXBuildFile; fileRef = 2ACF55F01477693B00991ED5 /* tag.h */; };
+ 2ACF563D1477693B00991ED5 /* token.h in Headers */ = {isa = PBXBuildFile; fileRef = 2ACF55F11477693B00991ED5 /* token.h */; };
+/* End PBXBuildFile section */
+
+/* Begin PBXFileReference section */
+ 2AB6B01215538484007C3547 /* binary.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = binary.cpp; sourceTree = "<group>"; };
+ 2ACF559C1477692300991ED5 /* libyaml.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libyaml.a; sourceTree = BUILT_PRODUCTS_DIR; };
+ 2ACF55A31477693B00991ED5 /* aliasmanager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = aliasmanager.h; sourceTree = "<group>"; };
+ 2ACF55A41477693B00991ED5 /* anchor.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = anchor.h; sourceTree = "<group>"; };
+ 2ACF55A61477693B00991ED5 /* anchordict.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = anchordict.h; sourceTree = "<group>"; };
+ 2ACF55A71477693B00991ED5 /* graphbuilder.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = graphbuilder.h; sourceTree = "<group>"; };
+ 2ACF55A81477693B00991ED5 /* conversion.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = conversion.h; sourceTree = "<group>"; };
+ 2ACF55A91477693B00991ED5 /* dll.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = dll.h; sourceTree = "<group>"; };
+ 2ACF55AA1477693B00991ED5 /* emitfromevents.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = emitfromevents.h; sourceTree = "<group>"; };
+ 2ACF55AB1477693B00991ED5 /* emitter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = emitter.h; sourceTree = "<group>"; };
+ 2ACF55AC1477693B00991ED5 /* emittermanip.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = emittermanip.h; sourceTree = "<group>"; };
+ 2ACF55AD1477693B00991ED5 /* eventhandler.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = eventhandler.h; sourceTree = "<group>"; };
+ 2ACF55AE1477693B00991ED5 /* exceptions.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = exceptions.h; sourceTree = "<group>"; };
+ 2ACF55AF1477693B00991ED5 /* iterator.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = iterator.h; sourceTree = "<group>"; };
+ 2ACF55B01477693B00991ED5 /* ltnode.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ltnode.h; sourceTree = "<group>"; };
+ 2ACF55B11477693B00991ED5 /* mark.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = mark.h; sourceTree = "<group>"; };
+ 2ACF55B21477693B00991ED5 /* node.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = node.h; sourceTree = "<group>"; };
+ 2ACF55B31477693B00991ED5 /* nodeimpl.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = nodeimpl.h; sourceTree = "<group>"; };
+ 2ACF55B41477693B00991ED5 /* nodereadimpl.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = nodereadimpl.h; sourceTree = "<group>"; };
+ 2ACF55B51477693B00991ED5 /* nodeutil.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = nodeutil.h; sourceTree = "<group>"; };
+ 2ACF55B61477693B00991ED5 /* noncopyable.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = noncopyable.h; sourceTree = "<group>"; };
+ 2ACF55B71477693B00991ED5 /* null.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = null.h; sourceTree = "<group>"; };
+ 2ACF55B81477693B00991ED5 /* ostream.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ostream.h; sourceTree = "<group>"; };
+ 2ACF55B91477693B00991ED5 /* parser.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = parser.h; sourceTree = "<group>"; };
+ 2ACF55BA1477693B00991ED5 /* stlemitter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = stlemitter.h; sourceTree = "<group>"; };
+ 2ACF55BB1477693B00991ED5 /* stlnode.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = stlnode.h; sourceTree = "<group>"; };
+ 2ACF55BC1477693B00991ED5 /* traits.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = traits.h; sourceTree = "<group>"; };
+ 2ACF55BD1477693B00991ED5 /* yaml.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = yaml.h; sourceTree = "<group>"; };
+ 2ACF55BF1477693B00991ED5 /* aliasmanager.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = aliasmanager.cpp; sourceTree = "<group>"; };
+ 2ACF55C01477693B00991ED5 /* collectionstack.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = collectionstack.h; sourceTree = "<group>"; };
+ 2ACF55C21477693B00991ED5 /* graphbuilder.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = graphbuilder.cpp; sourceTree = "<group>"; };
+ 2ACF55C31477693B00991ED5 /* graphbuilderadapter.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = graphbuilderadapter.cpp; sourceTree = "<group>"; };
+ 2ACF55C41477693B00991ED5 /* graphbuilderadapter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = graphbuilderadapter.h; sourceTree = "<group>"; };
+ 2ACF55C51477693B00991ED5 /* conversion.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = conversion.cpp; sourceTree = "<group>"; };
+ 2ACF55C61477693B00991ED5 /* directives.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = directives.cpp; sourceTree = "<group>"; };
+ 2ACF55C71477693B00991ED5 /* directives.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = directives.h; sourceTree = "<group>"; };
+ 2ACF55C81477693B00991ED5 /* emitfromevents.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = emitfromevents.cpp; sourceTree = "<group>"; };
+ 2ACF55C91477693B00991ED5 /* emitter.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = emitter.cpp; sourceTree = "<group>"; };
+ 2ACF55CA1477693B00991ED5 /* emitterstate.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = emitterstate.cpp; sourceTree = "<group>"; };
+ 2ACF55CB1477693B00991ED5 /* emitterstate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = emitterstate.h; sourceTree = "<group>"; };
+ 2ACF55CC1477693B00991ED5 /* emitterutils.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = emitterutils.cpp; sourceTree = "<group>"; };
+ 2ACF55CD1477693B00991ED5 /* emitterutils.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = emitterutils.h; sourceTree = "<group>"; };
+ 2ACF55CE1477693B00991ED5 /* exp.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = exp.cpp; sourceTree = "<group>"; };
+ 2ACF55CF1477693B00991ED5 /* exp.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = exp.h; sourceTree = "<group>"; };
+ 2ACF55D01477693B00991ED5 /* indentation.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = indentation.h; sourceTree = "<group>"; };
+ 2ACF55D11477693B00991ED5 /* iterator.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = iterator.cpp; sourceTree = "<group>"; };
+ 2ACF55D21477693B00991ED5 /* iterpriv.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = iterpriv.h; sourceTree = "<group>"; };
+ 2ACF55D31477693B00991ED5 /* node.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = node.cpp; sourceTree = "<group>"; };
+ 2ACF55D41477693B00991ED5 /* nodebuilder.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = nodebuilder.cpp; sourceTree = "<group>"; };
+ 2ACF55D51477693B00991ED5 /* nodebuilder.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = nodebuilder.h; sourceTree = "<group>"; };
+ 2ACF55D61477693B00991ED5 /* nodeownership.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = nodeownership.cpp; sourceTree = "<group>"; };
+ 2ACF55D71477693B00991ED5 /* nodeownership.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = nodeownership.h; sourceTree = "<group>"; };
+ 2ACF55D81477693B00991ED5 /* null.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = null.cpp; sourceTree = "<group>"; };
+ 2ACF55D91477693B00991ED5 /* ostream.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ostream.cpp; sourceTree = "<group>"; };
+ 2ACF55DA1477693B00991ED5 /* parser.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = parser.cpp; sourceTree = "<group>"; };
+ 2ACF55DB1477693B00991ED5 /* ptr_stack.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ptr_stack.h; sourceTree = "<group>"; };
+ 2ACF55DC1477693B00991ED5 /* ptr_vector.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ptr_vector.h; sourceTree = "<group>"; };
+ 2ACF55DD1477693B00991ED5 /* regex.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = regex.cpp; sourceTree = "<group>"; };
+ 2ACF55DE1477693B00991ED5 /* regex.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = regex.h; sourceTree = "<group>"; };
+ 2ACF55DF1477693B00991ED5 /* regeximpl.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = regeximpl.h; sourceTree = "<group>"; };
+ 2ACF55E01477693B00991ED5 /* scanner.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = scanner.cpp; sourceTree = "<group>"; };
+ 2ACF55E11477693B00991ED5 /* scanner.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = scanner.h; sourceTree = "<group>"; };
+ 2ACF55E21477693B00991ED5 /* scanscalar.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = scanscalar.cpp; sourceTree = "<group>"; };
+ 2ACF55E31477693B00991ED5 /* scanscalar.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = scanscalar.h; sourceTree = "<group>"; };
+ 2ACF55E41477693B00991ED5 /* scantag.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = scantag.cpp; sourceTree = "<group>"; };
+ 2ACF55E51477693B00991ED5 /* scantag.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = scantag.h; sourceTree = "<group>"; };
+ 2ACF55E61477693B00991ED5 /* scantoken.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = scantoken.cpp; sourceTree = "<group>"; };
+ 2ACF55E71477693B00991ED5 /* setting.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = setting.h; sourceTree = "<group>"; };
+ 2ACF55E81477693B00991ED5 /* simplekey.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = simplekey.cpp; sourceTree = "<group>"; };
+ 2ACF55E91477693B00991ED5 /* singledocparser.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = singledocparser.cpp; sourceTree = "<group>"; };
+ 2ACF55EA1477693B00991ED5 /* singledocparser.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = singledocparser.h; sourceTree = "<group>"; };
+ 2ACF55EB1477693B00991ED5 /* stream.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = stream.cpp; sourceTree = "<group>"; };
+ 2ACF55EC1477693B00991ED5 /* stream.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = stream.h; sourceTree = "<group>"; };
+ 2ACF55ED1477693B00991ED5 /* streamcharsource.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = streamcharsource.h; sourceTree = "<group>"; };
+ 2ACF55EE1477693B00991ED5 /* stringsource.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = stringsource.h; sourceTree = "<group>"; };
+ 2ACF55EF1477693B00991ED5 /* tag.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = tag.cpp; sourceTree = "<group>"; };
+ 2ACF55F01477693B00991ED5 /* tag.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = tag.h; sourceTree = "<group>"; };
+ 2ACF55F11477693B00991ED5 /* token.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = token.h; sourceTree = "<group>"; };
+/* End PBXFileReference section */
+
+/* Begin PBXFrameworksBuildPhase section */
+ 2ACF559A1477692300991ED5 /* Frameworks */ = {
+ isa = PBXFrameworksBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+/* End PBXFrameworksBuildPhase section */
+
+/* Begin PBXGroup section */
+ 034768DDFF38A45A11DB9C8B /* Products */ = {
+ isa = PBXGroup;
+ children = (
+ 2ACF559C1477692300991ED5 /* libyaml.a */,
+ );
+ name = Products;
+ sourceTree = "<group>";
+ };
+ 0867D691FE84028FC02AAC07 /* yaml */ = {
+ isa = PBXGroup;
+ children = (
+ 2ACF55A01477693B00991ED5 /* yaml-cpp */,
+ 034768DDFF38A45A11DB9C8B /* Products */,
+ );
+ name = yaml;
+ sourceTree = "<group>";
+ };
+ 2ACF55A01477693B00991ED5 /* yaml-cpp */ = {
+ isa = PBXGroup;
+ children = (
+ 2ACF55A11477693B00991ED5 /* include */,
+ 2ACF55BE1477693B00991ED5 /* src */,
+ );
+ name = "yaml-cpp";
+ path = "../../../../ext/yaml-cpp";
+ sourceTree = SOURCE_ROOT;
+ };
+ 2ACF55A11477693B00991ED5 /* include */ = {
+ isa = PBXGroup;
+ children = (
+ 2ACF55A21477693B00991ED5 /* yaml-cpp */,
+ );
+ path = include;
+ sourceTree = "<group>";
+ };
+ 2ACF55A21477693B00991ED5 /* yaml-cpp */ = {
+ isa = PBXGroup;
+ children = (
+ 2ACF55A31477693B00991ED5 /* aliasmanager.h */,
+ 2ACF55A41477693B00991ED5 /* anchor.h */,
+ 2ACF55A51477693B00991ED5 /* contrib */,
+ 2ACF55A81477693B00991ED5 /* conversion.h */,
+ 2ACF55A91477693B00991ED5 /* dll.h */,
+ 2ACF55AA1477693B00991ED5 /* emitfromevents.h */,
+ 2ACF55AB1477693B00991ED5 /* emitter.h */,
+ 2ACF55AC1477693B00991ED5 /* emittermanip.h */,
+ 2ACF55AD1477693B00991ED5 /* eventhandler.h */,
+ 2ACF55AE1477693B00991ED5 /* exceptions.h */,
+ 2ACF55AF1477693B00991ED5 /* iterator.h */,
+ 2ACF55B01477693B00991ED5 /* ltnode.h */,
+ 2ACF55B11477693B00991ED5 /* mark.h */,
+ 2ACF55B21477693B00991ED5 /* node.h */,
+ 2ACF55B31477693B00991ED5 /* nodeimpl.h */,
+ 2ACF55B41477693B00991ED5 /* nodereadimpl.h */,
+ 2ACF55B51477693B00991ED5 /* nodeutil.h */,
+ 2ACF55B61477693B00991ED5 /* noncopyable.h */,
+ 2ACF55B71477693B00991ED5 /* null.h */,
+ 2ACF55B81477693B00991ED5 /* ostream.h */,
+ 2ACF55B91477693B00991ED5 /* parser.h */,
+ 2ACF55BA1477693B00991ED5 /* stlemitter.h */,
+ 2ACF55BB1477693B00991ED5 /* stlnode.h */,
+ 2ACF55BC1477693B00991ED5 /* traits.h */,
+ 2ACF55BD1477693B00991ED5 /* yaml.h */,
+ );
+ path = "yaml-cpp";
+ sourceTree = "<group>";
+ };
+ 2ACF55A51477693B00991ED5 /* contrib */ = {
+ isa = PBXGroup;
+ children = (
+ 2ACF55A61477693B00991ED5 /* anchordict.h */,
+ 2ACF55A71477693B00991ED5 /* graphbuilder.h */,
+ );
+ path = contrib;
+ sourceTree = "<group>";
+ };
+ 2ACF55BE1477693B00991ED5 /* src */ = {
+ isa = PBXGroup;
+ children = (
+ 2ACF55BF1477693B00991ED5 /* aliasmanager.cpp */,
+ 2AB6B01215538484007C3547 /* binary.cpp */,
+ 2ACF55C01477693B00991ED5 /* collectionstack.h */,
+ 2ACF55C11477693B00991ED5 /* contrib */,
+ 2ACF55C51477693B00991ED5 /* conversion.cpp */,
+ 2ACF55C61477693B00991ED5 /* directives.cpp */,
+ 2ACF55C71477693B00991ED5 /* directives.h */,
+ 2ACF55C81477693B00991ED5 /* emitfromevents.cpp */,
+ 2ACF55C91477693B00991ED5 /* emitter.cpp */,
+ 2ACF55CA1477693B00991ED5 /* emitterstate.cpp */,
+ 2ACF55CB1477693B00991ED5 /* emitterstate.h */,
+ 2ACF55CC1477693B00991ED5 /* emitterutils.cpp */,
+ 2ACF55CD1477693B00991ED5 /* emitterutils.h */,
+ 2ACF55CE1477693B00991ED5 /* exp.cpp */,
+ 2ACF55CF1477693B00991ED5 /* exp.h */,
+ 2ACF55D01477693B00991ED5 /* indentation.h */,
+ 2ACF55D11477693B00991ED5 /* iterator.cpp */,
+ 2ACF55D21477693B00991ED5 /* iterpriv.h */,
+ 2ACF55D31477693B00991ED5 /* node.cpp */,
+ 2ACF55D41477693B00991ED5 /* nodebuilder.cpp */,
+ 2ACF55D51477693B00991ED5 /* nodebuilder.h */,
+ 2ACF55D61477693B00991ED5 /* nodeownership.cpp */,
+ 2ACF55D71477693B00991ED5 /* nodeownership.h */,
+ 2ACF55D81477693B00991ED5 /* null.cpp */,
+ 2ACF55D91477693B00991ED5 /* ostream.cpp */,
+ 2ACF55DA1477693B00991ED5 /* parser.cpp */,
+ 2ACF55DB1477693B00991ED5 /* ptr_stack.h */,
+ 2ACF55DC1477693B00991ED5 /* ptr_vector.h */,
+ 2ACF55DD1477693B00991ED5 /* regex.cpp */,
+ 2ACF55DE1477693B00991ED5 /* regex.h */,
+ 2ACF55DF1477693B00991ED5 /* regeximpl.h */,
+ 2ACF55E01477693B00991ED5 /* scanner.cpp */,
+ 2ACF55E11477693B00991ED5 /* scanner.h */,
+ 2ACF55E21477693B00991ED5 /* scanscalar.cpp */,
+ 2ACF55E31477693B00991ED5 /* scanscalar.h */,
+ 2ACF55E41477693B00991ED5 /* scantag.cpp */,
+ 2ACF55E51477693B00991ED5 /* scantag.h */,
+ 2ACF55E61477693B00991ED5 /* scantoken.cpp */,
+ 2ACF55E71477693B00991ED5 /* setting.h */,
+ 2ACF55E81477693B00991ED5 /* simplekey.cpp */,
+ 2ACF55E91477693B00991ED5 /* singledocparser.cpp */,
+ 2ACF55EA1477693B00991ED5 /* singledocparser.h */,
+ 2ACF55EB1477693B00991ED5 /* stream.cpp */,
+ 2ACF55EC1477693B00991ED5 /* stream.h */,
+ 2ACF55ED1477693B00991ED5 /* streamcharsource.h */,
+ 2ACF55EE1477693B00991ED5 /* stringsource.h */,
+ 2ACF55EF1477693B00991ED5 /* tag.cpp */,
+ 2ACF55F01477693B00991ED5 /* tag.h */,
+ 2ACF55F11477693B00991ED5 /* token.h */,
+ );
+ path = src;
+ sourceTree = "<group>";
+ };
+ 2ACF55C11477693B00991ED5 /* contrib */ = {
+ isa = PBXGroup;
+ children = (
+ 2ACF55C21477693B00991ED5 /* graphbuilder.cpp */,
+ 2ACF55C31477693B00991ED5 /* graphbuilderadapter.cpp */,
+ 2ACF55C41477693B00991ED5 /* graphbuilderadapter.h */,
+ );
+ path = contrib;
+ sourceTree = "<group>";
+ };
+/* End PBXGroup section */
+
+/* Begin PBXHeadersBuildPhase section */
+ 2ACF55981477692300991ED5 /* Headers */ = {
+ isa = PBXHeadersBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ 2ACF55F21477693B00991ED5 /* aliasmanager.h in Headers */,
+ 2ACF55F31477693B00991ED5 /* anchor.h in Headers */,
+ 2ACF55F41477693B00991ED5 /* anchordict.h in Headers */,
+ 2ACF55F51477693B00991ED5 /* graphbuilder.h in Headers */,
+ 2ACF55F61477693B00991ED5 /* conversion.h in Headers */,
+ 2ACF55F71477693B00991ED5 /* dll.h in Headers */,
+ 2ACF55F81477693B00991ED5 /* emitfromevents.h in Headers */,
+ 2ACF55F91477693B00991ED5 /* emitter.h in Headers */,
+ 2ACF55FA1477693B00991ED5 /* emittermanip.h in Headers */,
+ 2ACF55FB1477693B00991ED5 /* eventhandler.h in Headers */,
+ 2ACF55FC1477693B00991ED5 /* exceptions.h in Headers */,
+ 2ACF55FD1477693B00991ED5 /* iterator.h in Headers */,
+ 2ACF55FE1477693B00991ED5 /* ltnode.h in Headers */,
+ 2ACF55FF1477693B00991ED5 /* mark.h in Headers */,
+ 2ACF56001477693B00991ED5 /* node.h in Headers */,
+ 2ACF56011477693B00991ED5 /* nodeimpl.h in Headers */,
+ 2ACF56021477693B00991ED5 /* nodereadimpl.h in Headers */,
+ 2ACF56031477693B00991ED5 /* nodeutil.h in Headers */,
+ 2ACF56041477693B00991ED5 /* noncopyable.h in Headers */,
+ 2ACF56051477693B00991ED5 /* null.h in Headers */,
+ 2ACF56061477693B00991ED5 /* ostream.h in Headers */,
+ 2ACF56071477693B00991ED5 /* parser.h in Headers */,
+ 2ACF56081477693B00991ED5 /* stlemitter.h in Headers */,
+ 2ACF56091477693B00991ED5 /* stlnode.h in Headers */,
+ 2ACF560A1477693B00991ED5 /* traits.h in Headers */,
+ 2ACF560B1477693B00991ED5 /* yaml.h in Headers */,
+ 2ACF560D1477693B00991ED5 /* collectionstack.h in Headers */,
+ 2ACF56101477693B00991ED5 /* graphbuilderadapter.h in Headers */,
+ 2ACF56131477693B00991ED5 /* directives.h in Headers */,
+ 2ACF56171477693B00991ED5 /* emitterstate.h in Headers */,
+ 2ACF56191477693B00991ED5 /* emitterutils.h in Headers */,
+ 2ACF561B1477693B00991ED5 /* exp.h in Headers */,
+ 2ACF561C1477693B00991ED5 /* indentation.h in Headers */,
+ 2ACF561E1477693B00991ED5 /* iterpriv.h in Headers */,
+ 2ACF56211477693B00991ED5 /* nodebuilder.h in Headers */,
+ 2ACF56231477693B00991ED5 /* nodeownership.h in Headers */,
+ 2ACF56271477693B00991ED5 /* ptr_stack.h in Headers */,
+ 2ACF56281477693B00991ED5 /* ptr_vector.h in Headers */,
+ 2ACF562A1477693B00991ED5 /* regex.h in Headers */,
+ 2ACF562B1477693B00991ED5 /* regeximpl.h in Headers */,
+ 2ACF562D1477693B00991ED5 /* scanner.h in Headers */,
+ 2ACF562F1477693B00991ED5 /* scanscalar.h in Headers */,
+ 2ACF56311477693B00991ED5 /* scantag.h in Headers */,
+ 2ACF56331477693B00991ED5 /* setting.h in Headers */,
+ 2ACF56361477693B00991ED5 /* singledocparser.h in Headers */,
+ 2ACF56381477693B00991ED5 /* stream.h in Headers */,
+ 2ACF56391477693B00991ED5 /* streamcharsource.h in Headers */,
+ 2ACF563A1477693B00991ED5 /* stringsource.h in Headers */,
+ 2ACF563C1477693B00991ED5 /* tag.h in Headers */,
+ 2ACF563D1477693B00991ED5 /* token.h in Headers */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+/* End PBXHeadersBuildPhase section */
+
+/* Begin PBXNativeTarget section */
+ 2ACF559B1477692300991ED5 /* yaml */ = {
+ isa = PBXNativeTarget;
+ buildConfigurationList = 2ACF559F1477692B00991ED5 /* Build configuration list for PBXNativeTarget "yaml" */;
+ buildPhases = (
+ 2AF56976147991F700F9968C /* Unpack yaml */,
+ 2ACF55981477692300991ED5 /* Headers */,
+ 2ACF55991477692300991ED5 /* Sources */,
+ 2ACF559A1477692300991ED5 /* Frameworks */,
+ );
+ buildRules = (
+ );
+ dependencies = (
+ );
+ name = yaml;
+ productName = yaml;
+ productReference = 2ACF559C1477692300991ED5 /* libyaml.a */;
+ productType = "com.apple.product-type.library.static";
+ };
+/* End PBXNativeTarget section */
+
+/* Begin PBXProject section */
+ 0867D690FE84028FC02AAC07 /* Project object */ = {
+ isa = PBXProject;
+ buildConfigurationList = 1DEB916408733D950010E9CD /* Build configuration list for PBXProject "yaml" */;
+ compatibilityVersion = "Xcode 3.1";
+ developmentRegion = English;
+ hasScannedForEncodings = 1;
+ knownRegions = (
+ English,
+ Japanese,
+ French,
+ German,
+ );
+ mainGroup = 0867D691FE84028FC02AAC07 /* yaml */;
+ productRefGroup = 034768DDFF38A45A11DB9C8B /* Products */;
+ projectDirPath = "";
+ projectRoot = "";
+ targets = (
+ 2ACF559B1477692300991ED5 /* yaml */,
+ );
+ };
+/* End PBXProject section */
+
+/* Begin PBXShellScriptBuildPhase section */
+ 2AF56976147991F700F9968C /* Unpack yaml */ = {
+ isa = PBXShellScriptBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ );
+ inputPaths = (
+ "$(SRCROOT)/../../../../ext/yaml-cpp-0.3.0.tar.gz",
+ "$(SRCROOT)/../../../../ext/yaml-cpp-0.3.0.patch",
+ );
+ name = "Unpack yaml";
+ outputPaths = (
+ "$(SRCROOT)/../../../../ext/yaml-cpp",
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ shellPath = /bin/sh;
+ shellScript = "cd $SRCROOT/../../../../ext\n\nif [ ! -d yaml-cpp ]\nthen\n\ttar -xzf yaml-cpp-0.3.0.tar.gz\n\tpatch -p0 < yaml-cpp-0.3.0.patch\nfi\n";
+ showEnvVarsInLog = 0;
+ };
+/* End PBXShellScriptBuildPhase section */
+
+/* Begin PBXSourcesBuildPhase section */
+ 2ACF55991477692300991ED5 /* Sources */ = {
+ isa = PBXSourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ 2ACF560C1477693B00991ED5 /* aliasmanager.cpp in Sources */,
+ 2ACF560E1477693B00991ED5 /* graphbuilder.cpp in Sources */,
+ 2ACF560F1477693B00991ED5 /* graphbuilderadapter.cpp in Sources */,
+ 2ACF56111477693B00991ED5 /* conversion.cpp in Sources */,
+ 2ACF56121477693B00991ED5 /* directives.cpp in Sources */,
+ 2ACF56141477693B00991ED5 /* emitfromevents.cpp in Sources */,
+ 2ACF56151477693B00991ED5 /* emitter.cpp in Sources */,
+ 2ACF56161477693B00991ED5 /* emitterstate.cpp in Sources */,
+ 2ACF56181477693B00991ED5 /* emitterutils.cpp in Sources */,
+ 2ACF561A1477693B00991ED5 /* exp.cpp in Sources */,
+ 2ACF561D1477693B00991ED5 /* iterator.cpp in Sources */,
+ 2ACF561F1477693B00991ED5 /* node.cpp in Sources */,
+ 2ACF56201477693B00991ED5 /* nodebuilder.cpp in Sources */,
+ 2ACF56221477693B00991ED5 /* nodeownership.cpp in Sources */,
+ 2ACF56241477693B00991ED5 /* null.cpp in Sources */,
+ 2ACF56251477693B00991ED5 /* ostream.cpp in Sources */,
+ 2ACF56261477693B00991ED5 /* parser.cpp in Sources */,
+ 2ACF56291477693B00991ED5 /* regex.cpp in Sources */,
+ 2ACF562C1477693B00991ED5 /* scanner.cpp in Sources */,
+ 2ACF562E1477693B00991ED5 /* scanscalar.cpp in Sources */,
+ 2ACF56301477693B00991ED5 /* scantag.cpp in Sources */,
+ 2ACF56321477693B00991ED5 /* scantoken.cpp in Sources */,
+ 2ACF56341477693B00991ED5 /* simplekey.cpp in Sources */,
+ 2ACF56351477693B00991ED5 /* singledocparser.cpp in Sources */,
+ 2ACF56371477693B00991ED5 /* stream.cpp in Sources */,
+ 2ACF563B1477693B00991ED5 /* tag.cpp in Sources */,
+ 2AB6B01315538484007C3547 /* binary.cpp in Sources */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+/* End PBXSourcesBuildPhase section */
+
+/* Begin XCBuildConfiguration section */
+ 1DEB916508733D950010E9CD /* Debug */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ ARCHS = "$(ARCHS_STANDARD_32_64_BIT)";
+ GCC_C_LANGUAGE_STANDARD = gnu99;
+ GCC_OPTIMIZATION_LEVEL = 0;
+ GCC_WARN_ABOUT_RETURN_TYPE = YES;
+ GCC_WARN_UNUSED_VARIABLE = YES;
+ HEADER_SEARCH_PATHS = "../../../../ext/yaml-cpp/include";
+ ONLY_ACTIVE_ARCH = YES;
+ PREBINDING = NO;
+ SDKROOT = macosx10.5;
+ };
+ name = Debug;
+ };
+ 1DEB916608733D950010E9CD /* Release */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ ARCHS = "$(ARCHS_STANDARD_32_64_BIT)";
+ GCC_C_LANGUAGE_STANDARD = gnu99;
+ GCC_PREPROCESSOR_DEFINITIONS = NDEBUG;
+ GCC_WARN_ABOUT_RETURN_TYPE = YES;
+ GCC_WARN_UNUSED_VARIABLE = YES;
+ HEADER_SEARCH_PATHS = "../../../../ext/yaml-cpp/include";
+ PREBINDING = NO;
+ SDKROOT = macosx10.5;
+ };
+ name = Release;
+ };
+ 2ACF559D1477692300991ED5 /* Debug */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ ALWAYS_SEARCH_USER_PATHS = NO;
+ COPY_PHASE_STRIP = NO;
+ GCC_DYNAMIC_NO_PIC = NO;
+ GCC_ENABLE_FIX_AND_CONTINUE = YES;
+ GCC_MODEL_TUNING = G5;
+ GCC_OPTIMIZATION_LEVEL = 0;
+ INSTALL_PATH = /usr/local/lib;
+ PREBINDING = NO;
+ PRODUCT_NAME = yaml;
+ };
+ name = Debug;
+ };
+ 2ACF559E1477692300991ED5 /* Release */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ ALWAYS_SEARCH_USER_PATHS = NO;
+ COPY_PHASE_STRIP = YES;
+ DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
+ GCC_ENABLE_FIX_AND_CONTINUE = NO;
+ GCC_MODEL_TUNING = G5;
+ INSTALL_PATH = /usr/local/lib;
+ PREBINDING = NO;
+ PRODUCT_NAME = yaml;
+ ZERO_LINK = NO;
+ };
+ name = Release;
+ };
+/* End XCBuildConfiguration section */
+
+/* Begin XCConfigurationList section */
+ 1DEB916408733D950010E9CD /* Build configuration list for PBXProject "yaml" */ = {
+ isa = XCConfigurationList;
+ buildConfigurations = (
+ 1DEB916508733D950010E9CD /* Debug */,
+ 1DEB916608733D950010E9CD /* Release */,
+ );
+ defaultConfigurationIsVisible = 0;
+ defaultConfigurationName = Release;
+ };
+ 2ACF559F1477692B00991ED5 /* Build configuration list for PBXNativeTarget "yaml" */ = {
+ isa = XCConfigurationList;
+ buildConfigurations = (
+ 2ACF559D1477692300991ED5 /* Debug */,
+ 2ACF559E1477692300991ED5 /* Release */,
+ );
+ defaultConfigurationIsVisible = 0;
+ defaultConfigurationName = Release;
+ };
+/* End XCConfigurationList section */
+ };
+ rootObject = 0867D690FE84028FC02AAC07 /* Project object */;
+}