summaryrefslogtreecommitdiffstats
path: root/libass
Commit message (Collapse)AuthorAgeFilesLines
* Redesign horizontal alignment calculations for bidiGrigori Goronzy2011-07-091-18/+7
| | | | | | | The line alignment code determined the first and last glyph in a line and calculated the distance from that. This is rather arcane and doesn't easily work with bidi. Redesign the algorithm to simply add together all individual character widths instead.
* Fix coordinates after repositioningGrigori Goronzy2011-07-081-2/+11
|
* shaper: always use neutral base directionGrigori Goronzy2011-07-081-1/+2
|
* shaper: print version info stringGrigori Goronzy2011-07-063-0/+12
|
* Provisional bidi and shaping supportGrigori Goronzy2011-07-065-15/+210
| | | | | | | | | | | | | | Adds fully working bidirectional text and simple shaping support. The following works: - bidirectional text according to the Unicode Bidirectional Algorithm - simple shaper for mirrored forms (brackets, etc.) according to rule L4 of the Unicode Bidirectional Algorithm - reordering into visual order with correct line wrapping However, the implementation certainly needs efficiency improvements (caching, less malloc'ing), a proper shaper (HarfBuzz) needs to be hooked up and various bugs with karaoke and positioning need to be fixed.
* Fix cache leakGrigori Goronzy2011-07-061-1/+1
| | | | | Fixes a leak introduced with the new cache functions, caused by wrong pointer usage.
* Separate event parsing and layoutGrigori Goronzy2011-07-044-133/+148
| | | | | | Split up the combined event parsing and layout loop into two passes. State information needed for layout are duplicated in GlyphInfo structures.
* Remove unused struct memberGrigori Goronzy2011-07-041-1/+0
|
* Introduce bitmap runsGrigori Goronzy2011-07-043-0/+80
| | | | | | | | Prepare for run-based rendering. In the parser, increment a run id according to relevant style changes (color, border, shadow, etc.) to mark the points where a new bitmap needs to be started. Modify the line wrapper to increment the run ids of each glyph after a break. Add functions to calculate the render size of runs for rasterization.
* Fix box blur for non-bordered outlinesGrigori Goronzy2011-07-041-1/+1
| | | | | | This horrible bug was introduced by commit c13cb2. Pointed out by uau.
* Fix: VSFilter compat: don't render shadow when glyph/border invisibleGrigori Goronzy2011-07-041-1/+1
| | | | | | Use the alpha channel, not the red channel. Fixes commit f92830. Original patch by lachs0r.
* Cache ascender/descenderGrigori Goronzy2011-07-011-19/+10
| | | | | | Cache ascender/descender so they don't have to be queried every frame for every glyph. This also makes it possible to more uniformly handle drawings and glyphs.
* Remove unused hash key itemGrigori Goronzy2011-06-281-1/+0
|
* Fix stride support in vector clipsGrigori Goronzy2011-06-271-1/+1
|
* cache: unified bitmap cacheGrigori Goronzy2011-06-274-36/+68
| | | | | | Similarly to the glyph cache, subclass the bitmap cache to allow both outline bitmaps and clipping mask bitmaps to coexist in the same cache in a much cleaner way.
* cache: use outline-bitmap hierarchy to slim down bitmap hash keyGrigori Goronzy2011-06-273-38/+19
| | | | | | | | The bitmap hash key duplicated a lot of information the glyph hash key already saves. The subclassing introduced recently complicates this even more. Modify the hash key to utilize a pointer to the glyph hash value instead, which is faster and more flexible. Make sure to always empty the bitmap cache when the glyph cache is emptied.
* cache: safer ass_cache_statsGrigori Goronzy2011-06-271-4/+8
|
* cache: fix size tracking and emptyingGrigori Goronzy2011-06-272-26/+28
|
* cache: unified outline cache for glyphs/drawingsGrigori Goronzy2011-06-276-58/+112
| | | | | | | | | Glyphs and drawings have wildly different hash keys. Subclass the hash keys of glyphs and drawings in a new, unified outline cache. This also fixes some issues with drawings in the glyph cache. Now, the textual description of the drawing is included in the key (the hash value isn't really good enough, especially not fnv32) and the baseline offset is saved as well.
* Remove outdated commentGrigori Goronzy2011-06-261-2/+0
|
* bitmap: add strideGrigori Goronzy2011-06-263-44/+53
| | | | | Add stride support to the basic bitmap type used for low-level rasterization.
* Clean up includesGrigori Goronzy2011-06-213-8/+0
|
* Remove unused functionGrigori Goronzy2011-06-212-16/+0
|
* Use bare outlines for drawingsGrigori Goronzy2011-06-204-74/+32
| | | | | | | This finally gets rid of the nasty hack that manipulated a glyph we somehow got from FreeType. Simplifies drawing handling a bit and decouples drawing code from all font handling and related (fontconfig, etc.) code.
* Convert outline processing and caching from glyphs to bare outlinesGrigori Goronzy2011-06-206-79/+108
| | | | | | | | | This introduces functions to use and copy pointered outline objects easily and uses these instead of glyphs everywhere. Previously the glyph cache was abused for caching vector clipping masks, but this isn't possible anymore (nor desirable), thus vector clipping cache has been disabled for the moment.
* Convert to high-level rasterizer parts to outlinesGrigori Goronzy2011-06-153-25/+28
| | | | | This covers rasterization, filtering and blending for one render item.
* Stroker: process outlines directlyGrigori Goronzy2011-06-133-41/+54
|
* Render outlines, not glyphsGrigori Goronzy2011-06-131-34/+41
| | | | | | | | | | | | | | | | | | | libass can render both regular glyphs (extracted from a font) and drawings, which are inserted into an existing glyph so far. This is a rather crude hack. However, it is necessary, as the renderer only works with FT_Glyphs. The obvious solution is to work on the underlying outlines directly instead. This is the first step to make this possible: change the basic rasterizer to use the outline-specific rasterization functions. There are more advantages: - It's more efficient. The bitmap can be directly rendered into the bordered target bitmap. - This should make it easier to adapt the renderer to run-based rendering later on (the pixels are ORed into the target) The higher-level rendering code still needs to be adjusted.
* Fix whitespace trimmingGrigori Goronzy2011-06-111-8/+9
| | | | | | | Only try to remove any further whitespace in front of a line if the first character of the line (the break character) is whitespace. Addresses Issue 35.
* Add cache statisticsGrigori Goronzy2011-06-072-10/+8
|
* Much improved cache/hashmap implementationGrigori Goronzy2011-06-078-365/+224
| | | | | | | | - less code, cleaner - decoupled from ASS_Library - better data encapsulation - simpler interface - avoids a nasty hack
* refactor: move track init into ass track parserGrigori Goronzy2011-06-063-33/+37
|
* refactor: move karaoke effect parsing into event parserGrigori Goronzy2011-06-063-70/+72
|
* Bump version0.9.12Grigori Goronzy2011-05-301-1/+1
|
* Nicer default styleGrigori Goronzy2011-05-301-1/+1
| | | | Use 50% alpha for the shadow. Looks nicer and is just like VSFilter.
* Match first occurence of \fade, \fad, \an and \a tagsGrigori Goronzy2011-05-303-9/+23
| | | | | Track if we already parsed a fade or a alignment tag and ignore all further tags.
* Improved "last resort" charmap matchingGrigori Goronzy2011-04-091-5/+6
| | | | | | | | After font reselection, loop through all charmaps if no glyph can't be found until we hopefully find one that works. If we get here at all, the font is seriously broken, so this is unlikely to harm anything. This improves the last resort charmap fallback introduced in 96057d.
* Remove misleading comment about style case sensitivityGrigori Goronzy2011-04-091-1/+0
| | | | VSFilter always matches style names case sensitive.
* Much improved "Default" styleGrigori Goronzy2011-04-091-2/+36
| | | | | | Make the "Default" style, useful as a fallback and required by few scripts for proper rendering, actually do something sensible. Font, sizes, et cetera are set up mostly like VSFilter.
* VSFilter compat: don't render shadow when glyph/border invisibleGrigori Goronzy2011-04-091-0/+5
| | | | | Yet another VSFilter idiosyncracy: when the glyph fill is invisible (alpha 0xFF) and there is no border, do not render any shadow.
* Fix fontconfig disabled at runtimeGrigori Goronzy2011-02-162-5/+8
| | | | | | MPlayer is able to use this configuration with the -nofontconfig flag; this fixes crashes in case no font is available. Fixes a crash at uninit as well.
* Simplify word wrapping and fix possible endless loopGrigori Goronzy2011-02-091-14/+5
| | | | | | | | | | | | | | | | | | wrap_lines_smart() got stuck if there was a long line without spaces followed by a hard linebreak. When the loop got to the '\n' character the hard linebreak was not handled because the line was already over wrap length and soft linebreak handling had precedence. Then at the end of the loop body the code noted that the hard linebreak hadn't yet been handled, and the same glyph needed to be reprocessed for that. However, the soft linebreak code hadn't actually done anything because there was no space to break at, and thus the loop repeated from the exact same state forever. Handle this by removing the check for an additional hard linebreak after a soft linebreak, which stepped back by one char. This is a very marginal case and shouldn't really matter in practice. Original patch and parts of this message by uau.
* Relicense to ISCGrigori Goronzy2010-09-2818-216/+180
| | | | | | In hope to make libass as useful as possible, relicense libass to ISC, a simplified 2-clause BSD license. All contributors who provided non-trivial changes have granted their permission for this.
* Add support for \fs+ and \fs- syntaxGrigori Goronzy2010-08-121-0/+16
| | | | | | | These forms can be used to add or subtract a value from the current font size instead of setting a new font size. Animations are supported, but not recommended, as they won't be fluid due to grid-fitting/hinting.
* Only word wrap on spacesGrigori Goronzy2010-08-121-7/+3
| | | | | | It looks like VSFilter only ever wraps on spaces, even if the line length is going to overflow. We should do that as well. Fixes a pretty confusing problem with scrolling vertical text.
* Bump autoconf version and LIBASS_VERSION0.9.11Grigori Goronzy2010-08-111-1/+1
|
* Set AM_CFLAGS instead of CFLAGS directlyGrigori Goronzy2010-08-091-0/+2
|
* Get rid of NULL checks for freeGrigori Goronzy2010-08-097-52/+33
| | | | | The useless "if (foo) free(foo)" idiom is all over the place, just get rid of it finally...
* Fix another minor leak (event_format overwriting)Grigori Goronzy2010-08-091-0/+1
|
* Fix leaking of script-embedded fontsGrigori Goronzy2010-08-091-4/+2
|
* Fix drawing leakage: delay glyph allocationGrigori Goronzy2010-08-094-15/+17
| | | | | | Delay allocation of the "faux" glyph until a drawing is parsed. This helps with fixing a (pretty bad) memory leak and also reduces frame overhead a little.
* POSIX compliance: add strings.h include where appropriateGrigori Goronzy2010-08-074-0/+4
| | | | | strcasecmp/strncasecmp needs strings.h according to POSIX, so add this include where these occur.
* Add missing config.h includeGrigori Goronzy2010-08-071-0/+2
|
* Version bump0.9.10Grigori Goronzy2010-08-061-2/+2
| | | | | Increment shared library revision (due to API additions) and autoconf version.
* Fall back to first charmap as last resortGrigori Goronzy2010-08-011-0/+8
| | | | | | If we're already after the font reselection stage and a glyph cannot be found in a font, try again with the first charmap as a last resort. This is needed for old "symbol" fonts, for example.
* Raise verbosity level of "unknown transition effect" messageGrigori Goronzy2010-08-011-1/+1
| | | | This is more irritating than it helps and can seriously spam output.
* Check vector clip mask bounding box sizeGrigori Goronzy2010-08-013-6/+15
| | | | | | Similar to regular glyphs, check the bounding box of the clip mask and refrain from rendering humongous masks, which can take up considerably memory.
* Fix TextInfo reallocationGrigori Goronzy2010-08-011-1/+1
|
* Don't initialize bitmap hash key with bogus valuesGrigori Goronzy2010-08-011-2/+0
|
* refactor: extract glyph hash key fillGrigori Goronzy2010-08-011-24/+34
|
* refactor: move transformation/projection functionsGrigori Goronzy2010-08-011-80/+75
| | | | Gets rid of another forward declaration.
* Cosmetics: various cleanups in ass_render.cGrigori Goronzy2010-08-011-43/+36
| | | | | Cosmetical simplifications, fix whitespace where useful, remove deprecated comments.
* Handle allocation failure of clipped bitmapsGrigori Goronzy2010-08-011-0/+2
|
* Check ASS_Image allocationGrigori Goronzy2010-08-011-7/+13
|
* refactor: remove unneeded includesGrigori Goronzy2010-08-011-15/+1
| | | | These are included by ass_render.h already.
* refactor: move ASS_Renderer getters/setters/etc into separate fileGrigori Goronzy2010-08-014-126/+147
|
* refactor: extract bitmap hash key fillGrigori Goronzy2010-08-011-96/+80
|
* refactor: extract cache check/managementGrigori Goronzy2010-08-011-20/+27
|
* Limit (bitmap) glyph cache sizeGrigori Goronzy2010-08-012-4/+11
| | | | | | | | | | Now that bitmap glyphs (for vector clip masks) are stored in the glyph cache, make sure it cannot grow indefinitely easily. Similar to the bitmap cache, track approximate size of the cached elements and reset if the cache exceeds a certain limit. Also, reduce default bitmap cache size to 30 MB as we have essentially two bitmap caches now. That's still plenty in all use cases where caching matters.
* Fix potential, small memory leakGrigori Goronzy2010-07-291-0/+1
| | | | | Free clip vector drawing if multiple clip vectors appear in a single line. (In this case the last clip vector is used.)
* Parse vector clip mask only after cache missGrigori Goronzy2010-07-292-16/+23
|
* Remove debugging leftoversGrigori Goronzy2010-07-291-21/+0
|
* Fix drawing cbox calculationGrigori Goronzy2010-07-292-2/+19
| | | | | | Use extremes of all points fed to the parser, instead of only points that are added to the outline. Fixes a rendering problem reported on IRC and should fix Issue #7.
* Cache vector clip masksGrigori Goronzy2010-07-221-11/+31
| | | | | Cache pre-rasterized vector clip masks, big speedup if vector clipping is used extensively.
* refactor: move position translation functionsGrigori Goronzy2010-07-221-55/+51
| | | | Gets rid of a few forward declarations.
* Better PAR correctionGrigori Goronzy2010-07-221-29/+48
| | | | | | | | | | PAR correction so far merely applied a horizontal scaling factor to glyphs right after loading. This screws up transformed text, unfortunately. It's a much better approach to typeset text without correction and scale everything at the very end. In MPlayer, an EOSD rendering now looks exactly the same as a video filter rendering (except for more sharpness in the EOSD case).
* Limit debug output on parsing errorsGrigori Goronzy2010-07-192-2/+2
| | | | Limit context printed after parsing errors to 30 characters
* Drawing cache: include scale factor in hash keyGrigori Goronzy2010-07-141-1/+5
|
* Avoid unnecessary conditional and initializationsGrigori Goronzy2010-07-141-4/+3
|
* ASS_Drawing: do not free glyphGrigori Goronzy2010-07-141-2/+0
| | | | | The glyph is inserted into the cache and freed upon cache reset, so it shouldn't be freed alongside the drawing.
* Fix match_fullname loopGrigori Goronzy2010-07-111-1/+2
| | | | | Let's loop over everything and not just the outline check. *sigh* Fixes a crash reported by lachs0r on IRC.
* Simple optimizations to memory handlingGrigori Goronzy2010-06-272-7/+4
|
* Reduce number of glyph copiesGrigori Goronzy2010-06-271-16/+18
| | | | | | | | | Do not copy glyphs when it isn't really needed. Profiling with valgrind's callgrind showed that FT_Glyph_Copy takes a big fraction of the rendering time (~40%) for "simple styled softsubs" cases. It turned out that glyphs are duplicated much more often than is necessary. Reducing the number of copies cuts down the rendering time for the "simple styled softsubs" case by about 70%!
* Add