Skip to content

Commit c9f787e

Browse files
Add SVG read support (#53)
* Mouse fixes Signed-off-by: Darby Johnston <darbyjohnston@yahoo.com> * Add data Signed-off-by: Darby Johnston <darbyjohnston@yahoo.com> * Make timeline ticks more visible Signed-off-by: Darby Johnston <darbyjohnston@yahoo.com> * FFmpeg fixes Signed-off-by: Darby Johnston <darbyjohnston@yahoo.com> * Add SVG read support Signed-off-by: Darby Johnston <darbyjohnston@yahoo.com> * Add licenses Signed-off-by: Darby Johnston <darbyjohnston@yahoo.com> --------- Signed-off-by: Darby Johnston <darbyjohnston@yahoo.com>
1 parent a8c416e commit c9f787e

20 files changed

+439
-28
lines changed

.github/workflows/ci-workflow.yml

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,9 @@ jobs:
1010
linux-build:
1111
runs-on: ubuntu-latest
1212

13+
env:
14+
FFMPEG_MINIMAL: ON
15+
1316
steps:
1417
- uses: actions/checkout@v4
1518
with:
@@ -35,6 +38,9 @@ jobs:
3538
linux-package:
3639
runs-on: ubuntu-latest
3740

41+
env:
42+
FFMPEG_MINIMAL: ON
43+
3844
steps:
3945
- uses: actions/checkout@v4
4046
with:
@@ -73,6 +79,9 @@ jobs:
7379
macos-13-build:
7480
runs-on: macos-13
7581

82+
env:
83+
FFMPEG_MINIMAL: ON
84+
7685
steps:
7786
- uses: actions/checkout@v4
7887
with:
@@ -97,6 +106,9 @@ jobs:
97106
macos-build:
98107
runs-on: macos-latest
99108

109+
env:
110+
FFMPEG_MINIMAL: ON
111+
100112
steps:
101113
- uses: actions/checkout@v4
102114
with:
@@ -121,6 +133,9 @@ jobs:
121133
macos-package:
122134
runs-on: macos-latest
123135

136+
env:
137+
FFMPEG_MINIMAL: ON
138+
124139
steps:
125140
- uses: actions/checkout@v4
126141
with:
@@ -158,6 +173,9 @@ jobs:
158173
windows-build:
159174
runs-on: windows-latest
160175

176+
env:
177+
FFMPEG_MINIMAL: ON
178+
161179
steps:
162180
- uses: actions/checkout@v4
163181
with:
@@ -188,6 +206,9 @@ jobs:
188206
windows-package:
189207
runs-on: windows-latest
190208

209+
env:
210+
FFMPEG_MINIMAL: ON
211+
191212
steps:
192213
- uses: actions/checkout@v4
193214
with:

cmake/SuperBuild/BuildFFmpeg.cmake

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -82,8 +82,10 @@ set(FFmpeg_CONFIGURE_ARGS
8282
--disable-cuda-llvm
8383
--disable-cuvid
8484
--disable-d3d11va
85+
--disable-d3d12va
8586
--disable-dxva2
8687
--disable-ffnvcodec
88+
--disable-mediafoundation
8789
--disable-nvdec
8890
--disable-nvenc
8991
--disable-v4l2-m2m

data/Gap.otio

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@
2525
"value": 0
2626
}
2727
},
28-
"target_url": "Letter_A.png"
28+
"target_url": "Letter_A.svg"
2929
},
3030
"source_range": {
3131
"OTIO_SCHEMA": "TimeRange.1",
@@ -76,7 +76,7 @@
7676
"value": 0
7777
}
7878
},
79-
"target_url": "Letter_C.png"
79+
"target_url": "Letter_C.svg"
8080
},
8181
"source_range": {
8282
"OTIO_SCHEMA": "TimeRange.1",

data/toucan.svg

Lines changed: 78 additions & 0 deletions
Loading

legal/LICENSE_FFmpeg.txt

Lines changed: 120 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,120 @@
1+
# License
2+
3+
Most files in FFmpeg are under the GNU Lesser General Public License version 2.1
4+
or later (LGPL v2.1+). Read the file `COPYING.LGPLv2.1` for details. Some other
5+
files have MIT/X11/BSD-style licenses. In combination the LGPL v2.1+ applies to
6+
FFmpeg.
7+
8+
Some optional parts of FFmpeg are licensed under the GNU General Public License
9+
version 2 or later (GPL v2+). See the file `COPYING.GPLv2` for details. None of
10+
these parts are used by default, you have to explicitly pass `--enable-gpl` to
11+
configure to activate them. In this case, FFmpeg's license changes to GPL v2+.
12+
13+
Specifically, the GPL parts of FFmpeg are:
14+
15+
- libpostproc
16+
- optional x86 optimization in the files
17+
- `libavcodec/x86/flac_dsp_gpl.asm`
18+
- `libavcodec/x86/idct_mmx.c`
19+
- `libavfilter/x86/vf_removegrain.asm`
20+
- the following building and testing tools
21+
- `compat/solaris/make_sunver.pl`
22+
- `doc/t2h.pm`
23+
- `doc/texi2pod.pl`
24+
- `libswresample/swresample-test.c`
25+
- `tests/checkasm/*`
26+
- `tests/tiny_ssim.c`
27+
- the following filters in libavfilter:
28+
- `vf_blackframe.c`
29+
- `vf_boxblur.c`
30+
- `vf_colormatrix.c`
31+
- `vf_cover_rect.c`
32+
- `vf_cropdetect.c`
33+
- `vf_delogo.c`
34+
- `vf_eq.c`
35+
- `vf_find_rect.c`
36+
- `vf_fspp.c`
37+
- `vf_geq.c`
38+
- `vf_histeq.c`
39+
- `vf_hqdn3d.c`
40+
- `vf_interlace.c`
41+
- `vf_kerndeint.c`
42+
- `vf_mcdeint.c`
43+
- `vf_mpdecimate.c`
44+
- `vf_owdenoise.c`
45+
- `vf_perspective.c`
46+
- `vf_phase.c`
47+
- `vf_pp.c`
48+
- `vf_pp7.c`
49+
- `vf_pullup.c`
50+
- `vf_repeatfields.c`
51+
- `vf_sab.c`
52+
- `vf_smartblur.c`
53+
- `vf_spp.c`
54+
- `vf_stereo3d.c`
55+
- `vf_super2xsai.c`
56+
- `vf_tinterlace.c`
57+
- `vf_uspp.c`
58+
- `vsrc_mptestsrc.c`
59+
60+
Should you, for whatever reason, prefer to use version 3 of the (L)GPL, then
61+
the configure parameter `--enable-version3` will activate this licensing option
62+
for you. Read the file `COPYING.LGPLv3` or, if you have enabled GPL parts,
63+
`COPYING.GPLv3` to learn the exact legal terms that apply in this case.
64+
65+
There are a handful of files under other licensing terms, namely:
66+
67+
* The files `libavcodec/jfdctfst.c`, `libavcodec/jfdctint_template.c` and
68+
`libavcodec/jrevdct.c` are taken from libjpeg, see the top of the files for
69+
licensing details. Specifically note that you must credit the IJG in the
70+
documentation accompanying your program if you only distribute executables.
71+
You must also indicate any changes including additions and deletions to
72+
those three files in the documentation.
73+
* `tests/reference.pnm` is under the expat license.
74+
75+
76+
## External libraries
77+
78+
FFmpeg can be combined with a number of external libraries, which sometimes
79+
affect the licensing of binaries resulting from the combination.
80+
81+
### Compatible libraries
82+
83+
The following libraries are under GPL:
84+
- frei0r
85+
- libcdio
86+
- librubberband
87+
- libvidstab
88+
- libx264
89+
- libx265
90+
- libxavs
91+
- libxvid
92+
93+
When combining them with FFmpeg, FFmpeg needs to be licensed as GPL as well by
94+
passing `--enable-gpl` to configure.
95+
96+
The OpenCORE and VisualOn libraries are under the Apache License 2.0. That
97+
license is incompatible with the LGPL v2.1 and the GPL v2, but not with
98+
version 3 of those licenses. So to combine these libraries with FFmpeg, the
99+
license version needs to be upgraded by passing `--enable-version3` to configure.
100+
101+
### Incompatible libraries
102+
103+
There are certain libraries you can combine with FFmpeg whose licenses are not
104+
compatible with the GPL and/or the LGPL. If you wish to enable these
105+
libraries, even in circumstances that their license may be incompatible, pass
106+
`--enable-nonfree` to configure. But note that if you enable any of these
107+
libraries the resulting binary will be under a complex license mix that is
108+
more restrictive than the LGPL and that may result in additional obligations.
109+
It is possible that these restrictions cause the resulting binary to be
110+
unredistributable.
111+
112+
The Fraunhofer FDK AAC and OpenSSL libraries are under licenses which are
113+
incompatible with the GPLv2 and v3. To the best of our knowledge, they are
114+
compatible with the LGPL.
115+
116+
The NVENC library, while its header file is licensed under the compatible MIT
117+
license, requires a proprietary binary blob at run time, and is deemed to be
118+
incompatible with the GPL. We are not certain if it is compatible with the
119+
LGPL, but we require `--enable-nonfree` even with LGPL configurations in case
120+
it is not.

legal/LICENSE_feather-tk.txt

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
Copyright (c) 2024-2025 Darby Johnston
2+
All rights reserved.
3+
4+
Redistribution and use in source and binary forms, with or without
5+
modification, are permitted provided that the following conditions are met:
6+
7+
* Redistributions of source code must retain the above copyright notice, this
8+
list of conditions, and the following disclaimer.
9+
* Redistributions in binary form must reproduce the above copyright notice,
10+
this list of conditions, and the following disclaimer in the documentation
11+
and/or other materials provided with the distribution.
12+
* Neither the names of the copyright holders nor the names of any
13+
contributors may be used to endorse or promote products derived from this
14+
software without specific prior written permission.
15+
16+
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
17+
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
18+
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
19+
ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
20+
LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
21+
CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
22+
SUBSTITUE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
23+
INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
24+
CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
25+
ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
26+
POSSIBILITY OF SUCH DAMAGE.
27+

legal/LICENSE_lunasvg.txt

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
MIT License
2+
3+
Copyright (c) 2020-2024 Samuel Ugochukwu <sammycageagle@gmail.com>
4+
5+
Permission is hereby granted, free of charge, to any person obtaining a copy
6+
of this software and associated documentation files (the "Software"), to deal
7+
in the Software without restriction, including without limitation the rights
8+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9+
copies of the Software, and to permit persons to whom the Software is
10+
furnished to do so, subject to the following conditions:
11+
12+
The above copyright notice and this permission notice shall be included in all
13+
copies or substantial portions of the Software.
14+
15+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21+
SOFTWARE.

lib/toucanRender/CMakeLists.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,7 @@ set(LIBS_PUBLIC
4848
ftk::feather-tk-core
4949
OTIO::opentimelineio
5050
OTIO::opentime
51+
lunasvg::lunasvg
5152
OpenImageIO::OpenImageIO
5253
MINIZIP::minizip)
5354
if(CMAKE_COMPILER_IS_GNUCXX AND CMAKE_CXX_COMPILER_VERSION VERSION_LESS 9)

lib/toucanRender/ImageGraph.cpp

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -64,6 +64,10 @@ namespace toucan
6464
{
6565
read = std::make_shared<MovieReadNode>(path, nullptr, mem);
6666
}
67+
else if (SVGReadNode::hasExtension(path.extension().string()))
68+
{
69+
read = std::make_shared<SVGReadNode>(path, nullptr, mem);
70+
}
6771
else
6872
{
6973
read = std::make_shared<ImageReadNode>(path, nullptr, mem);
@@ -358,6 +362,10 @@ namespace toucan
358362
{
359363
read = std::make_shared<MovieReadNode>(path, externalRef, mem);
360364
}
365+
else if (SVGReadNode::hasExtension(path.extension().string()))
366+
{
367+
read = std::make_shared<SVGReadNode>(path, externalRef, mem);
368+
}
361369
else
362370
{
363371
read = std::make_shared<ImageReadNode>(path, externalRef, mem);

0 commit comments

Comments
 (0)