Files
Jonathan Thomas e3151d577b Clean-up and modernization of our cmake build system
- Modernized SWIG policy handling for Python, Ruby, and Java without raising the project-wide CMake policy version.
- Switched Python discovery to Python3 on CMake 3.12+, with legacy PythonInterp/PythonLibs fallback for older CMake.
- Removed dead pre-CMake-3.8 SWIG branches.
- Quieted optional babl pkg-config probing.
- Changed FFmpeg probing so avresample is only checked if swresample is unavailable.
- Cleaned Java binding debug configure messages.
- Addressed the SWIG build warnings:
  - Added SWIG-only juce::Thread declaration for Python/Ruby/Java.
  - Added Python QWidget typecheck precedence.
  - Filtered known Ruby binding limitations for multiple inheritance and unexposed Profile operators.
  - Suppressed Java-only SWIG categories for unsupported operators/proxy limitations via Java SWIG flags.
2026-05-24 17:31:52 -05:00

274 lines
7.0 KiB
OpenEdge ABL
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
/**
* @file
* @brief SWIG configuration for libopenshot (to generate Java SWIG bindings)
* @author Jonathan Thomas <jonathan@openshot.org>
*
* @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);
/* JUCE thread internals are implementation details, not binding API */
%ignore juce::Thread;
namespace juce {
class Thread {};
}
/* 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 <stdint.i>
%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 <std_except.i>
/* Include shared pointer code */
%include <std_shared_ptr.i>
/* Mark these classes as shared_ptr classes */
#ifdef USE_IMAGEMAGICK
%shared_ptr(Magick::Image)
#endif
%shared_ptr(juce::AudioBuffer<float>)
%shared_ptr(openshot::Frame)
/* Instantiate the required template specializations */
%template() std::map<std::string, int>;
#%template() std::pair<int, int>;
%template() std::vector<int>;
%template() std::vector<float>;
#%template() std::pair<double, double>;
#%template() std::pair<float, float>;
#%template() std::pair<std::string, std::string>;
#%template() std::vector<std::pair<std::string, std::string>>;
%template() std::vector<std::vector<float>>;
%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<const jbyte*>($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::Threads 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<openshot::Clip *>;
#%template(EffectBaseList) std::list<openshot::EffectBase *>;
%template(CoordinateVector) std::vector<openshot::Coordinate>;
%template(PointsVector) std::vector<openshot::Point>;
%template(FieldVector) std::vector<openshot::Field>;
%template(MappedFrameVector) std::vector<openshot::MappedFrame>;
%template(MetadataMap) std::map<std::string, std::string>;
/* Deprecated */
%template(AudioDeviceInfoVector) std::vector<openshot::AudioDeviceInfo>;
%extend openshot::Frame {
OpenShotByteBuffer GetPixelsBytes() {
OpenShotByteBuffer out = {NULL, 0};
std::shared_ptr<QImage> 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<QImage> 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<QImage> 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 "AnimatedCurve.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/FilmGrain.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/DenoiseImage.h"
%include "effects/Wave.h"
#ifdef USE_OPENCV
%include "effects/Stabilizer.h"
%include "effects/Tracker.h"
%include "effects/ObjectDetection.h"
%include "effects/Outline.h"
#endif