]> granicus.if.org Git - libass/log
libass
15 years agoFix renderer memory leaks
Grigori Goronzy [Fri, 24 Jul 2009 08:06:16 +0000 (10:06 +0200)]
Fix renderer memory leaks

Use the correct free order when freeing a ass_renderer and make sure
that the latest list of ass_images is freed, too.

Protect the font family string against double free and make sure it
is freed in free_render_context.

Leaks and access problems were found by valgrind/memcheck.

15 years agoFix fontconfig memory leaks
Grigori Goronzy [Fri, 24 Jul 2009 08:01:41 +0000 (10:01 +0200)]
Fix fontconfig memory leaks

Do not manually use FcConfigFilename; passing a NULL pointer to
FcConfigParseAndLoad is just as effective and also avoids a memory leak
since the string allocated by FcConfigFilename was never freed.

Free FcConfig instance in fontconfig_done; since we're not using the
default configuration anymore it doesn't make sense to keep the
configuration around.

Leaks were found by valgrind/memcheck.

15 years agoTest program: free track/renderer/library
Grigori Goronzy [Fri, 24 Jul 2009 07:59:47 +0000 (09:59 +0200)]
Test program: free track/renderer/library

In the test program, free the track, renderer and library properly.
This is useful for memory leak testing.

15 years agoFree tracks properly
Grigori Goronzy [Fri, 24 Jul 2009 07:58:01 +0000 (09:58 +0200)]
Free tracks properly

When freeing a track, also free the track name and the track itself.
Leak found by valgrind/memcheck.

15 years agoBuild system: enable/disable flags, pkg-config fixes
Grigori Goronzy [Fri, 24 Jul 2009 03:13:02 +0000 (05:13 +0200)]
Build system: enable/disable flags, pkg-config fixes

* Add enable/disable flags for enca, fontconfig and libpng.
* Add dependent libraries to pkg-config file to allow static linking.

15 years agoFix compilation without fontconfig
Grigori Goronzy [Fri, 24 Jul 2009 03:05:52 +0000 (05:05 +0200)]
Fix compilation without fontconfig

Adjust fontconfig_select and fontconfig_update stubs for the recent
changes.

15 years agoMove render_id into ass_renderer
Grigori Goronzy [Thu, 23 Jul 2009 01:23:28 +0000 (03:23 +0200)]
Move render_id into ass_renderer

The render_id (last_render_id) variable was the last remaining static
data object; move it into render_priv.

15 years agoFallback to default fontconfig configuration
Grigori Goronzy [Wed, 22 Jul 2009 20:49:55 +0000 (22:49 +0200)]
Fallback to default fontconfig configuration

If parsing or loading the fontconfig configuration file, either
using the default or a specified one, fails, try to load the
default fontconfig configuration.  This triggers loading a fallback
configuration if no configuration file is available at all.  A warning
message is emitted to notify the user about this.

15 years agoFix rasterizer error handling (double free)
Grigori Goronzy [Wed, 22 Jul 2009 01:24:42 +0000 (03:24 +0200)]
Fix rasterizer error handling (double free)

In case rasterizing a glyph is successful, but rasterizing its outline
is not, do not free the glyph bitmap.  It will be freed in cache cleanup
later.  Freeing it earlier leads to a double free.

15 years agoBold/italic: interpret -1 as "true"
Grigori Goronzy [Wed, 22 Jul 2009 01:21:33 +0000 (03:21 +0200)]
Bold/italic: interpret -1 as "true"

Interpret the value -1 as "true", as specified in the ASS
specifications.  Otherwise, clamp the value to 0 for other values <
0, so these are interpreted as "false".

15 years agoAdd check for libm to configure
Grigori Goronzy [Tue, 21 Jul 2009 12:23:30 +0000 (14:23 +0200)]
Add check for libm to configure

Check for libm and add the library to the linker flags.

15 years agoDo not double free default font/family buffers
Grigori Goronzy [Tue, 21 Jul 2009 12:03:46 +0000 (14:03 +0200)]
Do not double free default font/family buffers

Reported by Martin Sourada.

15 years agoFactor out bitmap buffer copy
Grigori Goronzy [Tue, 21 Jul 2009 01:06:05 +0000 (03:06 +0200)]
Factor out bitmap buffer copy

For clarity, factor out bitmap copying into a function. Do not pad the
bitmap with stride in the last row; this can not by guaranteed anyway.
Add a comment about this peculiarity to the API documentation in ass.h
Idea by Evgeniy Stepanov.

15 years agoClamp clip rectangle to frame size
Grigori Goronzy [Tue, 21 Jul 2009 00:39:52 +0000 (02:39 +0200)]
Clamp clip rectangle to frame size

