// Avisynth C Interface Version 0.20 // Copyright 2003 Kevin Atkinson // This program is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 2 of the License, or // (at your option) any later version. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program; if not, write to the Free Software // Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA, or visit // http://www.gnu.org/copyleft/gpl.html . // // As a special exception, I give you permission to link to the // Avisynth C interface with independent modules that communicate with // the Avisynth C interface solely through the interfaces defined in // avisynth_c.h, regardless of the license terms of these independent // modules, and to copy and distribute the resulting combined work // under terms of your choice, provided that every copy of the // combined work is accompanied by a complete copy of the source code // of the Avisynth C interface and Avisynth itself (with the version // used to produce the combined work), being distributed under the // terms of the GNU General Public License plus this exception. An // independent module is a module which is not derived from or based // on Avisynth C Interface, such as 3rd-party filters, import and // export plugins, or graphical user interfaces. #ifndef AVS_CAPI_H #define AVS_CAPI_H #ifdef __cplusplus # define EXTERN_C extern "C" #else # define EXTERN_C #endif #ifdef BUILDING_AVSCORE # if defined(GCC) && defined(X86_32) # define AVSC_CC # else // MSVC builds and 64-bit GCC # ifndef AVSC_USE_STDCALL # define AVSC_CC __cdecl # else # define AVSC_CC __stdcall # endif # endif #else // needed for programs that talk to AviSynth+ # ifndef AVSC_WIN32_GCC32 // see comment below # ifndef AVSC_USE_STDCALL # define AVSC_CC __cdecl # else # define AVSC_CC __stdcall # endif # else # define AVSC_CC # endif #endif // On 64-bit Windows, there's only one calling convention, // so there is no difference between MSVC and GCC. On 32-bit, // this isn't true. The convention that GCC needs to use to // even build AviSynth+ as 32-bit makes anything that uses // it incompatible with 32-bit MSVC builds of AviSynth+. // The AVSC_WIN32_GCC32 define is meant to provide a user // switchable way to make builds of FFmpeg to test 32-bit // GCC builds of AviSynth+ without having to screw around // with alternate headers, while still default to the usual // situation of using 32-bit MSVC builds of AviSynth+. // Hopefully, this situation will eventually be resolved // and a broadly compatible solution will arise so the // same 32-bit FFmpeg build can handle either MSVC or GCC // builds of AviSynth+. #define AVSC_INLINE static __inline #ifdef BUILDING_AVSCORE # define AVSC_EXPORT __declspec(dllexport) # define AVSC_API(ret, name) EXTERN_C AVSC_EXPORT ret AVSC_CC name #else # define AVSC_EXPORT EXTERN_C __declspec(dllexport) # ifndef AVSC_NO_DECLSPEC # define AVSC_API(ret, name) EXTERN_C __declspec(dllimport) ret AVSC_CC name # else # define AVSC_API(ret, name) typedef ret (AVSC_CC *name##_func) # endif #endif #endif //AVS_CAPI_H