Michal Maciola [Sat, 7 Aug 2021 03:00:04 +0000 (05:00 +0200)]
JPG loader: print error string on failure
Added error string printing on jpg image loading failure.
The error message help developer find the corrupted jpg file.
Error message is not printed for open from char* data as there the
loaders are tried on by one.
Hermet Park [Fri, 6 Aug 2021 01:30:42 +0000 (10:30 +0900)]
tvg_saver: verify view size earlier before the job is started.
JunsuChoi [Fri, 6 Aug 2021 01:07:21 +0000 (10:07 +0900)]
infra : Include dlog.h only when log is enabled
Change-Id: I91367053d6a9da83218e0b9bd5ad8638254d4617
Hermet Park [Wed, 4 Aug 2021 11:53:51 +0000 (20:53 +0900)]
tvg_loader: introduce tvg interpreter base class for future extension.
tvg binary format might break the compatibility if any major features have been changed.
It's allowed to do it when the major version is upgraded.
In that case, still we need to support the backward compatibility,
we can provide multiple binary interpreters and choose the proper one
based on the current loading tvg binary format version.
Thus, you can add further interpreters if it's necessary in the future.
Our policy is to derive the TvgBinInterpreterBase class to make it running on
the interface.
for example, if the major version is upgraded 1.x, you can implement TvgBinInterpreter1.
Hermet Park [Thu, 5 Aug 2021 02:15:10 +0000 (11:15 +0900)]
api: add deprecated syntax for deprecated apis.
Hermet Park [Thu, 5 Aug 2021 05:57:18 +0000 (14:57 +0900)]
common picture: return bounding box size with the current image size.
if the picture has a bitmap-based image,
it can return the bounding box size with the current image size.
JunsuChoi [Thu, 5 Aug 2021 05:36:40 +0000 (14:36 +0900)]
common Shape: Fix check to invalid argument
add cmds null check
Hermet Park [Thu, 5 Aug 2021 04:20:08 +0000 (13:20 +0900)]
tvg loader: code refactoring
revise the mimetype load method to keep it clean & neat.
Michal Maciola [Thu, 5 Aug 2021 02:02:26 +0000 (04:02 +0200)]
loaders: Pass mimetype to picture::load
* loaders: Pass mimetype to picture::load
Added mimetype attribute to enfaster loading using a proper loader.
@Changed api: Picture::load(const char* data, uint32_t size, const std::string& mimeType, bool copy = false)
@issue: #571
Hermet Park [Wed, 4 Aug 2021 10:11:12 +0000 (19:11 +0900)]
sw_engine raster: code refactoring.
Separate simd implementation by files to maintain them easier.
Now we have avx, c, neon version implementation base,
we can add implementations to them.
Hermet Park [Wed, 4 Aug 2021 10:58:15 +0000 (19:58 +0900)]
infra: updated meson summary.
Michal Szczecinski [Tue, 3 Aug 2021 13:33:29 +0000 (15:33 +0200)]
sw_engine common: Added neon alpha blending.
Changes:
- Prepare neon verison of ALPHA_BLEND API.
- Use ALPHA_BLEND_NEON in _translucentRle
Notes:
- _translucentRle with neon support reduces execution time of this
function ~ 300 % (measured on uint32_t 400 x 400 buffer).
- API was tested on ARMv7l device with GCC 9.2 based toolchain. Results
on other devices could be different.
Hermet Park [Wed, 4 Aug 2021 06:31:06 +0000 (15:31 +0900)]
tvg_format: force to check for compatibility by version comparision.
tvg file stores the version info of thorvg when it's generated,
in order to compare it with the runtime thorvg version when it's loaded.
For this, thorvg builds up the current version of symbol on the initilaization step,
that can be referred by the tvg loader.
Hermet Park [Wed, 4 Aug 2021 06:26:48 +0000 (15:26 +0900)]
common loader: use RawLoader class immediately.
no need to find it here.
Michal Maciola [Tue, 3 Aug 2021 10:56:31 +0000 (12:56 +0200)]
loader: removed loader finding for LoaderMgr::loader(data, w, h, copy)
LoaderMgr::loader(data, w, h, copy) is dedicated for raw images only.
No need to try other loaders.
Hermet Park [Wed, 4 Aug 2021 05:41:39 +0000 (14:41 +0900)]
bump up version 0.3.3
Change-Id: I7788d4c1bad31098e64f3baa86d1f83a65be1e34
Hermet Park [Fri, 30 Jul 2021 03:40:02 +0000 (12:40 +0900)]
tvg_saver: do not pass through if the view size is invalid.
Hermet Park [Fri, 30 Jul 2021 03:34:56 +0000 (12:34 +0900)]
common loader: lookup in the numberic order.
JunsuChoi [Fri, 30 Jul 2021 02:47:04 +0000 (11:47 +0900)]
svg_loader SvgLoader: Add 'href' attribute for parser
"xlink:href" will be deprecated.
https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/xlink:href
Hermet Park [Fri, 30 Jul 2021 02:01:08 +0000 (11:01 +0900)]
dexample Picture: improve the test coverage.
In this patch, it replaced the test images with Lenna.
and fix the wrong jpeg file size figuring.
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.