Make sure the clip rectangle is inside the screen boundaries.
Idea by Evgeniy Stepanov.

15 years agoAnimations: allow equal start and end time
Grigori Goronzy [Mon, 20 Jul 2009 22:04:24 +0000 (00:04 +0200)]
Animations: allow equal start and end time

Do not set the end time of the animation to the end time of the event
in case end time and start time specified in a \t tag are equal.
This should sort out a problem introduced by commit 1f176b.

15 years agoCheck for table availability when striking a glyph
Grigori Goronzy [Sun, 19 Jul 2009 22:25:27 +0000 (00:25 +0200)]
Check for table availability when striking a glyph

The glyph striker (underline/strike-through) did not check for table
availability, possibly accessing a NULL pointer.  Change this to
only strike the glyph if the table with the appropriate information
is available.  Currently there is no fallback for fonts without the
required information.

15 years agoFont metrics: prefer OS/2 table for ascender/descender
Grigori Goronzy [Sun, 19 Jul 2009 22:18:55 +0000 (00:18 +0200)]
Font metrics: prefer OS/2 table for ascender/descender

If possible, use ascender/descender from the OS/2 TTF table. This is
another try to get libass to match VSFilter in regard to vertical font
metrics.

15 years agoFix borders when a x/y component is zero
Grigori Goronzy [Sun, 19 Jul 2009 14:13:39 +0000 (16:13 +0200)]
Fix borders when a x/y component is zero

15 years agoFix drawing parser memory leak
Grigori Goronzy [Sun, 19 Jul 2009 06:39:24 +0000 (08:39 +0200)]
Fix drawing parser memory leak

Always free the drawing glyph in ass_drawing_free; do not double free
clip vector bitmap.

15 years agoIntroduce simple cache memory management
Grigori Goronzy [Sun, 19 Jul 2009 06:38:49 +0000 (08:38 +0200)]
Introduce simple cache memory management

libass' cache was basically unmanaged; it would grow without any limits,
depending on how complex the subtitles are.  Introduce a simple limiting
that resets the cache if certain limits are exceeded.  The bitmap cache
is limited to approx. 50 MB size by default, while the glyph cache
allows storing up to 1000 glyphs by default.  A few tests with rather
heavily softsubbed fansubs show that these limits are fine.
The API was extended with the function ass_set_cache_limits which allows
modification of these limits.

15 years agoFix vertical centering (VALIGN_CENTER)
Grigori Goronzy [Sun, 19 Jul 2009 03:44:06 +0000 (05:44 +0200)]
Fix vertical centering (VALIGN_CENTER)

Match VSFilter behavior when centering non-positioned events
vertically.  Previously, libass put the event on top of the vertical
center while VSFilter centered the event evenly.  Adjust the centering
to behave like VSFilter.

15 years agoFix ascender/descender calculation for empty lines
Grigori Goronzy [Sun, 19 Jul 2009 00:59:44 +0000 (02:59 +0200)]
Fix ascender/descender calculation for empty lines

Take ascender/descender from the last valid glyph when empty lines
occur.  This makes multiple empty lines (\N\N\N etc.) work correctly.

15 years agoImprove API headers and documentation
Grigori Goronzy [Fri, 17 Jul 2009 12:39:20 +0000 (14:39 +0200)]
Improve API headers and documentation

Improve APi documentation; each function is properly documented now.
Add a new macro LIBASS_VERSION that encodes the version in a
hexadecimal format, similar to OpenSSL.  Fix formatting of the headers.

15 years agoImprove fontconfig setup
Grigori Goronzy [Fri, 17 Jul 2009 00:56:05 +0000 (02:56 +0200)]
Improve fontconfig setup

Add an argument to ass_set_fonts for controlling whether the fontconfig
font cache should be built/updated.  Add a new function ass_fonts_update
to make it possible to update fonts later on.
Additionally, stop using FcConfigSetDefault for thread safety.

15 years agoUpdate changelog again
Grigori Goronzy [Thu, 16 Jul 2009 22:36:29 +0000 (00:36 +0200)]
Update changelog again

15 years agoTweak font metrics to match Windows GDI
Grigori Goronzy [Thu, 16 Jul 2009 20:44:12 +0000 (22:44 +0200)]
Tweak font metrics to match Windows GDI

Try to change ascender/descender calculation to be more compatible
with Windows GDI and consequently, VSFilter.

15 years agoClear free list on renderer uninit
Grigori Goronzy [Thu, 16 Jul 2009 18:57:39 +0000 (20:57 +0200)]
Clear free list on renderer uninit

