/** * @file * @brief SWIG configuration for libopenshot (to generate Java SWIG bindings) * @author Jonathan Thomas * * @section LICENSE */ // Copyright (c) 2008-2024 OpenShot Studios, LLC // // SPDX-License-Identifier: LGPL-3.0-or-later %module("threads"=1) openshot /* Suppress warnings about ignored operator= */ %warnfilter(362); /* Don't generate multiple wrappers for functions with default args */ %feature("compactdefaultargs", "1"); /* Enable inline documentation */ %feature("autodoc", "1"); /* Include various SWIG helpers */ %include "typemaps.i" %include "std_string.i" #%include "std_list.i" %include "std_vector.i" %include "std_map.i" %include %apply uint64_t { uintptr_t }; // Ignore QWidget overloads (Qt types are not wrapped in Java bindings) %ignore openshot::QtPlayer::SetQWidget(QWidget *); /* Unhandled STL Exception Handling */ %include /* Include shared pointer code */ %include /* Mark these classes as shared_ptr classes */ #ifdef USE_IMAGEMAGICK %shared_ptr(Magick::Image) #endif %shared_ptr(juce::AudioBuffer) %shared_ptr(openshot::Frame) /* Instantiate the required template specializations */ %template() std::map; #%template() std::pair; %template() std::vector; %template() std::vector; #%template() std::pair; #%template() std::pair; #%template() std::pair; #%template() std::vector>; %template() std::vector>; %inline %{ typedef struct OpenShotByteBuffer { const unsigned char* data; int size; } OpenShotByteBuffer; %} %typemap(jni) OpenShotByteBuffer "jbyteArray" %typemap(jstype) OpenShotByteBuffer "byte[]" %typemap(jtype) OpenShotByteBuffer "byte[]" %typemap(javaout) OpenShotByteBuffer { return $jnicall; } %typemap(out) OpenShotByteBuffer { if ($1.data && $1.size > 0) { jbyteArray jarr = jenv->NewByteArray($1.size); if (jarr == NULL) { SWIG_JavaThrowException(jenv, SWIG_JavaOutOfMemoryError, "Unable to allocate byte array"); return NULL; } jenv->SetByteArrayRegion(jarr, 0, $1.size, reinterpret_cast($1.data)); $result = jarr; } else { $result = NULL; } } %{ #include "OpenShotVersion.h" #include "ReaderBase.h" #include "WriterBase.h" #include "AudioDevices.h" #include "AudioWaveformer.h" #include "CacheBase.h" #include "CacheDisk.h" #include "CacheMemory.h" #include "ChannelLayouts.h" #include "ChunkReader.h" #include "ChunkWriter.h" #include "ClipBase.h" #include "Clip.h" #include "Coordinate.h" #include "Color.h" #include "DummyReader.h" #include "EffectBase.h" #include "Effects.h" #include "EffectInfo.h" #include "Enums.h" #include "Exceptions.h" #include "FFmpegReader.h" #include "FFmpegWriter.h" #include "Fraction.h" #include "Frame.h" #include "FrameMapper.h" #include "PlayerBase.h" #include "Point.h" #include "Profiles.h" #include "QtHtmlReader.h" #include "QtImageReader.h" #include "QtPlayer.h" #include "QtTextReader.h" #include "KeyFrame.h" #include "RendererBase.h" #include "Settings.h" #include "TimelineBase.h" #include "Timeline.h" #include "Qt/VideoCacheThread.h" #include "ZmqLogger.h" %} // Prevent SWIG from ever generating a wrapper for juce::Thread’s constructor (or run()) %ignore juce::Thread::Thread; #ifdef USE_IMAGEMAGICK %{ #include "ImageReader.h" #include "ImageWriter.h" #include "TextReader.h" %} #endif /* Wrap std templates (list, vector, etc...) */ #%template(ClipList) std::list; #%template(EffectBaseList) std::list; %template(CoordinateVector) std::vector; %template(PointsVector) std::vector; %template(FieldVector) std::vector; %template(MappedFrameVector) std::vector; %template(MetadataMap) std::map; /* Deprecated */ %template(AudioDeviceInfoVector) std::vector; %extend openshot::Frame { OpenShotByteBuffer GetPixelsBytes() { OpenShotByteBuffer out = {NULL, 0}; std::shared_ptr img = $self->GetImage(); if (!img) return out; const int size = img->bytesPerLine() * img->height(); const unsigned char* p = $self->GetPixels(); if (!p || size <= 0) return out; out.data = p; out.size = size; return out; } OpenShotByteBuffer GetPixelsRowBytes(int row) { OpenShotByteBuffer out = {NULL, 0}; std::shared_ptr img = $self->GetImage(); if (!img) return out; if (row < 0 || row >= img->height()) { return out; } const unsigned char* p = $self->GetPixels(row); if (!p) return out; out.data = p; out.size = img->bytesPerLine(); return out; } int GetBytesPerLine() { std::shared_ptr img = $self->GetImage(); return img ? img->bytesPerLine() : 0; } } %include "OpenShotVersion.h" %include "ReaderBase.h" %include "WriterBase.h" %include "AudioDevices.h" %include "AudioWaveformer.h" %include "CacheBase.h" %include "CacheDisk.h" %include "CacheMemory.h" %include "ChannelLayouts.h" %include "ChunkReader.h" %include "ChunkWriter.h" %include "ClipBase.h" %include "Clip.h" %include "Coordinate.h" %include "Color.h" %include "DummyReader.h" %include "EffectBase.h" %include "Effects.h" %include "EffectInfo.h" %include "Enums.h" %include "Exceptions.h" %include "FFmpegReader.h" %include "FFmpegWriter.h" %include "Fraction.h" %include "Frame.h" %include "FrameMapper.h" %include "PlayerBase.h" %include "Point.h" %include "Profiles.h" %include "QtHtmlReader.h" %include "QtImageReader.h" %include "QtPlayer.h" %include "QtTextReader.h" %include "KeyFrame.h" %include "RendererBase.h" %include "Settings.h" %include "TimelineBase.h" %include "Qt/VideoCacheThread.h" %include "Timeline.h" %include "ZmqLogger.h" #ifdef USE_IMAGEMAGICK %include "ImageReader.h" %include "ImageWriter.h" %include "TextReader.h" #endif /* Effects */ %include "effects/Bars.h" %include "effects/Blur.h" %include "effects/Brightness.h" %include "effects/Caption.h" %include "effects/ChromaKey.h" %include "effects/ColorMap.h" %include "effects/ColorShift.h" %include "effects/Crop.h" %include "effects/Deinterlace.h" %include "effects/Hue.h" %include "effects/LensFlare.h" %include "effects/Mask.h" %include "effects/Negate.h" %include "effects/Pixelate.h" %include "effects/Saturation.h" %include "effects/Sharpen.h" %include "effects/Shift.h" %include "effects/SphericalProjection.cpp" %include "effects/Wave.h" #ifdef USE_OPENCV %include "effects/Stabilizer.h" %include "effects/Tracker.h" %include "effects/ObjectDetection.h" %include "effects/Outline.h" #endif