Hermet Park [Thu, 29 Jul 2021 11:25:49 +0000 (20:25 +0900)]
tvg_format: optimize data format
This reduces tvg binary format size by converting PathCommand to more compact size.
This optimization increase +12% compress rate with our example:
195,668 => 174,071 (sum of all converted tvgs from svgs)
@Issues: https://github.com/Samsung/thorvg/issues/639
JunsuChoi [Fri, 30 Jul 2021 01:31:59 +0000 (10:31 +0900)]
sw_engine Raster: Apply bilinear interpolation to images
* Apply bilinear interpolation to images
Apply bilinear interpolation when drawing images with transformation
If the mapped coordinate value is a floating point value,
bilinear interpolation is performed using adjacent pixel values.
Interpolation is not performed in cases when the color values to beinterpolated
are the same or scale down case.
Hermet Park [Thu, 29 Jul 2021 11:08:38 +0000 (20:08 +0900)]
tvg_saver: code refactoring.
keep the macro naming convention.
Hermet Park [Thu, 29 Jul 2021 08:26:36 +0000 (17:26 +0900)]
tvg_loader: code refactoring.
keep the macro naming convention
Hermet Park [Thu, 29 Jul 2021 07:43:37 +0000 (16:43 +0900)]
tvg format: code refactoring
use SIZE() macro for consistency.
Hermet Park [Thu, 29 Jul 2021 06:51:00 +0000 (15:51 +0900)]
tvg_format: save/restore default view size in the data.
current bounding box of the paint is the default view size...
Do we have any better information of that?
Michal Maciola [Thu, 29 Jul 2021 02:47:33 +0000 (04:47 +0200)]
svg_loader: allow multiple defs tags
If svg contained multiple defs tags only the first one was handled correctly.
Every next 'defs' tag was skipped and its inner elements parsed as it was
outside the defs.
Hermet Park [Wed, 28 Jul 2021 11:55:10 +0000 (20:55 +0900)]
common picture: correct non-working size() behavior.
Pixel-based image picture doesn't work at size() method.
Obvisouly, we missed to implement it properly.
This patch corrects it.
@Issue: https://github.com/Samsung/thorvg/issues/656
Hermet Park [Mon, 19 Jul 2021 08:15:08 +0000 (17:15 +0900)]
remove temporary code after resolving the dependency
Change-Id: I48261134861299c9fd6fbe7dd4f729dcbf400b15
Hermet Park [Wed, 28 Jul 2021 10:55:28 +0000 (19:55 +0900)]
sw_engine raster: remove inlining.
Reduce the binary size,
Leave it to the best choice by the complier.
Michal Szczecinski [Tue, 27 Jul 2021 11:46:57 +0000 (13:46 +0200)]
sw_engine common: Added neon version of rasterRGBA32 API.
Changes:
- Added 'neon' vector option in build system
- Introduced neon version of rasterRGBA32 API, which improves
speed of the funciton on ARM cpu's around ~35%
Hermet Park [Wed, 28 Jul 2021 08:14:34 +0000 (17:14 +0900)]
sw_engine: flush memory pool after drawing.
if many canvas instances own private memory pool,
the memory usage can be increased linearly.
To prevent memory usage, flush out memory pool from the clear()
if the canvas uses private memory pool.
Hermet Park [Wed, 28 Jul 2021 05:06:55 +0000 (14:06 +0900)]
common loader: code refactoring
Bitmap based pictures doesn't need the viewbox,
LoaderModule should delegate the viewbox to the derived classes which
having vector-based image loaders such as svg, tvg.
In that case, paint resizing can be performed by the loaders by own
policy.
Hermet Park [Wed, 28 Jul 2021 04:40:45 +0000 (13:40 +0900)]
common loader: code refactoring.
replace from Scene to Paint at the internal interface.
Picture doesn't need to know the returned Node type.
base class, Paint is enough to in the data passing.
Hermet Park [Mon, 26 Jul 2021 11:59:21 +0000 (20:59 +0900)]
common picture: remove viewbox() api.
picture provides size() interface to return the image size,
viewbox() is conceptually not correct with the Picture.
Remove it under the beta api.
Hermet Park [Tue, 27 Jul 2021 14:33:26 +0000 (23:33 +0900)]
sw_engine: -- unused header
Hermet Park [Tue, 27 Jul 2021 14:28:01 +0000 (23:28 +0900)]
example performance: improve to print average...
Hermet Park [Tue, 27 Jul 2021 03:10:44 +0000 (12:10 +0900)]
example: add a sample for checking rendering performance.
Hermet Park [Mon, 26 Jul 2021 10:56:44 +0000 (19:56 +0900)]
tools svg2tvg: introduce a new tool for exporting tvg.
This is an utility to convert a file from svg to tvg
To use this, enable the feature by toggling in the meson option.
$meson build -Dtools="svg2tvg" ...
See also the usage:
Usage:
svg2tvg [SVG file]
Examples:
$ svg2tvg input.svg
Hermet Park [Mon, 26 Jul 2021 09:59:11 +0000 (18:59 +0900)]
test paint: add missing Paint utc
Hermet Park [Mon, 26 Jul 2021 11:45:02 +0000 (20:45 +0900)]
picture: paint() method shall not be public.
Hermet Park [Mon, 26 Jul 2021 07:49:54 +0000 (16:49 +0900)]
sw_engine renderer: ++exception handling.
initialize a member with the default value.
Hermet Park [Mon, 26 Jul 2021 07:12:23 +0000 (16:12 +0900)]
tvg_saver: fix the invalid data size.
sizeof(colors) indicates its pointer size, we actually intended to the structure size.
Change-Id: I007dbc615a9f241e009a513b401de32232aee64a
Hermet Park [Mon, 26 Jul 2021 07:17:06 +0000 (16:17 +0900)]
tvg_saver: +exception handling
close the file handle before returning the function.
Change-Id: I9da706184669a42ad1ef27747b3909aa0462ab32
Mira Grudzinska [Thu, 22 Jul 2021 20:02:28 +0000 (22:02 +0200)]
tvg_saver: removing saving the default values
The default values (stroke cap/join, fill rule/spread or color with alpha = 0)
were unnecessarily saved in the tvg format file.
Change-Id: If26778e7759d3aca11c1423bad2ed360cfd3d512
Mira Grudzinska [Fri, 23 Jul 2021 10:33:00 +0000 (12:33 +0200)]
doc: ++ MemPool docs
Change-Id: Ic0230e663172754eb5d1f2c02a6f2f97d334c245
Hermet Park [Mon, 26 Jul 2021 06:56:03 +0000 (06:56 +0000)]
Merge "replace the logging system with dlog in tizen" into tizen
Hermet Park [Mon, 26 Jul 2021 06:55:42 +0000 (06:55 +0000)]
Merge "enable tvg format in tizen" into tizen
Hermet Park [Mon, 26 Jul 2021 06:52:53 +0000 (15:52 +0900)]
bump up version 0.3.2
Change-Id: I030cd8faa7cb2d2673bcb4edacf339f0345cd474
Hermet Park [Mon, 26 Jul 2021 06:46:07 +0000 (15:46 +0900)]
enable tvg format in tizen
Change-Id: I3088ca5d8dfdb39647b4cb3a63e100c82177dcd2
Hermet Park [Mon, 26 Jul 2021 06:41:52 +0000 (15:41 +0900)]
replace the logging system with dlog in tizen
please turn on logging in meson_option when it's necessary.
Change-Id: Ib2483184697c344f196fc1ff2253309c9215239f
Michal Maciola [Fri, 23 Jul 2021 12:27:39 +0000 (14:27 +0200)]
sw_engine: removed unused rleAlphaMask
Hermet Park [Fri, 23 Jul 2021 03:05:53 +0000 (12:05 +0900)]
common log: use the log macro to replace the print method easier.
We can replace the system logger method by changing single line print source in common,
This also helps to remove the THORVG_LOG_ENABLED macro from each use-cases.
TVGLOG(): To print the hint & tip messages for users.
TVGERR(): To print the error message for debugging.
@Issues: https://github.com/Samsung/thorvg/issues/36
Hermet Park [Fri, 23 Jul 2021 05:46:31 +0000 (14:46 +0900)]
svg_loader: code refactoring.
clean up about logging before replacing it with TVGLOG()
Hermet Park [Thu, 22 Jul 2021 04:10:30 +0000 (13:10 +0900)]
doc: improved Saver documentation.
Hermet Park [Thu, 22 Jul 2021 04:00:59 +0000 (13:00 +0900)]
apis: promote beta apis to the official ones.
3 api candidates has been verified since it's tagged in beta,
we confirm that they are useful for tvg usages.
Here list shows the candidates apis:
@API Addition:
Matrix Paint::transform() noexcept;
CompositeMethod Paint::composite(const Paint** target) const noexcept;
Result SwCanvas::mempool(MempoolPolicy policy) noexcept;
Michal Maciola [Thu, 22 Jul 2021 11:35:26 +0000 (13:35 +0200)]
common: style fixes (#644)
Hermet Park [Thu, 22 Jul 2021 08:19:22 +0000 (17:19 +0900)]
common: code refactoring.
renamed loader classes same to Saver classes
tvgLoaderMgr -> tvgLoader (tvgSaver)
tvgLoader -> tvgLoadModule (tvgSaveModule)
Hermet Park [Thu, 22 Jul 2021 05:19:12 +0000 (14:19 +0900)]
examples: replace sprintf() with snprintf()
snprintf() is more preferred to use in preventing buffer overflow.
Hermet Park [Thu, 22 Jul 2021 02:54:49 +0000 (11:54 +0900)]
infra: add tvg saver in build test
Hermet Park [Wed, 21 Jul 2021 08:31:42 +0000 (17:31 +0900)]
tvg_saver: introduce a new module tvg saver
tvg saver is a new module to export tvg files.
In this patch, it also contains the infrastructure of saver module
to expand other types of savers such as png, jpg, etc.
To save the tvg file from a paint, you can use the Saver feature, for example:
auto saver = tvg::Saver::gen();
saver->save(paint, "sample.tvg");
saver->sync();
Later, you can read the "sample.tvg" using Picture.
auto picture = tvg::Picture::gen();
picture->load("sample.tvg");
...
The behavior of the saver will work on sync/async based on the threading setting of the initializer.
Thus if you wish to have a benefit of it, you must call sync() after the save() in the proper delayed time.
Otherwise, you can call sync() immediately.
Note that, the asynchronous tasking is depent on the saver module implementation.
Also, you need to enable tvg saver/loader modules from meson option. (yet this feature is under the beta)
@API Addition:
Result Saver::save(std::unique_ptr<Paint> paint, const std::string& path) noexcept;
Result Saver::sync() noexcept;
@Examples: tvgSaver
@Co-author: Mira Grudzinska <m.grudzinska@samsung.com>
Hermet Park [Wed, 21 Jul 2021 04:56:50 +0000 (13:56 +0900)]
tvg format: code refactoring #10
keep neat & clean code,
revise to tvg style naming convention.
Michal Maciola [Wed, 21 Jul 2021 03:12:09 +0000 (05:12 +0200)]
svg_loader: allow both clipPath and mask together (#622)
* svg_loader: allow both clipPath and mask together
* svg_loader: allow both clipPath and mask together fix #1
Changed seperate functions _applyClipPathComposition and _applyMaskComposition into single function _applyComposition
Hermet Park [Wed, 21 Jul 2021 02:14:11 +0000 (11:14 +0900)]
tvg format: code refactoring #9
revise format of the macro names, no logical changes.
++ comments for maintenence.
Hermet Park [Tue, 20 Jul 2021 11:03:45 +0000 (20:03 +0900)]
tvg format: code refactoring #8
Hide iterator APIs, simplify it as much as it's necessary.
Hermet Park [Tue, 20 Jul 2021 06:48:15 +0000 (15:48 +0900)]
tvg format: code refactoring #7
remove return type values.
Hermet Park [Tue, 20 Jul 2021 06:39:29 +0000 (15:39 +0900)]
tvg format: code refactoring #6
++ neat & clean code
Hermet Park [Tue, 20 Jul 2021 05:33:11 +0000 (14:33 +0900)]
tvg format: code refactoring #5
replace from ofstream to FILE
We know both have the same purpose, we always prefer the less binary size.
So... this brings the binary size reduction.
1918496 => 1913528
Hermet Park [Tue, 20 Jul 2021 04:53:17 +0000 (13:53 +0900)]
examples: split Tvg to TvgSaver, PictureTvg
We'd like to clearly split showcases TvgSaver & Picture.
Hermet Park [Tue, 20 Jul 2021 04:42:10 +0000 (13:42 +0900)]
examples: sort file list alphabetical.
Mira Grudzinska [Mon, 19 Jul 2021 11:03:37 +0000 (13:03 +0200)]
tvg_saver: Tvg.cpp example modyfied
Previously the 'test.tvg' file was loaded from the EXAMPLE_DIR.
Now the 'test.tvg' file is created using the tvg saver module
(if in the EXAMPLE_DIR is alread a 'test.tvg' file, it is overwriten)
and then it's loaded using the tvg loader module.
Hermet Park [Tue, 20 Jul 2021 04:33:44 +0000 (13:33 +0900)]
tvg format: code refactoring #4
Remove an unnecessary internal reference.
Hermet Park [Tue, 20 Jul 2021 04:31:25 +0000 (13:31 +0900)]
tvg format: code refactoring #3
use the Array function instead of own implementation.
Hermet Park [Tue, 20 Jul 2021 03:53:16 +0000 (12:53 +0900)]
tvg format: code refactoring #2
code clean up, removed reserved data sector
Hermet Park [Mon, 19 Jul 2021 11:32:31 +0000 (20:32 +0900)]
common saver: change to instance based for future sync/async behavior.
reserve sync() method TODO
Hermet Park [Mon, 19 Jul 2021 11:07:58 +0000 (20:07 +0900)]
common: code refactoring
unify tvg class identifiers
Mira Grudzinska [Mon, 19 Jul 2021 08:31:36 +0000 (10:31 +0200)]
tvg_saver: implementation of the Saver class
The Saver class enables to save any Paint object (Scene, Shape, Picture)
in a binary file. To read the file the tvg loader should be used.
To save a paint a new API was introduced - tvg::Saver::save.
Mira Grudzinska [Mon, 19 Jul 2021 08:28:14 +0000 (10:28 +0200)]
common: introducing basic iterators functionality
The introduced Iterator class enables to access the children nodes
of a given Paint.
Hermet Park [Mon, 19 Jul 2021 07:26:27 +0000 (16:26 +0900)]
sw_engine renderer: code refactoring
+ trivial changes while reading the code.
Hermet Park [Mon, 19 Jul 2021 06:06:44 +0000 (15:06 +0900)]
jpg_loader: code refactoring
remove unnecessary member variables.
Mira Grudzinska [Mon, 19 Jul 2021 07:02:10 +0000 (09:02 +0200)]
sw_engine: preventing a double application of the opacity (#540)
For filled and stroked shapes with a gradient, the opacity
was applied during the composition and during the ctable update.
To prevent this, in case the composition occured, ctable
is updated with the opacity = 255.
Michal Maciola [Mon, 19 Jul 2021 05:55:23 +0000 (07:55 +0200)]
jpg_loader: decompress header on opening
Hermet Park [Mon, 19 Jul 2021 05:31:18 +0000 (14:31 +0900)]
infra: seprate test image resources from the examples.
change for removing dependency.
Hermet Park [Mon, 19 Jul 2021 03:06:47 +0000 (12:06 +0900)]
bump up version 0.3.1
Change-Id: Id0aee760027f288fbfe547d974e4241aa500e40b
Michal Maciola [Fri, 16 Jul 2021 00:48:35 +0000 (02:48 +0200)]
svg_loader: image tag: force size equal to the viewbox (#603)
* svg_loader: image tag: force size equal to the viewbox
For some svg files it is needed to force size equal the viewbox
for proper scaling
* svg_loader: image tag: force size equal to the viewbox fix #1
Change-Id: I480e832b1f5a184ef0ef6ee597a320d5bbf7b508
Michal Maciola [Wed, 14 Jul 2021 07:50:15 +0000 (09:50 +0200)]
test: testPicture added .jpg and .png loading tests
Michal Maciola [Thu, 15 Jul 2021 15:34:54 +0000 (17:34 +0200)]
test capi: added missing canvas, paint and shape tests
Added tests for tvg_canvas_reserve, tvg_canvas_update_paint, tvg_paint_duplicate, tvg_paint_set_composite_method, tvg_shape_cubic_to, tvg_shape_close
Michal Maciola [Thu, 15 Jul 2021 15:32:41 +0000 (17:32 +0200)]
test capi: Stroke Radial Gradient
Added tvg_shape_get_gradient
Michal Maciola [Thu, 15 Jul 2021 09:13:20 +0000 (11:13 +0200)]
test: render jpg and png files
Michal Maciola [Wed, 14 Jul 2021 14:32:43 +0000 (16:32 +0200)]
test capi: Stroke Linear Gradient fix #2
Michal Maciola [Wed, 14 Jul 2021 08:40:40 +0000 (10:40 +0200)]
test capi: Stroke Linear Gradient fix #1
Added tvg_shape_get_gradient
Michal Maciola [Wed, 14 Jul 2021 07:38:34 +0000 (09:38 +0200)]
test capi: Stroke Linear Gradient
Michal Maciola [Thu, 15 Jul 2021 00:24:13 +0000 (02:24 +0200)]
github actions: added tvg and jpg loaders (#613)
* github actions: added tvg and jpg loaders
* github actions: added tvg and jpg loaders fix #1
Added install libturbojpeg
Michal Maciola [Wed, 14 Jul 2021 09:27:19 +0000 (11:27 +0200)]
test: svg rendering
Added SVG file loading and rendering for increasing TC Line coverage
Line coverage for src/loaders/svg: 85.5%
Michal Maciola [Wed, 14 Jul 2021 09:59:50 +0000 (11:59 +0200)]
test capi: scene added negative tests
Michal Maciola [Wed, 14 Jul 2021 11:57:32 +0000 (13:57 +0200)]
example: logo_test.svg (#617)
Manually created svg with edited logo.svg that test most of the svg tags
and attributes
Michal Maciola [Wed, 14 Jul 2021 10:19:42 +0000 (12:19 +0200)]
capi binding: added missing null paint check (#616)
Michal Maciola [Tue, 13 Jul 2021 09:26:15 +0000 (11:26 +0200)]
svg_loader: image tag: fixed utf8 decode
Fixed svgUtilURLDecode function.
Deleted snippet was not needed and it broken decoding when space.
Change-Id: I1f14ff60c10f8c73006c7ab4fc6bf0b0f945d02e
Michal Maciola [Tue, 13 Jul 2021 12:28:52 +0000 (14:28 +0200)]
svg_loader: race condition on arc processing
Unneeded static keyword in _pathAppendArcTo function led to race
conditioning
@issue: #604
Change-Id: I1741b56f6cf210b7709f513aceb657840851b3bf
JunsuChoi [Mon, 12 Jul 2021 02:55:33 +0000 (11:55 +0900)]
svg_loader SvgPath: Skip invalid path
If the d attribute of SVG path is not parsed through _nextCommand(),
it is regarded as an invalid data.
Hermet Park [Mon, 12 Jul 2021 04:47:10 +0000 (04:47 +0000)]
Merge "bump up version v0.3.0" into tizen
JunsuChoi [Mon, 12 Jul 2021 04:26:32 +0000 (13:26 +0900)]
svg_loader SvgUtil: Move nullcheck to before use
prevent invalid access
JunsuChoi [Mon, 12 Jul 2021 00:57:48 +0000 (09:57 +0900)]
svg_loader SvgLoader: Initialize to flag value of SvgParser
This patch fixes valgrind detection
$valgrind --leak-check=yes ./Svg
==21410== Conditional jump or move depends on uninitialised value(s)
==21410== at 0x505DB66: _attrParseStops(void*, char const*, char const*) (tvgSvgLoader.cpp:2099)
==21410== by 0x5064F6D: simpleXmlParseAttributes(char const*, unsigned int, bool ()(void, char const*, char const*), void const*) (tvgXmlParser.cpp:319)
==21410== by 0x5061774: _svgLoaderParserXmlOpen(SvgLoaderData*, char const*, unsigned int, bool) (tvgSvgLoader.cpp:2387)
==21410== by 0x5061857: _svgLoaderParser(void*, SimpleXMLType, char const*, unsigned int) (tvgSvgLoader.cpp:2408)
==21410== by 0x5065052: simpleXmlParse(char const*, unsigned int, bool, bool ()(void, SimpleXMLType, char const*, unsigned int), void const*) (tvgXmlParser.cpp:425)
==21410== by 0x5061993: SvgLoader::run(unsigned int) (tvgSvgLoader.cpp:2757)
==21410== by 0x5052F5E: operator() (tvgTaskScheduler.h:68)
==21410== by 0x5052F5E: tvg::TaskSchedulerImpl::run(unsigned int) (tvgTaskScheduler.cpp:138)
==21410== by 0x62C36DE: ??? (in /usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.25)
==21410== by 0x6DA36DA: start_thread (pthread_create.c:463)
==21410== by 0x68C871E: clone (clone.S:95)
JunsuChoi [Mon, 12 Jul 2021 01:14:51 +0000 (10:14 +0900)]
svg_loader SvgLoader: Fix memory leak of duplicate declared id
Duplicate declaration of id attribute is invaild.
We do not have a separate policy for invalid svg files.
Therefore, it is a priority to prevent crashes or memory leaks.
If an id is declared as duplicate, the last declared id is used.
Hermet Park [Mon, 12 Jul 2021 03:34:10 +0000 (12:34 +0900)]
bump up version v0.3.0
Change-Id: I14dee32b383a9af4e4a334df4b88a9767d210ad6
Hermet Park [Sun, 11 Jul 2021 02:37:28 +0000 (11:37 +0900)]
Update README.md
Hermet Park [Sun, 11 Jul 2021 02:34:59 +0000 (11:34 +0900)]
Update LICENSE
Hermet Park [Sun, 11 Jul 2021 02:33:43 +0000 (11:33 +0900)]
Update AUTHORS
Hermet Park [Sat, 10 Jul 2021 14:48:17 +0000 (23:48 +0900)]
commong shape: --sanitizer report
null pointer passed as argument 2, which is declared to never be null
Hermet Park [Fri, 9 Jul 2021 15:34:57 +0000 (00:34 +0900)]
Update CONTRIBUTING.md
Hermet Park [Fri, 9 Jul 2021 08:37:58 +0000 (17:37 +0900)]
jpg_loader: code refactoring
keep it clean and neat code add some TODO comments for the future tasks.
This also fixes potential data memory leak.
Michal Maciola [Thu, 1 Jul 2021 08:53:06 +0000 (10:53 +0200)]
example svg: 'image-embeded.svg' added fix #2
Chenaged indent to tabs
Michal Maciola [Thu, 1 Jul 2021 08:44:15 +0000 (10:44 +0200)]
example svg: 'image-embeded.svg' added fix #1
Added png image with composition applied
Michal Maciola [Thu, 1 Jul 2021 08:03:32 +0000 (10:03 +0200)]
example svg: 'image-embeded.svg' added
Hermet Park [Fri, 9 Jul 2021 07:53:08 +0000 (16:53 +0900)]
jpg_loader: change source file mode 664
JunsuChoi [Fri, 9 Jul 2021 04:22:43 +0000 (13:22 +0900)]
jpg_loader JpgLoader: Prevent memory leak
If the copied data in JpgLoader's data open is invalid,
it is processed without being cleared.
Therefore, data memory free is handled in the destructor.
Michal Maciola [Thu, 8 Jul 2021 08:49:21 +0000 (10:49 +0200)]
svg_loader: <image> tag introduced fix #9
Fixed Base64 and utf8 for new line and whitespace
Changed tvgSvgLoaderCommon.h to single line convention
Michal Maciola [Tue, 6 Jul 2021 09:33:44 +0000 (11:33 +0200)]
svg_loader: <image> tag introduced fix #8
Disable embedded svg files to protect against recursive svg image loading
Michal Maciola [Mon, 5 Jul 2021 07:12:40 +0000 (09:12 +0200)]
svg_loader: <image> tag introduced fix #7
fixed auto and new lines in tvgSvgUtil.cpp
Michal Maciola [Fri, 2 Jul 2021 11:05:10 +0000 (13:05 +0200)]
svg_loader: <image> tag introduced fix #6
Moved file:// removing into _imageBuildHelper