The vector clip support introduced a free list that gets freed on
every new frame.  Factor out the code for freeing it into a separate
function and make sure it is called when uniniting the ass_renderer.

15 years agoImplement vector clips
Grigori Goronzy [Thu, 16 Jul 2009 00:17:06 +0000 (02:17 +0200)]
Implement vector clips

Make it possible to use drawings for clipping with \clip and \iclip.
parse_tag was extended to parse drawings in \clip or \iclip tags in case
parsing them as rectangular clips fails.  These clip drawings are later
rasterized and used for blending bitmaps, just after bitmaps are
assembled into a list in render_text.  Currently, the cache is not
utilized for storing the parsed drawings or blended bitmaps.

15 years agoRework build system
Grigori Goronzy [Mon, 13 Jul 2009 20:21:51 +0000 (22:21 +0200)]
Rework build system

* Remove checks for functions or headers that are part of ANSI C
  or C89.
* Make enca optional.
* Conditionally compile the test program depending on libpng
  availability.

15 years agoOutput messages to stderr by default
Grigori Goronzy [Sun, 12 Jul 2009 21:03:46 +0000 (23:03 +0200)]
Output messages to stderr by default

Modify the default message handler to output to stderr instead of
stdout.

15 years agoProper support for empty lines
Grigori Goronzy [Sun, 12 Jul 2009 20:58:23 +0000 (22:58 +0200)]
Proper support for empty lines

Calculate the line height of empty lines the VSFilter way in
measure_text; curiously, VSFilter sets the height of an empty line
to half the height of the line before.
Remove the hack that created empty lines by inserting spaces--it was
wrong anyway.

15 years agoAllow passing user data to callback
Grigori Goronzy [Sun, 12 Jul 2009 06:01:23 +0000 (08:01 +0200)]
Allow passing user data to callback

It is often useful or necessary to pass custom data to a callback.
Add an argument to the callback registering function to pass a void
pointer object to the callback each time it is called.

15 years agoMerge glyph and outline bitmap better
Grigori Goronzy [Sun, 12 Jul 2009 05:21:52 +0000 (07:21 +0200)]
Merge glyph and outline bitmap better

Use a different threshold for merging the outline and glyph and also
adjust the merge amount.  This fails to give complete transparency (and
thus will yield slightly darker looking glyphs, usually), but avoids
very ugly looking artefacts at the edge between border and glyph that
were still prevalent.

15 years agoRedo border calculations for \be and \blur
Grigori Goronzy [Sun, 12 Jul 2009 04:56:48 +0000 (06:56 +0200)]
Redo border calculations for \be and \blur

The last commit related to this overdid it a bit -- in some cases,
with \be5, for example, edges were visible on the outlines.  Instead of
using a linear function to map \be applications to border enlargement
value, use a nonlinear function, a simple square root. This seems to
work a lot better, while keeping the enlargement small.
In addition, make it possible to use \be and \blur at the same time. \be
is applied first.

15 years agoCheck whether renderer and track use the same library instance
Grigori Goronzy [Sun, 12 Jul 2009 03:42:57 +0000 (05:42 +0200)]
Check whether renderer and track use the same library instance

Add a sanity check to ass_start_frame that checks whether the track that
is currently rendered from and the ass_renderer use the same library
instance.

15 years agoUpdates for autotools' make dist
Grigori Goronzy [Sat, 11 Jul 2009 13:12:20 +0000 (15:12 +0200)]
Updates for autotools' make dist

Rename ass_cache_template.c to ass_cache_template.h; add libass.sym to
EXTRA_DIST.

15 years agoInitial changelog update for 0.9.7
Grigori Goronzy [Sat, 11 Jul 2009 13:08:52 +0000 (15:08 +0200)]
Initial changelog update for 0.9.7

Update changelog and version number in configure.ac.

15 years agoautoconf: disable Fortran/C++ checks
Grigori Goronzy [Sat, 11 Jul 2009 01:50:41 +0000 (03:50 +0200)]
autoconf: disable Fortran/C++ checks

For some reason, libtool wants to check for Fortran and C++ compilers,
which takes some time.  Disable these checks to speed up ./configure
runs.

15 years agoAdd AM_PROG_CC_C_O to configure.ac
Grigori Goronzy [Sat, 11 Jul 2009 01:37:59 +0000 (03:37 +0200)]
Add AM_PROG_CC_C_O to configure.ac

This basically silences a automake error/warning.

15 years agoConvert test program to plain C
Grigori Goronzy [Sat, 11 Jul 2009 00:57:17 +0000 (02:57 +0200)]
Convert test program to plain C

The test program unnecessarily was using a few C++ features.  Convert it
to plain C to make everything work without a C++ compiler.

15 years agoconfigure: use pkg-config for libpng, enca
Grigori Goronzy [Sat, 11 Jul 2009 00:38:21 +0000 (02:38 +0200)]
configure: use pkg-config for libpng, enca

Use pkg-config to check for enca and libpng, like it is already done
for freetype and fontconfig.
Also, use libass/ass.c instead of the test program, test/test.cpp,
as the unique source identification.

15 years agoMessage callback funtionality
Grigori Goronzy [Sat, 11 Jul 2009 00:18:51 +0000 (02:18 +0200)]
Message callback funtionality

Introduce functionality for providing a message callback that is used
for passing messages to the controlling application instead of simply
printing them to standard output.  The function pointer to the callback
is stored in the ass_library_t instance. ass_msg needs access to it, so
in many places the library instance needs to be passed around now.

The default behavior is the old one: messages of MSGL_INFO or lower
are printed to the standard output, prefixed with "[ass]".

15 years agoReplace string defines with real strings
Grigori Goronzy [Fri, 10 Jul 2009 21:55:02 +0000 (23:55 +0200)]
Replace string defines with real strings

Instead of referencing string defines from help_mp.h, use the strings
directly in ass_msg.  Consequently, help_mp.h is useless and can
be deleted.

15 years agoMove gaussian blur into bitmap handling code
Grigori Goronzy [Fri, 10 Jul 2009 21:00:10 +0000 (23:00 +0200)]
Move gaussian blur into bitmap handling code

15 years agoSlight optimizations for \be, \blur
Grigori Goronzy [Fri, 10 Jul 2009 17:31:07 +0000 (19:31 +0200)]
Slight optimizations for \be, \blur

Enlarge bitmap glyphs less for \be, this is especially effective for
lots of \be applications.
Also make sure that the gaussian blur buffers are only updated if
gaussian blur is actually used for a particular glyph.

15 years agoUse better method for stroking with \xbord, \ybord
Grigori Goronzy [Wed, 8 Jul 2009 12:43:58 +0000 (14:43 +0200)]
Use better method for stroking with \xbord, \ybord

Instead of stroking in two passes using the regular stroker use
the outline emboldener in case different x and y stroke widths are
requested.

The regular outline stroker draws circular arcs, adding points to
the outline.  The number of points can vary according to the width
of the stroker.  This makes it impossible to reliably stroke in
two passes with it.
The outline emboldener does not produce outlines looking as nice
as the stroker outlines, but it never adds points to the outline,
making it suitable for two-pass emboldening with different x and y
width.

15 years agoCorrectly round doubles to integers
Grigori Goronzy [Tue, 7 Jul 2009 22:25:05 +0000 (00:25 +0200)]
Correctly round doubles to integers

mystrtoi and mystrtoll did not round correctly for negative numbers,
this was fixed.

15 years agoTurn down subpixel accuracy to 1/8th pixel
Grigori Goronzy [Tue, 7 Jul 2009 22:07:52 +0000 (00:07 +0200)]
Turn down subpixel accuracy to 1/8th pixel

Using the full accuracy range of 1/64th pixel seems unnecessary--1/8th
pixel is "good enough".  Mask out the three lowest bits to lower cache
and CPU usage; a short test shows that this almost halves the amount
of glyphs with different subpixel shifts being generated and cached.

15 years agoSupport for underline and strikethrough
Grigori Goronzy [Tue, 7 Jul 2009 18:25:55 +0000 (20:25 +0200)]
Support for underline and strikethrough

Add support for the underline (\u) and strikethrough/strikeout (\s)
properties.  This is a bit tricky, since FreeType doesn't offer
any method of adding the lines, so you have to draw them yourself.
libass uses various information from TrueType tables to get position
and size of the lines, does a few simple consistency checks (some fonts
might be broken) and if everything is alright, adds new contours for
the lines.

Sometimes, rendering errors can occur:
- Currently, kerning isn't taken into account, which means the lines
can overlap a little, leading to small optical glitches.
- Some (broken) fonts use the wrong winding direction.  In this case,
the FreeType stroker will only consider the added lines to be "outside"
and only stroke the line instead of the whole glyph.

15 years agoTest program: check track initialization
Grigori Goronzy [Thu, 2 Jul 2009 14:43:24 +0000 (16:43 +0200)]
Test program: check track initialization

Stop in case the track initialization fails.  This fixes a crash.

15 years agoFix crash when event format spec is missing
Grigori Goronzy [Thu, 2 Jul 2009 14:37:52 +0000 (16:37 +0200)]
Fix crash when event format spec is missing

libass didn't properly initialize its idea about the event format
specification (the Format: line in the [Events] section) in case none
was explicitly specified.  This ends in a crash due to access to a null
pointer.  It was changed so that the event format is initialized to
a reasonable default, the way it is also done for embedded subtitles.

15 years agoImplement drawing mode (\p)
Grigori Goronzy [Mon, 6 Jul 2009 02:13:24 +0000 (04:13 +0200)]
Implement drawing mode (\p)

Finally implement the drawing mode, which allows drawing of custom
vector graphics.  Drawings are intercepted in ass_render_event; a hash
of the drawing string is generated which is then used for looking
up drawings and bitmaps of drawings in the cache.  The drawings
itself are "fake" glyphs.  They are created by parsing the simple
drawing description language, evaluating the curves described (lines,
cubic beziers and/or a special kind of b-splines) and creating vector
outlines.  Afterwards, these drawings are (with a few exceptions, e.g.
ascender/descender) exactly handled like regular glyphs.

Support for vector clippings is still missing, but otherwise the
implementation should be complete and compatible with VSFilter.

The libass integration of the drawing parsing/processing code is still a
bit sketchy and should be refactored.

History:
WIP: Drawing mode infrastructure
WIP: Drawing tokenizer
WIP: Parse drawing tokens, call evaluators
WIP: Bezier/b-spline evaluator
WIP: Final pieces for the drawing mode
WIP: Heavy modifications to the drawing parser/tokenizer
WIP: Dynamic outline memory allocation
WIP: Drawing position fixes
WIP: more drawing position fixup (similar to VSFilter now)
WIP: Lots of cleanup and fixes for drawings.
WIP: Drawing mode integration into ass_render_event

15 years agoRemove read_file_recode from API
Grigori Goronzy [Wed, 1 Jul 2009 14:22:27 +0000 (16:22 +0200)]
Remove read_file_recode from API

read_file_recode is only used internally in ass_read_file and
shouldn't be exposed in the API.  Remove the prototype from ass.h
and declare it static.

15 years agoScale letter spacing with font scale
Grigori Goronzy [Wed, 1 Jul 2009 10:31:52 +0000 (12:31 +0200)]
Scale letter spacing with font scale

15 years agoScale rotation constants with font scale
Grigori Goronzy [Tue, 30 Jun 2009 22:49:28 +0000 (00:49 +0200)]
Scale rotation constants with font scale

Rotations use a "magic" constant of, by default, 20000.  This number
is more or less taken from VSFilter; I'm not even really sure what is
(viewing distance, maybe), but scaling it according to font_scale
solves problems with distortions of rotations in case the rendering
resolution differs from the video resolution.

15 years agoAssume pixel ratio equals aspect ratio
Grigori Goronzy [Tue, 30 Jun 2009 22:16:20 +0000 (00:16 +0200)]
Assume pixel ratio equals aspect ratio

In ass_set_frame_size pixel_ratio will be set alongside aspect ratio to
the same value.  This makes it possible to use libass without
explicitely specifying an aspect ratio.

15 years agoSupport for \iclip (inverse clipping)
Grigori Goronzy [Tue, 30 Jun 2009 11:39:14 +0000 (13:39 +0200)]
Support for \iclip (inverse clipping)

Inverse clipping means to display everything outside the clipping
rectangle.  It is implemented by splitting up a bitmap into up
to 4 parts, as needed by the clipping rectangle.  Afterwards, the
bitmap is clipped against the screen boundaries as usual.  Finally,
each bitmap is split up into left and right and colored different,
in case \kf karaoke is in effect.

15 years agoFix karaoke (\kf) timing
Grigori Goronzy [Tue, 30 Jun 2009 11:10:03 +0000 (13:10 +0200)]
Fix karaoke (\kf) timing

The timing for the \kf karaoke which gradually fills the character from
left to right, uses clipping and isn't aware of subpixel accuracy.  This
is simply fixed by casting these value to int.

15 years agoMove subpixel shift out of transform_3d
Grigori Goronzy [Mon, 29 Jun 2009 16:57:18 +0000 (18:57 +0200)]
Move subpixel shift out of transform_3d

Instead of adding the subpixel shift to the glyph in transform_3d, do it
directly in get_bitmap_glyph.  This saves a few cycles for glyphs that
are not transformed (rotated or sheared).

15 years agoAPI: make process_force_style available
Grigori Goronzy [Mon, 29 Jun 2009 15:22:52 +0000 (17:22 +0200)]
API: make process_force_style available

Rename process_force_style to ass_process_force_style and make it
available in the DSO.

15 years agoPAR correction for rendering at non-video resolution
Grigori Goronzy [Mon, 29 Jun 2009 15:05:44 +0000 (17:05 +0200)]
PAR correction for rendering at non-video resolution

The most prominent ASS/SSA renderer (VSFilter) conveniently ignores the
real aspect ratio, and everyone seems to rely on that.  This is fine
when the subtitles are rendered before anamorphic video is stretched
to its native aspect ratio, but results in wrongly stretched text with
native renderers (EOSD).  It can be fixed by making libass aware of
the pixel ratio of the video.  ass_set_aspect_ratio now requires an
extra argument that specifies the pixel ratio, which is just width /
height of the video after decoding.

Glyphs are stretched in x direction before transformation (rotation,
shearing), so there are still issues with transformed glyphs to be
fixed.

15 years agoRestrict symbols exported in the DSO
Grigori Goronzy [Mon, 29 Jun 2009 12:16:46 +0000 (14:16 +0200)]
Restrict symbols exported in the DSO

Only export those symbols into the shared object which are defined in
the API (ass.h).  A file libass.sym which contains a list of symbols
was added and libtool configured to use it.

15 years agoFix two-pass stroking for \xbord, \ybord
Grigori Goronzy [Mon, 29 Jun 2009 03:19:40 +0000 (05:19 +0200)]
Fix two-pass stroking for \xbord, \ybord

The two-pass stroker blindly assumed that the number of points of
the stroked glyph is the same, no matter the size of the stroker.
Unfortunately, this is not the case every time.  In such cases, the
coordinates will only be replaced up to mininum of points of both
glyphs.  It's incredibly hacky, but seems to work well (and look good).

15 years agoHandle conflicting \t time intervals
Grigori Goronzy [Mon, 29 Jun 2009 02:17:24 +0000 (04:17 +0200)]
Handle conflicting \t time intervals

If end <= start for a time interval specification, set end to the end of
the event.  VSFilter handles it like that, too.

15 years agoshift_bitmap: do not rely on compiler optimizations
Grigori Goronzy [Mon, 29 Jun 2009 00:46:45 +0000 (02:46 +0200)]
shift_bitmap: do not rely on compiler optimizations

Do not rely on the compiler for optimizing a division into a shift.

15 years agoSubpixel accurate shadow rendering
Grigori Goronzy [Mon, 29 Jun 2009 00:10:02 +0000 (02:10 +0200)]
Subpixel accurate shadow rendering

Shadows are handled different from glyph and outline.  A shadow
is the sum of glyph and outline bitmap; therefore shifting to the
correct subpixel amount before rasterization is out of the question.
Instead, the bitmap is shifted by its subpixel amount after being
built from shadow and glyph.
The bitmap cache was extended for this.

15 years agoFix subpixel shift calculation for negative coordinates
Grigori Goronzy [Sun, 28 Jun 2009 00:36:31 +0000 (02:36 +0200)]
Fix subpixel shift calculation for negative coordinates

The subpixel shift calculation was off in case the device coordinates
were negative.  This has been corrected and the calculation been
simplified.

15 years agoMake \shad, \xshad and \yshad animatable.
Grigori Goronzy [Sat, 27 Jun 2009 20:48:48 +0000 (22:48 +0200)]
Make \shad, \xshad and \yshad animatable.

15 years agoSupport \xshad and \yshad override tags
Grigori Goronzy [Sat, 27 Jun 2009 20:28:22 +0000 (22:28 +0200)]
Support \xshad and \yshad override tags

Split up shadow displacement into x and y and allow parsing of the tags
\xshad and \yshad to set it.  This makes it possible to displace a
shadow differently in x and y direction.

15 years agoSupport \xbord and \ybord override tags
Grigori Goronzy [Sat, 27 Jun 2009 20:06:32 +0000 (22:06 +0200)]
Support \xbord and \ybord override tags

Improve get_outline_glyph with a second pass which can be used for
stroking with different width in x and y direction.  This is done
by first stroking in y direction, and if the stroke size for the x
direction differs, stroking a copy of the glyph in x direction again.
The x coordinates of the first stroker result are afterwards replaced
by the coordinates of the second stroking.
The cache hash keys for bitmaps and glyphs have been extended to carry
the new properties.

15 years agoFix memory leak in render_overlap
Grigori Goronzy [Sat, 27 Jun 2009 13:20:28 +0000 (15:20 +0200)]
Fix memory leak in render_overlap

render_overlap allocated memory for its hashmap key and values on the
heap, relying on the cache cleanup to free them.  However, these
pointers are not directly inserted into the cache, but memcpy()'ed in
hashmap_insert, leading to a pretty bad memory leak.
Allocate the key and value on the stack instead to fix this problem.

15 years agoFix strdup() string leaks
Grigori Goronzy [Sat, 27 Jun 2009 13:02:13 +0000 (15:02 +0200)]
Fix strdup() string leaks

On two occassions strings where strdup()'ed but never freed.  Fix these
two small memory leaks.

15 years agoMake \fax and \fay animatable.
Grigori Goronzy [Sat, 27 Jun 2009 12:26:15 +0000 (14:26 +0200)]
Make \fax and \fay animatable.

15 years agoFix rotation and subpixel placement
Grigori Goronzy [Sat, 27 Jun 2009 12:21:53 +0000 (14:21 +0200)]
Fix rotation and subpixel placement

Add subpixel shift to the points after rotation transformations to fix
rotations and subpixel accuracy.

15 years agoInclude ass_utils.h instead of mputils.h
Grigori Goronzy [Sat, 27 Jun 2009 04:52:26 +0000 (06:52 +0200)]
Include ass_utils.h instead of mputils.h

15 years agoIncorporate mputils.c into ass_utils.c
Grigori Goronzy [Sat, 27 Jun 2009 04:31:45 +0000 (06:31 +0200)]
Incorporate mputils.c into ass_utils.c

Move helper functions originating from MPlayer into ass_utils.c.
Remove some debugging code that is #if 0'ed for ages now.  Delete
mputils.c and mputils.h and remove them from the build system.

15 years agoCosmetics: minor cleanup in ass_render_events
Grigori Goronzy [Sat, 27 Jun 2009 04:11:59 +0000 (06:11 +0200)]
Cosmetics: minor cleanup in ass_render_events

15 years agoCosmetics: fix a few remaining declarations
Grigori Goronzy [Sat, 27 Jun 2009 04:10:07 +0000 (06:10 +0200)]
Cosmetics: fix a few remaining declarations

Fix formatting of a few remaining declarations missed in the first
cleanup.

15 years agoRename various non-static functions
Grigori Goronzy [Sat, 27 Jun 2009 03:54:26 +0000 (05:54 +0200)]
Rename various non-static functions

Rename a few functions to avoid symbol clashes.
Clean up mputils.h.

15 years agoRename mp_msg to ass_msg
Grigori Goronzy [Sat, 27 Jun 2009 03:45:02 +0000 (05:45 +0200)]
Rename mp_msg to ass_msg

15 years agoAdd standard GPL header to mputils.c
Grigori Goronzy [Sat, 27 Jun 2009 03:35:11 +0000 (05:35 +0200)]
Add standard GPL header to mputils.c

15 years agoImprove positioning for full subpixel accuracy
Grigori Goronzy [Sat, 27 Jun 2009 04:38:49 +0000 (06:38 +0200)]
Improve positioning for full subpixel accuracy

Completely overhaul positioning for full subpixel accuracy (as much as
FreeType offers, 1/64 pixel) for all positioning/typesetting related
calculations and the final rendering.
Positions are now calculated with doubles.  FreeType uses a fixed-point
26.6 representation internally.  Where needed, these are converted into
double values as well.
Finally, for the on-screen rendering, a subpixel shift for the
rasterization is calculated (bitmaps cannot be rendered onto the video
with subpixel accuracy).

15 years agoTest program: nicer-looking background
Grigori Goronzy [Wed, 24 Jun 2009 22:05:04 +0000 (00:05 +0200)]
Test program: nicer-looking background

Use a uniformly colored background in the test program. This looks
better than the randomly-looking pattern that was used before.
A chessboard pattern would be even better, but this will do for now.

15 years agoCorrect vertical glyph positioning for \fay
Grigori Goronzy [Wed, 24 Jun 2009 21:48:05 +0000 (23:48 +0200)]
Correct vertical glyph positioning for \fay

Offset the next glyph by the total shear of the glyph before.
This is done before line-wrapping, so that a line that is vertically
sheared will get as much higher, as it is sheared. Fine by me, but
vsfilter probably does it in a different way.

15 years agoInitial support for \fax, \fay override tags
greg [Tue, 23 Jun 2009 00:55:04 +0000 (02:55 +0200)]
Initial support for \fax, \fay override tags

This adds support for the \fax and \fay override tags which can be used
for shearing the text horizontally and vertically. At the moment, this
works correctly on a per-glyph basis, however, the glyph positioning is
wrong, which is especially evident with \fay.

15 years agoUse safe hash functions for composite bitmaps
Uoti Urpala [Fri, 19 Jun 2009 16:26:36 +0000 (19:26 +0300)]
Use safe hash functions for composite bitmaps

Previously the composite bitmap hash keys were compared and hashed
based on all the bytes in the struct, which could cause problems
because of padding bytes. Change the code to use field-by-field
operations as already done for other hash key types.

The composite hash key contains two bitmap hash keys. The hashing
function currently handles those by calling the function to calculate
the corresponding bitmap hash, and then updating the composite hash by
treating the result of the function call as a byte buffer. An
alternative would be to change the hash functions so that the initial
hash value could be passed as a parameter to the recursively called
function.

15 years agoass_cache_template.c: Undo automatic reindent for this file
Uoti Urpala [Fri, 19 Jun 2009 16:23:53 +0000 (19:23 +0300)]
ass_cache_template.c: Undo automatic reindent for this file

The 'indent' program does not understand the macro trickery in this
file and the result was clearly worse than the original.

15 years agoAdd hack to support empty lines of text
greg [Fri, 19 Jun 2009 05:34:03 +0000 (07:34 +0200)]
Add hack to support empty lines of text

Consecutive forced breaks (\N\N) can be used to create empty lines of
text in other renderers. This doesn't work with the current text
layouter (wrap_lines_smart). This hack inserts a space glyph between two
consecutive forced breaks to get around this limitation.

15 years agoRemove static variable modifier in sub_recode
greg [Fri, 19 Jun 2009 04:30:49 +0000 (06:30 +0200)]
Remove static variable modifier in sub_recode

A variable was needlessly static, this has been corrected.

15 years agoass_set_fonts: optionally pass fontconfig config path
greg [Fri, 19 Jun 2009 04:04:45 +0000 (06:04 +0200)]
ass_set_fonts: optionally pass fontconfig config path

Optionally pass a fontconfig config file to the fontconfig
initialisation.

This changes the public API.

15 years agoRemove wrappers for ass_set_fonts
greg [Fri, 19 Jun 2009 03:33:40 +0000 (05:33 +0200)]
Remove wrappers for ass_set_fonts

ass_set_fonts_ was wrapped through ass_set_fonts and ass_set_fonts_nofc
to either use fontconfig or not. This is not very useful, since a simple
parameter to ass_set_fonts_ can be used instead. Remove the wrapper
functions and rename the real function to ass_set_fonts.

This changes the public API.

15 years agoSilence warnings introduced by -Wall
greg [Thu, 18 Jun 2009 18:48:23 +0000 (20:48 +0200)]
Silence warnings introduced by -Wall

Silence a few warnings that should be harmless and were introduced by
the -Wall option.

15 years agoAdd -Wall to CFLAGS
greg [Thu, 18 Jun 2009 18:44:12 +0000 (20:44 +0200)]
Add -Wall to CFLAGS

15 years agoReplace manual fixed-point conversion
greg [Thu, 18 Jun 2009 16:20:09 +0000 (18:20 +0200)]
Replace manual fixed-point conversion

Replace a manual fixed-point conversion to d16 by conversion function.

15 years agoReindent all source code.
greg [Thu, 18 Jun 2009 15:54:08 +0000 (17:54 +0200)]
Reindent all source code.

Reindent complete source code (*.c, *.h) with indent, the exact command
line being:
indent -kr -i4 -bap -nut -l76 *.c *.h

From now on, new code should use (more or less) K&R style,
only spaces and no tabs, 4 spaces indent width. Avoid long lines.

Fix function declaration pointer spacing.

Remove spaces that were added to many function declarations by indent,
like some_func(foo_t * bar).
Fix indenting of macros in ass.c

15 years agoAdd .gitignore
greg [Thu, 18 Jun 2009 15:12:06 +0000 (17:12 +0200)]
Add .gitignore

Ignore all objects, binaries and autotools files.

15 years agoDo not print message level of a string (bloats output) and change the
greg [Thu, 18 Jun 2009 12:41:02 +0000 (14:41 +0200)]
Do not print message level of a string (bloats output) and change the
message level to MSGL_INFO.

15 years agoFix up glyph stroker to avoid buggy rendering.
greg [Thu, 18 Jun 2009 12:16:07 +0000 (14:16 +0200)]
Fix up glyph stroker to avoid buggy rendering.
This adds pre-processing to the stroker which removes certain contours
that'd lead to areas wrongly getting not filled. The approach is very
simple, but works well enough for most cases.

15 years agoSet a more reasonable maximum blur radius and make \blur animatable.
greg [Thu, 18 Jun 2009 12:15:12 +0000 (14:15 +0200)]
Set a more reasonable maximum blur radius and make \blur animatable.

15 years agoEnlarge glyph size more for \blur to avoid artefacts.
greg [Thu, 18 Jun 2009 12:14:35 +0000 (14:14 +0200)]
Enlarge glyph size more for \blur to avoid artefacts.