osd: use libass for OSD rendering
The OSD will now be rendered with libass. The old rendering code, which
used freetype/fontconfig and did text layout manually, is disabled. To
re-enable the old code, use the --disable-libass-osd configure switch.
Some switches do nothing with the new code enabled, such as -subalign,
-sub-bg-alpha, -sub-bg-color, and many more. (The reason is mostly that
the code for rendering unstyled subtitles with libass doesn't make any
attempts to support them. Some of them could be supported in theory.)
Teletext rendering is not implemented in the new OSD rendering code. I
don't have any teletext sources for testing, and since teletext is
being phased out world-wide, the need for this is questionable.
Note that rendering is extremely inefficient, mostly because the libass
output is blended with the extremely strange mplayer OSD format. This
could be improved at a later point.
Remove most OSD rendering from vo_aa.c, because that was extremely
hacky, can't be made work with osd_libass, and didn't work anyway in
my tests.
Internally, some cleanup is done. Subtitle and OSD related variable
declarations were literally all over the place. Move them to sub.h and
sub.c, which were hoarding most of these declarations already. Make the
player core in mplayer.c free of concerns like bitmap font loading.
The old OSD rendering code has been moved to osd_ft.c. The font_load.c
and font_load_ft.c are only needed and compiled if the old OSD
rendering code is configured.
2012-03-22 06:26:37 +01:00
|
|
|
/*
|
2015-04-13 09:36:54 +02:00
|
|
|
* This file is part of mpv.
|
osd: use libass for OSD rendering
The OSD will now be rendered with libass. The old rendering code, which
used freetype/fontconfig and did text layout manually, is disabled. To
re-enable the old code, use the --disable-libass-osd configure switch.
Some switches do nothing with the new code enabled, such as -subalign,
-sub-bg-alpha, -sub-bg-color, and many more. (The reason is mostly that
the code for rendering unstyled subtitles with libass doesn't make any
attempts to support them. Some of them could be supported in theory.)
Teletext rendering is not implemented in the new OSD rendering code. I
don't have any teletext sources for testing, and since teletext is
being phased out world-wide, the need for this is questionable.
Note that rendering is extremely inefficient, mostly because the libass
output is blended with the extremely strange mplayer OSD format. This
could be improved at a later point.
Remove most OSD rendering from vo_aa.c, because that was extremely
hacky, can't be made work with osd_libass, and didn't work anyway in
my tests.
Internally, some cleanup is done. Subtitle and OSD related variable
declarations were literally all over the place. Move them to sub.h and
sub.c, which were hoarding most of these declarations already. Make the
player core in mplayer.c free of concerns like bitmap font loading.
The old OSD rendering code has been moved to osd_ft.c. The font_load.c
and font_load_ft.c are only needed and compiled if the old OSD
rendering code is configured.
2012-03-22 06:26:37 +01:00
|
|
|
*
|
Relicense some non-MPlayer source files to LGPL 2.1 or later
This covers source files which were added in mplayer2 and mpv times
only, and where all code is covered by LGPL relicensing agreements.
There are probably more files to which this applies, but I'm being
conservative here.
A file named ao_sdl.c exists in MPlayer too, but the mpv one is a
complete rewrite, and was added some time after the original ao_sdl.c
was removed. The same applies to vo_sdl.c, for which the SDL2 API is
radically different in addition (MPlayer supports SDL 1.2 only).
common.c contains only code written by me. But common.h is a strange
case: although it originally was named mp_common.h and exists in MPlayer
too, by now it contains only definitions written by uau and me. The
exceptions are the CONTROL_ defines - thus not changing the license of
common.h yet.
codec_tags.c contained once large tables generated from MPlayer's
codecs.conf, but all of these tables were removed.
From demux_playlist.c I'm removing a code fragment from someone who was
not asked; this probably could be done later (see commit 15dccc37).
misc.c is a bit complicated to reason about (it was split off mplayer.c
and thus contains random functions out of this file), but actually all
functions have been added post-MPlayer. Except get_relative_time(),
which was written by uau, but looks similar to 3 different versions of
something similar in each of the Unix/win32/OSX timer source files. I'm
not sure what that means in regards to copyright, so I've just moved it
into another still-GPL source file for now.
screenshot.c once had some minor parts of MPlayer's vf_screenshot.c, but
they're all gone.
2016-01-19 18:36:06 +01:00
|
|
|
* mpv is free software; you can redistribute it and/or
|
|
|
|
* modify it under the terms of the GNU Lesser General Public
|
|
|
|
* License as published by the Free Software Foundation; either
|
|
|
|
* version 2.1 of the License, or (at your option) any later version.
|
osd: use libass for OSD rendering
The OSD will now be rendered with libass. The old rendering code, which
used freetype/fontconfig and did text layout manually, is disabled. To
re-enable the old code, use the --disable-libass-osd configure switch.
Some switches do nothing with the new code enabled, such as -subalign,
-sub-bg-alpha, -sub-bg-color, and many more. (The reason is mostly that
the code for rendering unstyled subtitles with libass doesn't make any
attempts to support them. Some of them could be supported in theory.)
Teletext rendering is not implemented in the new OSD rendering code. I
don't have any teletext sources for testing, and since teletext is
being phased out world-wide, the need for this is questionable.
Note that rendering is extremely inefficient, mostly because the libass
output is blended with the extremely strange mplayer OSD format. This
could be improved at a later point.
Remove most OSD rendering from vo_aa.c, because that was extremely
hacky, can't be made work with osd_libass, and didn't work anyway in
my tests.
Internally, some cleanup is done. Subtitle and OSD related variable
declarations were literally all over the place. Move them to sub.h and
sub.c, which were hoarding most of these declarations already. Make the
player core in mplayer.c free of concerns like bitmap font loading.
The old OSD rendering code has been moved to osd_ft.c. The font_load.c
and font_load_ft.c are only needed and compiled if the old OSD
rendering code is configured.
2012-03-22 06:26:37 +01:00
|
|
|
*
|
2015-04-13 09:36:54 +02:00
|
|
|
* mpv is distributed in the hope that it will be useful,
|
osd: use libass for OSD rendering
The OSD will now be rendered with libass. The old rendering code, which
used freetype/fontconfig and did text layout manually, is disabled. To
re-enable the old code, use the --disable-libass-osd configure switch.
Some switches do nothing with the new code enabled, such as -subalign,
-sub-bg-alpha, -sub-bg-color, and many more. (The reason is mostly that
the code for rendering unstyled subtitles with libass doesn't make any
attempts to support them. Some of them could be supported in theory.)
Teletext rendering is not implemented in the new OSD rendering code. I
don't have any teletext sources for testing, and since teletext is
being phased out world-wide, the need for this is questionable.
Note that rendering is extremely inefficient, mostly because the libass
output is blended with the extremely strange mplayer OSD format. This
could be improved at a later point.
Remove most OSD rendering from vo_aa.c, because that was extremely
hacky, can't be made work with osd_libass, and didn't work anyway in
my tests.
Internally, some cleanup is done. Subtitle and OSD related variable
declarations were literally all over the place. Move them to sub.h and
sub.c, which were hoarding most of these declarations already. Make the
player core in mplayer.c free of concerns like bitmap font loading.
The old OSD rendering code has been moved to osd_ft.c. The font_load.c
and font_load_ft.c are only needed and compiled if the old OSD
rendering code is configured.
2012-03-22 06:26:37 +01:00
|
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
Relicense some non-MPlayer source files to LGPL 2.1 or later
This covers source files which were added in mplayer2 and mpv times
only, and where all code is covered by LGPL relicensing agreements.
There are probably more files to which this applies, but I'm being
conservative here.
A file named ao_sdl.c exists in MPlayer too, but the mpv one is a
complete rewrite, and was added some time after the original ao_sdl.c
was removed. The same applies to vo_sdl.c, for which the SDL2 API is
radically different in addition (MPlayer supports SDL 1.2 only).
common.c contains only code written by me. But common.h is a strange
case: although it originally was named mp_common.h and exists in MPlayer
too, by now it contains only definitions written by uau and me. The
exceptions are the CONTROL_ defines - thus not changing the license of
common.h yet.
codec_tags.c contained once large tables generated from MPlayer's
codecs.conf, but all of these tables were removed.
From demux_playlist.c I'm removing a code fragment from someone who was
not asked; this probably could be done later (see commit 15dccc37).
misc.c is a bit complicated to reason about (it was split off mplayer.c
and thus contains random functions out of this file), but actually all
functions have been added post-MPlayer. Except get_relative_time(),
which was written by uau, but looks similar to 3 different versions of
something similar in each of the Unix/win32/OSX timer source files. I'm
not sure what that means in regards to copyright, so I've just moved it
into another still-GPL source file for now.
screenshot.c once had some minor parts of MPlayer's vf_screenshot.c, but
they're all gone.
2016-01-19 18:36:06 +01:00
|
|
|
* GNU Lesser General Public License for more details.
|
osd: use libass for OSD rendering
The OSD will now be rendered with libass. The old rendering code, which
used freetype/fontconfig and did text layout manually, is disabled. To
re-enable the old code, use the --disable-libass-osd configure switch.
Some switches do nothing with the new code enabled, such as -subalign,
-sub-bg-alpha, -sub-bg-color, and many more. (The reason is mostly that
the code for rendering unstyled subtitles with libass doesn't make any
attempts to support them. Some of them could be supported in theory.)
Teletext rendering is not implemented in the new OSD rendering code. I
don't have any teletext sources for testing, and since teletext is
being phased out world-wide, the need for this is questionable.
Note that rendering is extremely inefficient, mostly because the libass
output is blended with the extremely strange mplayer OSD format. This
could be improved at a later point.
Remove most OSD rendering from vo_aa.c, because that was extremely
hacky, can't be made work with osd_libass, and didn't work anyway in
my tests.
Internally, some cleanup is done. Subtitle and OSD related variable
declarations were literally all over the place. Move them to sub.h and
sub.c, which were hoarding most of these declarations already. Make the
player core in mplayer.c free of concerns like bitmap font loading.
The old OSD rendering code has been moved to osd_ft.c. The font_load.c
and font_load_ft.c are only needed and compiled if the old OSD
rendering code is configured.
2012-03-22 06:26:37 +01:00
|
|
|
*
|
Relicense some non-MPlayer source files to LGPL 2.1 or later
This covers source files which were added in mplayer2 and mpv times
only, and where all code is covered by LGPL relicensing agreements.
There are probably more files to which this applies, but I'm being
conservative here.
A file named ao_sdl.c exists in MPlayer too, but the mpv one is a
complete rewrite, and was added some time after the original ao_sdl.c
was removed. The same applies to vo_sdl.c, for which the SDL2 API is
radically different in addition (MPlayer supports SDL 1.2 only).
common.c contains only code written by me. But common.h is a strange
case: although it originally was named mp_common.h and exists in MPlayer
too, by now it contains only definitions written by uau and me. The
exceptions are the CONTROL_ defines - thus not changing the license of
common.h yet.
codec_tags.c contained once large tables generated from MPlayer's
codecs.conf, but all of these tables were removed.
From demux_playlist.c I'm removing a code fragment from someone who was
not asked; this probably could be done later (see commit 15dccc37).
misc.c is a bit complicated to reason about (it was split off mplayer.c
and thus contains random functions out of this file), but actually all
functions have been added post-MPlayer. Except get_relative_time(),
which was written by uau, but looks similar to 3 different versions of
something similar in each of the Unix/win32/OSX timer source files. I'm
not sure what that means in regards to copyright, so I've just moved it
into another still-GPL source file for now.
screenshot.c once had some minor parts of MPlayer's vf_screenshot.c, but
they're all gone.
2016-01-19 18:36:06 +01:00
|
|
|
* You should have received a copy of the GNU Lesser General Public
|
|
|
|
* License along with mpv. If not, see <http://www.gnu.org/licenses/>.
|
osd: use libass for OSD rendering
The OSD will now be rendered with libass. The old rendering code, which
used freetype/fontconfig and did text layout manually, is disabled. To
re-enable the old code, use the --disable-libass-osd configure switch.
Some switches do nothing with the new code enabled, such as -subalign,
-sub-bg-alpha, -sub-bg-color, and many more. (The reason is mostly that
the code for rendering unstyled subtitles with libass doesn't make any
attempts to support them. Some of them could be supported in theory.)
Teletext rendering is not implemented in the new OSD rendering code. I
don't have any teletext sources for testing, and since teletext is
being phased out world-wide, the need for this is questionable.
Note that rendering is extremely inefficient, mostly because the libass
output is blended with the extremely strange mplayer OSD format. This
could be improved at a later point.
Remove most OSD rendering from vo_aa.c, because that was extremely
hacky, can't be made work with osd_libass, and didn't work anyway in
my tests.
Internally, some cleanup is done. Subtitle and OSD related variable
declarations were literally all over the place. Move them to sub.h and
sub.c, which were hoarding most of these declarations already. Make the
player core in mplayer.c free of concerns like bitmap font loading.
The old OSD rendering code has been moved to osd_ft.c. The font_load.c
and font_load_ft.c are only needed and compiled if the old OSD
rendering code is configured.
2012-03-22 06:26:37 +01:00
|
|
|
*/
|
|
|
|
|
|
|
|
#include <stdio.h>
|
|
|
|
#include <stdlib.h>
|
|
|
|
#include <string.h>
|
|
|
|
#include <assert.h>
|
|
|
|
|
2013-02-16 22:51:10 +01:00
|
|
|
#include <libavutil/common.h>
|
|
|
|
|
osd: use libass for OSD rendering
The OSD will now be rendered with libass. The old rendering code, which
used freetype/fontconfig and did text layout manually, is disabled. To
re-enable the old code, use the --disable-libass-osd configure switch.
Some switches do nothing with the new code enabled, such as -subalign,
-sub-bg-alpha, -sub-bg-color, and many more. (The reason is mostly that
the code for rendering unstyled subtitles with libass doesn't make any
attempts to support them. Some of them could be supported in theory.)
Teletext rendering is not implemented in the new OSD rendering code. I
don't have any teletext sources for testing, and since teletext is
being phased out world-wide, the need for this is questionable.
Note that rendering is extremely inefficient, mostly because the libass
output is blended with the extremely strange mplayer OSD format. This
could be improved at a later point.
Remove most OSD rendering from vo_aa.c, because that was extremely
hacky, can't be made work with osd_libass, and didn't work anyway in
my tests.
Internally, some cleanup is done. Subtitle and OSD related variable
declarations were literally all over the place. Move them to sub.h and
sub.c, which were hoarding most of these declarations already. Make the
player core in mplayer.c free of concerns like bitmap font loading.
The old OSD rendering code has been moved to osd_ft.c. The font_load.c
and font_load_ft.c are only needed and compiled if the old OSD
rendering code is configured.
2012-03-22 06:26:37 +01:00
|
|
|
#include "config.h"
|
|
|
|
|
2016-01-11 19:03:40 +01:00
|
|
|
#include "mpv_talloc.h"
|
2014-08-29 12:09:04 +02:00
|
|
|
#include "misc/bstr.h"
|
2013-12-17 02:39:45 +01:00
|
|
|
#include "common/common.h"
|
|
|
|
#include "common/msg.h"
|
2013-11-24 12:58:06 +01:00
|
|
|
#include "osd.h"
|
2014-01-18 01:19:20 +01:00
|
|
|
#include "osd_state.h"
|
osd: use libass for OSD rendering
The OSD will now be rendered with libass. The old rendering code, which
used freetype/fontconfig and did text layout manually, is disabled. To
re-enable the old code, use the --disable-libass-osd configure switch.
Some switches do nothing with the new code enabled, such as -subalign,
-sub-bg-alpha, -sub-bg-color, and many more. (The reason is mostly that
the code for rendering unstyled subtitles with libass doesn't make any
attempts to support them. Some of them could be supported in theory.)
Teletext rendering is not implemented in the new OSD rendering code. I
don't have any teletext sources for testing, and since teletext is
being phased out world-wide, the need for this is questionable.
Note that rendering is extremely inefficient, mostly because the libass
output is blended with the extremely strange mplayer OSD format. This
could be improved at a later point.
Remove most OSD rendering from vo_aa.c, because that was extremely
hacky, can't be made work with osd_libass, and didn't work anyway in
my tests.
Internally, some cleanup is done. Subtitle and OSD related variable
declarations were literally all over the place. Move them to sub.h and
sub.c, which were hoarding most of these declarations already. Make the
player core in mplayer.c free of concerns like bitmap font loading.
The old OSD rendering code has been moved to osd_ft.c. The font_load.c
and font_load_ft.c are only needed and compiled if the old OSD
rendering code is configured.
2012-03-22 06:26:37 +01:00
|
|
|
|
2012-07-28 23:03:19 +02:00
|
|
|
static const char osd_font_pfb[] =
|
osd: use libass for OSD rendering
The OSD will now be rendered with libass. The old rendering code, which
used freetype/fontconfig and did text layout manually, is disabled. To
re-enable the old code, use the --disable-libass-osd configure switch.
Some switches do nothing with the new code enabled, such as -subalign,
-sub-bg-alpha, -sub-bg-color, and many more. (The reason is mostly that
the code for rendering unstyled subtitles with libass doesn't make any
attempts to support them. Some of them could be supported in theory.)
Teletext rendering is not implemented in the new OSD rendering code. I
don't have any teletext sources for testing, and since teletext is
being phased out world-wide, the need for this is questionable.
Note that rendering is extremely inefficient, mostly because the libass
output is blended with the extremely strange mplayer OSD format. This
could be improved at a later point.
Remove most OSD rendering from vo_aa.c, because that was extremely
hacky, can't be made work with osd_libass, and didn't work anyway in
my tests.
Internally, some cleanup is done. Subtitle and OSD related variable
declarations were literally all over the place. Move them to sub.h and
sub.c, which were hoarding most of these declarations already. Make the
player core in mplayer.c free of concerns like bitmap font loading.
The old OSD rendering code has been moved to osd_ft.c. The font_load.c
and font_load_ft.c are only needed and compiled if the old OSD
rendering code is configured.
2012-03-22 06:26:37 +01:00
|
|
|
#include "sub/osd_font.h"
|
2012-07-28 23:03:19 +02:00
|
|
|
;
|
osd: use libass for OSD rendering
The OSD will now be rendered with libass. The old rendering code, which
used freetype/fontconfig and did text layout manually, is disabled. To
re-enable the old code, use the --disable-libass-osd configure switch.
Some switches do nothing with the new code enabled, such as -subalign,
-sub-bg-alpha, -sub-bg-color, and many more. (The reason is mostly that
the code for rendering unstyled subtitles with libass doesn't make any
attempts to support them. Some of them could be supported in theory.)
Teletext rendering is not implemented in the new OSD rendering code. I
don't have any teletext sources for testing, and since teletext is
being phased out world-wide, the need for this is questionable.
Note that rendering is extremely inefficient, mostly because the libass
output is blended with the extremely strange mplayer OSD format. This
could be improved at a later point.
Remove most OSD rendering from vo_aa.c, because that was extremely
hacky, can't be made work with osd_libass, and didn't work anyway in
my tests.
Internally, some cleanup is done. Subtitle and OSD related variable
declarations were literally all over the place. Move them to sub.h and
sub.c, which were hoarding most of these declarations already. Make the
player core in mplayer.c free of concerns like bitmap font loading.
The old OSD rendering code has been moved to osd_ft.c. The font_load.c
and font_load_ft.c are only needed and compiled if the old OSD
rendering code is configured.
2012-03-22 06:26:37 +01:00
|
|
|
|
|
|
|
#include "sub/ass_mp.h"
|
2013-12-17 02:02:25 +01:00
|
|
|
#include "options/options.h"
|
osd: use libass for OSD rendering
The OSD will now be rendered with libass. The old rendering code, which
used freetype/fontconfig and did text layout manually, is disabled. To
re-enable the old code, use the --disable-libass-osd configure switch.
Some switches do nothing with the new code enabled, such as -subalign,
-sub-bg-alpha, -sub-bg-color, and many more. (The reason is mostly that
the code for rendering unstyled subtitles with libass doesn't make any
attempts to support them. Some of them could be supported in theory.)
Teletext rendering is not implemented in the new OSD rendering code. I
don't have any teletext sources for testing, and since teletext is
being phased out world-wide, the need for this is questionable.
Note that rendering is extremely inefficient, mostly because the libass
output is blended with the extremely strange mplayer OSD format. This
could be improved at a later point.
Remove most OSD rendering from vo_aa.c, because that was extremely
hacky, can't be made work with osd_libass, and didn't work anyway in
my tests.
Internally, some cleanup is done. Subtitle and OSD related variable
declarations were literally all over the place. Move them to sub.h and
sub.c, which were hoarding most of these declarations already. Make the
player core in mplayer.c free of concerns like bitmap font loading.
The old OSD rendering code has been moved to osd_ft.c. The font_load.c
and font_load_ft.c are only needed and compiled if the old OSD
rendering code is configured.
2012-03-22 06:26:37 +01:00
|
|
|
|
|
|
|
|
2013-05-14 19:14:09 +02:00
|
|
|
#define ASS_USE_OSD_FONT "{\\fnmpv-osd-symbols}"
|
osd: use libass for OSD rendering
The OSD will now be rendered with libass. The old rendering code, which
used freetype/fontconfig and did text layout manually, is disabled. To
re-enable the old code, use the --disable-libass-osd configure switch.
Some switches do nothing with the new code enabled, such as -subalign,
-sub-bg-alpha, -sub-bg-color, and many more. (The reason is mostly that
the code for rendering unstyled subtitles with libass doesn't make any
attempts to support them. Some of them could be supported in theory.)
Teletext rendering is not implemented in the new OSD rendering code. I
don't have any teletext sources for testing, and since teletext is
being phased out world-wide, the need for this is questionable.
Note that rendering is extremely inefficient, mostly because the libass
output is blended with the extremely strange mplayer OSD format. This
could be improved at a later point.
Remove most OSD rendering from vo_aa.c, because that was extremely
hacky, can't be made work with osd_libass, and didn't work anyway in
my tests.
Internally, some cleanup is done. Subtitle and OSD related variable
declarations were literally all over the place. Move them to sub.h and
sub.c, which were hoarding most of these declarations already. Make the
player core in mplayer.c free of concerns like bitmap font loading.
The old OSD rendering code has been moved to osd_ft.c. The font_load.c
and font_load_ft.c are only needed and compiled if the old OSD
rendering code is configured.
2012-03-22 06:26:37 +01:00
|
|
|
|
|
|
|
void osd_init_backend(struct osd_state *osd)
|
|
|
|
{
|
2013-12-15 15:04:49 +01:00
|
|
|
}
|
|
|
|
|
2016-03-08 21:29:29 +01:00
|
|
|
static void create_ass_renderer(struct osd_state *osd, struct ass_state *ass)
|
2013-12-15 15:04:49 +01:00
|
|
|
{
|
2016-03-08 21:29:29 +01:00
|
|
|
if (ass->render)
|
2013-12-15 15:04:49 +01:00
|
|
|
return;
|
|
|
|
|
2016-03-08 21:29:29 +01:00
|
|
|
ass->log = mp_log_new(NULL, osd->log, "libass");
|
|
|
|
ass->library = mp_ass_init(osd->global, ass->log);
|
|
|
|
ass_add_font(ass->library, "mpv-osd-symbols", (void *)osd_font_pfb,
|
2012-07-28 23:03:19 +02:00
|
|
|
sizeof(osd_font_pfb) - 1);
|
osd: use libass for OSD rendering
The OSD will now be rendered with libass. The old rendering code, which
used freetype/fontconfig and did text layout manually, is disabled. To
re-enable the old code, use the --disable-libass-osd configure switch.
Some switches do nothing with the new code enabled, such as -subalign,
-sub-bg-alpha, -sub-bg-color, and many more. (The reason is mostly that
the code for rendering unstyled subtitles with libass doesn't make any
attempts to support them. Some of them could be supported in theory.)
Teletext rendering is not implemented in the new OSD rendering code. I
don't have any teletext sources for testing, and since teletext is
being phased out world-wide, the need for this is questionable.
Note that rendering is extremely inefficient, mostly because the libass
output is blended with the extremely strange mplayer OSD format. This
could be improved at a later point.
Remove most OSD rendering from vo_aa.c, because that was extremely
hacky, can't be made work with osd_libass, and didn't work anyway in
my tests.
Internally, some cleanup is done. Subtitle and OSD related variable
declarations were literally all over the place. Move them to sub.h and
sub.c, which were hoarding most of these declarations already. Make the
player core in mplayer.c free of concerns like bitmap font loading.
The old OSD rendering code has been moved to osd_ft.c. The font_load.c
and font_load_ft.c are only needed and compiled if the old OSD
rendering code is configured.
2012-03-22 06:26:37 +01:00
|
|
|
|
2016-03-08 21:29:29 +01:00
|
|
|
ass->render = ass_renderer_init(ass->library);
|
|
|
|
if (!ass->render)
|
2013-12-15 15:04:49 +01:00
|
|
|
abort();
|
|
|
|
|
2016-03-08 21:29:29 +01:00
|
|
|
mp_ass_configure_fonts(ass->render, osd->opts->osd_style,
|
|
|
|
osd->global, ass->log);
|
|
|
|
ass_set_aspect_ratio(ass->render, 1.0, 1.0);
|
|
|
|
}
|
|
|
|
|
|
|
|
static void destroy_ass_renderer(struct ass_state *ass)
|
|
|
|
{
|
|
|
|
if (ass->track)
|
|
|
|
ass_free_track(ass->track);
|
|
|
|
ass->track = NULL;
|
|
|
|
if (ass->render)
|
|
|
|
ass_renderer_done(ass->render);
|
|
|
|
ass->render = NULL;
|
|
|
|
if (ass->library)
|
|
|
|
ass_library_done(ass->library);
|
|
|
|
ass->library = NULL;
|
|
|
|
talloc_free(ass->log);
|
|
|
|
ass->log = NULL;
|
osd: use libass for OSD rendering
The OSD will now be rendered with libass. The old rendering code, which
used freetype/fontconfig and did text layout manually, is disabled. To
re-enable the old code, use the --disable-libass-osd configure switch.
Some switches do nothing with the new code enabled, such as -subalign,
-sub-bg-alpha, -sub-bg-color, and many more. (The reason is mostly that
the code for rendering unstyled subtitles with libass doesn't make any
attempts to support them. Some of them could be supported in theory.)
Teletext rendering is not implemented in the new OSD rendering code. I
don't have any teletext sources for testing, and since teletext is
being phased out world-wide, the need for this is questionable.
Note that rendering is extremely inefficient, mostly because the libass
output is blended with the extremely strange mplayer OSD format. This
could be improved at a later point.
Remove most OSD rendering from vo_aa.c, because that was extremely
hacky, can't be made work with osd_libass, and didn't work anyway in
my tests.
Internally, some cleanup is done. Subtitle and OSD related variable
declarations were literally all over the place. Move them to sub.h and
sub.c, which were hoarding most of these declarations already. Make the
player core in mplayer.c free of concerns like bitmap font loading.
The old OSD rendering code has been moved to osd_ft.c. The font_load.c
and font_load_ft.c are only needed and compiled if the old OSD
rendering code is configured.
2012-03-22 06:26:37 +01:00
|
|
|
}
|
|
|
|
|
2016-03-08 21:42:08 +01:00
|
|
|
static void destroy_external(struct osd_external *ext)
|
|
|
|
{
|
|
|
|
talloc_free(ext->text);
|
|
|
|
destroy_ass_renderer(&ext->ass);
|
|
|
|
}
|
|
|
|
|
osd: use libass for OSD rendering
The OSD will now be rendered with libass. The old rendering code, which
used freetype/fontconfig and did text layout manually, is disabled. To
re-enable the old code, use the --disable-libass-osd configure switch.
Some switches do nothing with the new code enabled, such as -subalign,
-sub-bg-alpha, -sub-bg-color, and many more. (The reason is mostly that
the code for rendering unstyled subtitles with libass doesn't make any
attempts to support them. Some of them could be supported in theory.)
Teletext rendering is not implemented in the new OSD rendering code. I
don't have any teletext sources for testing, and since teletext is
being phased out world-wide, the need for this is questionable.
Note that rendering is extremely inefficient, mostly because the libass
output is blended with the extremely strange mplayer OSD format. This
could be improved at a later point.
Remove most OSD rendering from vo_aa.c, because that was extremely
hacky, can't be made work with osd_libass, and didn't work anyway in
my tests.
Internally, some cleanup is done. Subtitle and OSD related variable
declarations were literally all over the place. Move them to sub.h and
sub.c, which were hoarding most of these declarations already. Make the
player core in mplayer.c free of concerns like bitmap font loading.
The old OSD rendering code has been moved to osd_ft.c. The font_load.c
and font_load_ft.c are only needed and compiled if the old OSD
rendering code is configured.
2012-03-22 06:26:37 +01:00
|
|
|
void osd_destroy_backend(struct osd_state *osd)
|
|
|
|
{
|
2013-04-12 19:02:58 +02:00
|
|
|
for (int n = 0; n < MAX_OSD_PARTS; n++) {
|
|
|
|
struct osd_object *obj = osd->objs[n];
|
2016-03-08 21:29:29 +01:00
|
|
|
destroy_ass_renderer(&obj->ass);
|
2016-03-08 21:42:08 +01:00
|
|
|
for (int i = 0; i < obj->num_externals; i++)
|
|
|
|
destroy_external(&obj->externals[i]);
|
|
|
|
obj->num_externals = 0;
|
2013-04-12 19:02:58 +02:00
|
|
|
}
|
osd: use libass for OSD rendering
The OSD will now be rendered with libass. The old rendering code, which
used freetype/fontconfig and did text layout manually, is disabled. To
re-enable the old code, use the --disable-libass-osd configure switch.
Some switches do nothing with the new code enabled, such as -subalign,
-sub-bg-alpha, -sub-bg-color, and many more. (The reason is mostly that
the code for rendering unstyled subtitles with libass doesn't make any
attempts to support them. Some of them could be supported in theory.)
Teletext rendering is not implemented in the new OSD rendering code. I
don't have any teletext sources for testing, and since teletext is
being phased out world-wide, the need for this is questionable.
Note that rendering is extremely inefficient, mostly because the libass
output is blended with the extremely strange mplayer OSD format. This
could be improved at a later point.
Remove most OSD rendering from vo_aa.c, because that was extremely
hacky, can't be made work with osd_libass, and didn't work anyway in
my tests.
Internally, some cleanup is done. Subtitle and OSD related variable
declarations were literally all over the place. Move them to sub.h and
sub.c, which were hoarding most of these declarations already. Make the
player core in mplayer.c free of concerns like bitmap font loading.
The old OSD rendering code has been moved to osd_ft.c. The font_load.c
and font_load_ft.c are only needed and compiled if the old OSD
rendering code is configured.
2012-03-22 06:26:37 +01:00
|
|
|
}
|
|
|
|
|
2013-12-15 15:04:49 +01:00
|
|
|
static void create_ass_track(struct osd_state *osd, struct osd_object *obj,
|
2016-03-08 21:29:29 +01:00
|
|
|
struct ass_state *ass, int res_x, int res_y)
|
osd: use libass for OSD rendering
The OSD will now be rendered with libass. The old rendering code, which
used freetype/fontconfig and did text layout manually, is disabled. To
re-enable the old code, use the --disable-libass-osd configure switch.
Some switches do nothing with the new code enabled, such as -subalign,
-sub-bg-alpha, -sub-bg-color, and many more. (The reason is mostly that
the code for rendering unstyled subtitles with libass doesn't make any
attempts to support them. Some of them could be supported in theory.)
Teletext rendering is not implemented in the new OSD rendering code. I
don't have any teletext sources for testing, and since teletext is
being phased out world-wide, the need for this is questionable.
Note that rendering is extremely inefficient, mostly because the libass
output is blended with the extremely strange mplayer OSD format. This
could be improved at a later point.
Remove most OSD rendering from vo_aa.c, because that was extremely
hacky, can't be made work with osd_libass, and didn't work anyway in
my tests.
Internally, some cleanup is done. Subtitle and OSD related variable
declarations were literally all over the place. Move them to sub.h and
sub.c, which were hoarding most of these declarations already. Make the
player core in mplayer.c free of concerns like bitmap font loading.
The old OSD rendering code has been moved to osd_ft.c. The font_load.c
and font_load_ft.c are only needed and compiled if the old OSD
rendering code is configured.
2012-03-22 06:26:37 +01:00
|
|
|
{
|
2016-03-08 21:29:29 +01:00
|
|
|
create_ass_renderer(osd, ass);
|
2013-12-15 15:04:49 +01:00
|
|
|
|
2016-03-08 21:29:29 +01:00
|
|
|
ASS_Track *track = ass->track;
|
2013-03-30 20:08:56 +01:00
|
|
|
if (!track)
|
2016-03-08 21:29:29 +01:00
|
|
|
track = ass_new_track(ass->library);
|
2013-12-15 15:04:49 +01:00
|
|
|
|
|
|
|
int old_res_x = track->PlayResX;
|
|
|
|
int old_res_y = track->PlayResY;
|
2013-03-30 20:08:56 +01:00
|
|
|
|
|
|
|
double aspect = 1.0 * obj->vo_res.w / FFMAX(obj->vo_res.h, 1) /
|
|
|
|
obj->vo_res.display_par;
|
osd: use libass for OSD rendering
The OSD will now be rendered with libass. The old rendering code, which
used freetype/fontconfig and did text layout manually, is disabled. To
re-enable the old code, use the --disable-libass-osd configure switch.
Some switches do nothing with the new code enabled, such as -subalign,
-sub-bg-alpha, -sub-bg-color, and many more. (The reason is mostly that
the code for rendering unstyled subtitles with libass doesn't make any
attempts to support them. Some of them could be supported in theory.)
Teletext rendering is not implemented in the new OSD rendering code. I
don't have any teletext sources for testing, and since teletext is
being phased out world-wide, the need for this is questionable.
Note that rendering is extremely inefficient, mostly because the libass
output is blended with the extremely strange mplayer OSD format. This
could be improved at a later point.
Remove most OSD rendering from vo_aa.c, because that was extremely
hacky, can't be made work with osd_libass, and didn't work anyway in
my tests.
Internally, some cleanup is done. Subtitle and OSD related variable
declarations were literally all over the place. Move them to sub.h and
sub.c, which were hoarding most of these declarations already. Make the
player core in mplayer.c free of concerns like bitmap font loading.
The old OSD rendering code has been moved to osd_ft.c. The font_load.c
and font_load_ft.c are only needed and compiled if the old OSD
rendering code is configured.
2012-03-22 06:26:37 +01:00
|
|
|
|
2012-11-17 20:56:45 +01:00
|
|
|
track->track_type = TRACK_TYPE_ASS;
|
|
|
|
track->Timer = 100.;
|
2013-12-15 15:04:49 +01:00
|
|
|
track->PlayResY = res_y ? res_y : MP_ASS_FONT_PLAYRESY;
|
|
|
|
track->PlayResX = res_x ? res_x : track->PlayResY * aspect;
|
2012-11-17 20:56:45 +01:00
|
|
|
track->WrapStyle = 1; // end-of-line wrapping instead of smart wrapping
|
2013-12-15 17:38:48 +01:00
|
|
|
track->Kerning = true;
|
2012-11-17 20:56:45 +01:00
|
|
|
|
2013-12-15 15:04:49 +01:00
|
|
|
// Force libass to clear its internal cache - it doesn't check for
|
|
|
|
// PlayRes changes itself.
|
|
|
|
if (old_res_x != track->PlayResX || old_res_y != track->PlayResY)
|
2016-03-08 21:29:29 +01:00
|
|
|
ass_set_frame_size(ass->render, 1, 1);
|
2013-12-15 15:04:49 +01:00
|
|
|
|
2016-03-08 21:29:29 +01:00
|
|
|
ass->track = track;
|
2015-11-29 13:50:51 +01:00
|
|
|
}
|
osd: use libass for OSD rendering
The OSD will now be rendered with libass. The old rendering code, which
used freetype/fontconfig and did text layout manually, is disabled. To
re-enable the old code, use the --disable-libass-osd configure switch.
Some switches do nothing with the new code enabled, such as -subalign,
-sub-bg-alpha, -sub-bg-color, and many more. (The reason is mostly that
the code for rendering unstyled subtitles with libass doesn't make any
attempts to support them. Some of them could be supported in theory.)
Teletext rendering is not implemented in the new OSD rendering code. I
don't have any teletext sources for testing, and since teletext is
being phased out world-wide, the need for this is questionable.
Note that rendering is extremely inefficient, mostly because the libass
output is blended with the extremely strange mplayer OSD format. This
could be improved at a later point.
Remove most OSD rendering from vo_aa.c, because that was extremely
hacky, can't be made work with osd_libass, and didn't work anyway in
my tests.
Internally, some cleanup is done. Subtitle and OSD related variable
declarations were literally all over the place. Move them to sub.h and
sub.c, which were hoarding most of these declarations already. Make the
player core in mplayer.c free of concerns like bitmap font loading.
The old OSD rendering code has been moved to osd_ft.c. The font_load.c
and font_load_ft.c are only needed and compiled if the old OSD
rendering code is configured.
2012-03-22 06:26:37 +01:00
|
|
|
|
2015-11-29 13:50:51 +01:00
|
|
|
static int find_style(ASS_Track *track, const char *name, int def)
|
|
|
|
{
|
|
|
|
for (int n = 0; n < track->n_styles; n++) {
|
|
|
|
if (track->styles[n].Name && strcmp(track->styles[n].Name, name) == 0)
|
|
|
|
return n;
|
2015-11-28 19:24:31 +01:00
|
|
|
}
|
2015-11-29 13:50:51 +01:00
|
|
|
return def;
|
|
|
|
}
|
2013-12-15 17:38:48 +01:00
|
|
|
|
2015-11-29 13:50:51 +01:00
|
|
|
// Find a given style, or add it if it's missing.
|
2016-03-08 21:29:29 +01:00
|
|
|
static ASS_Style *get_style(struct ass_state *ass, char *name)
|
2015-11-29 13:50:51 +01:00
|
|
|
{
|
2016-03-08 21:29:29 +01:00
|
|
|
ASS_Track *track = ass->track;
|
2015-11-29 13:50:51 +01:00
|
|
|
if (!track)
|
|
|
|
return NULL;
|
|
|
|
|
|
|
|
int sid = find_style(track, name, -1);
|
|
|
|
if (sid >= 0)
|
|
|
|
return &track->styles[sid];
|
|
|
|
|
|
|
|
sid = ass_alloc_style(track);
|
|
|
|
ASS_Style *style = &track->styles[sid];
|
|
|
|
style->Name = strdup(name);
|
|
|
|
// Set to neutral base direction, as opposed to VSFilter LTR default
|
|
|
|
style->Encoding = -1;
|
|
|
|
return style;
|
osd: use libass for OSD rendering
The OSD will now be rendered with libass. The old rendering code, which
used freetype/fontconfig and did text layout manually, is disabled. To
re-enable the old code, use the --disable-libass-osd configure switch.
Some switches do nothing with the new code enabled, such as -subalign,
-sub-bg-alpha, -sub-bg-color, and many more. (The reason is mostly that
the code for rendering unstyled subtitles with libass doesn't make any
attempts to support them. Some of them could be supported in theory.)
Teletext rendering is not implemented in the new OSD rendering code. I
don't have any teletext sources for testing, and since teletext is
being phased out world-wide, the need for this is questionable.
Note that rendering is extremely inefficient, mostly because the libass
output is blended with the extremely strange mplayer OSD format. This
could be improved at a later point.
Remove most OSD rendering from vo_aa.c, because that was extremely
hacky, can't be made work with osd_libass, and didn't work anyway in
my tests.
Internally, some cleanup is done. Subtitle and OSD related variable
declarations were literally all over the place. Move them to sub.h and
sub.c, which were hoarding most of these declarations already. Make the
player core in mplayer.c free of concerns like bitmap font loading.
The old OSD rendering code has been moved to osd_ft.c. The font_load.c
and font_load_ft.c are only needed and compiled if the old OSD
rendering code is configured.
2012-03-22 06:26:37 +01:00
|
|
|
}
|
|
|
|
|
2015-11-29 13:50:51 +01:00
|
|
|
static ASS_Event *add_osd_ass_event(ASS_Track *track, const char *style,
|
|
|
|
const char *text)
|
osd: use libass for OSD rendering
The OSD will now be rendered with libass. The old rendering code, which
used freetype/fontconfig and did text layout manually, is disabled. To
re-enable the old code, use the --disable-libass-osd configure switch.
Some switches do nothing with the new code enabled, such as -subalign,
-sub-bg-alpha, -sub-bg-color, and many more. (The reason is mostly that
the code for rendering unstyled subtitles with libass doesn't make any
attempts to support them. Some of them could be supported in theory.)
Teletext rendering is not implemented in the new OSD rendering code. I
don't have any teletext sources for testing, and since teletext is
being phased out world-wide, the need for this is questionable.
Note that rendering is extremely inefficient, mostly because the libass
output is blended with the extremely strange mplayer OSD format. This
could be improved at a later point.
Remove most OSD rendering from vo_aa.c, because that was extremely
hacky, can't be made work with osd_libass, and didn't work anyway in
my tests.
Internally, some cleanup is done. Subtitle and OSD related variable
declarations were literally all over the place. Move them to sub.h and
sub.c, which were hoarding most of these declarations already. Make the
player core in mplayer.c free of concerns like bitmap font loading.
The old OSD rendering code has been moved to osd_ft.c. The font_load.c
and font_load_ft.c are only needed and compiled if the old OSD
rendering code is configured.
2012-03-22 06:26:37 +01:00
|
|
|
{
|
2013-03-30 20:08:56 +01:00
|
|
|
int n = ass_alloc_event(track);
|
|
|
|
ASS_Event *event = track->events + n;
|
osd: use libass for OSD rendering
The OSD will now be rendered with libass. The old rendering code, which
used freetype/fontconfig and did text layout manually, is disabled. To
re-enable the old code, use the --disable-libass-osd configure switch.
Some switches do nothing with the new code enabled, such as -subalign,
-sub-bg-alpha, -sub-bg-color, and many more. (The reason is mostly that
the code for rendering unstyled subtitles with libass doesn't make any
attempts to support them. Some of them could be supported in theory.)
Teletext rendering is not implemented in the new OSD rendering code. I
don't have any teletext sources for testing, and since teletext is
being phased out world-wide, the need for this is questionable.
Note that rendering is extremely inefficient, mostly because the libass
output is blended with the extremely strange mplayer OSD format. This
could be improved at a later point.
Remove most OSD rendering from vo_aa.c, because that was extremely
hacky, can't be made work with osd_libass, and didn't work anyway in
my tests.
Internally, some cleanup is done. Subtitle and OSD related variable
declarations were literally all over the place. Move them to sub.h and
sub.c, which were hoarding most of these declarations already. Make the
player core in mplayer.c free of concerns like bitmap font loading.
The old OSD rendering code has been moved to osd_ft.c. The font_load.c
and font_load_ft.c are only needed and compiled if the old OSD
rendering code is configured.
2012-03-22 06:26:37 +01:00
|
|
|
event->Start = 0;
|
|
|
|
event->Duration = 100;
|
2015-11-29 13:50:51 +01:00
|
|
|
event->Style = find_style(track, style, 0);
|
2013-05-10 19:45:38 +02:00
|
|
|
event->ReadOrder = n;
|
2012-09-28 21:38:52 +02:00
|
|
|
assert(event->Text == NULL);
|
2013-03-30 20:08:56 +01:00
|
|
|
if (text)
|
|
|
|
event->Text = strdup(text);
|
osd: use libass for OSD rendering
The OSD will now be rendered with libass. The old rendering code, which
used freetype/fontconfig and did text layout manually, is disabled. To
re-enable the old code, use the --disable-libass-osd configure switch.
Some switches do nothing with the new code enabled, such as -subalign,
-sub-bg-alpha, -sub-bg-color, and many more. (The reason is mostly that
the code for rendering unstyled subtitles with libass doesn't make any
attempts to support them. Some of them could be supported in theory.)
Teletext rendering is not implemented in the new OSD rendering code. I
don't have any teletext sources for testing, and since teletext is
being phased out world-wide, the need for this is questionable.
Note that rendering is extremely inefficient, mostly because the libass
output is blended with the extremely strange mplayer OSD format. This
could be improved at a later point.
Remove most OSD rendering from vo_aa.c, because that was extremely
hacky, can't be made work with osd_libass, and didn't work anyway in
my tests.
Internally, some cleanup is done. Subtitle and OSD related variable
declarations were literally all over the place. Move them to sub.h and
sub.c, which were hoarding most of these declarations already. Make the
player core in mplayer.c free of concerns like bitmap font loading.
The old OSD rendering code has been moved to osd_ft.c. The font_load.c
and font_load_ft.c are only needed and compiled if the old OSD
rendering code is configured.
2012-03-22 06:26:37 +01:00
|
|
|
return event;
|
|
|
|
}
|
|
|
|
|
2016-03-08 21:29:29 +01:00
|
|
|
static void clear_ass(struct ass_state *ass)
|
2012-09-28 21:38:52 +02:00
|
|
|
{
|
2016-03-08 21:29:29 +01:00
|
|
|
if (ass->track)
|
|
|
|
ass_flush_events(ass->track);
|
2012-09-28 21:38:52 +02:00
|
|
|
}
|
|
|
|
|
osd: use libass for OSD rendering
The OSD will now be rendered with libass. The old rendering code, which
used freetype/fontconfig and did text layout manually, is disabled. To
re-enable the old code, use the --disable-libass-osd configure switch.
Some switches do nothing with the new code enabled, such as -subalign,
-sub-bg-alpha, -sub-bg-color, and many more. (The reason is mostly that
the code for rendering unstyled subtitles with libass doesn't make any
attempts to support them. Some of them could be supported in theory.)
Teletext rendering is not implemented in the new OSD rendering code. I
don't have any teletext sources for testing, and since teletext is
being phased out world-wide, the need for this is questionable.
Note that rendering is extremely inefficient, mostly because the libass
output is blended with the extremely strange mplayer OSD format. This
could be improved at a later point.
Remove most OSD rendering from vo_aa.c, because that was extremely
hacky, can't be made work with osd_libass, and didn't work anyway in
my tests.
Internally, some cleanup is done. Subtitle and OSD related variable
declarations were literally all over the place. Move them to sub.h and
sub.c, which were hoarding most of these declarations already. Make the
player core in mplayer.c free of concerns like bitmap font loading.
The old OSD rendering code has been moved to osd_ft.c. The font_load.c
and font_load_ft.c are only needed and compiled if the old OSD
rendering code is configured.
2012-03-22 06:26:37 +01:00
|
|
|
void osd_get_function_sym(char *buffer, size_t buffer_size, int osd_function)
|
|
|
|
{
|
|
|
|
// 0xFF is never valid UTF-8, so we can use it to escape OSD symbols.
|
2016-05-03 22:29:12 +02:00
|
|
|
// (Same trick as OSD_ASS_0/OSD_ASS_1.)
|
osd: use libass for OSD rendering
The OSD will now be rendered with libass. The old rendering code, which
used freetype/fontconfig and did text layout manually, is disabled. To
re-enable the old code, use the --disable-libass-osd configure switch.
Some switches do nothing with the new code enabled, such as -subalign,
-sub-bg-alpha, -sub-bg-color, and many more. (The reason is mostly that
the code for rendering unstyled subtitles with libass doesn't make any
attempts to support them. Some of them could be supported in theory.)
Teletext rendering is not implemented in the new OSD rendering code. I
don't have any teletext sources for testing, and since teletext is
being phased out world-wide, the need for this is questionable.
Note that rendering is extremely inefficient, mostly because the libass
output is blended with the extremely strange mplayer OSD format. This
could be improved at a later point.
Remove most OSD rendering from vo_aa.c, because that was extremely
hacky, can't be made work with osd_libass, and didn't work anyway in
my tests.
Internally, some cleanup is done. Subtitle and OSD related variable
declarations were literally all over the place. Move them to sub.h and
sub.c, which were hoarding most of these declarations already. Make the
player core in mplayer.c free of concerns like bitmap font loading.
The old OSD rendering code has been moved to osd_ft.c. The font_load.c
and font_load_ft.c are only needed and compiled if the old OSD
rendering code is configured.
2012-03-22 06:26:37 +01:00
|
|
|
snprintf(buffer, buffer_size, "\xFF%c", osd_function);
|
|
|
|
}
|
|
|
|
|
2013-12-30 22:44:25 +01:00
|
|
|
static void mangle_ass(bstr *dst, const char *in)
|
osd: use libass for OSD rendering
The OSD will now be rendered with libass. The old rendering code, which
used freetype/fontconfig and did text layout manually, is disabled. To
re-enable the old code, use the --disable-libass-osd configure switch.
Some switches do nothing with the new code enabled, such as -subalign,
-sub-bg-alpha, -sub-bg-color, and many more. (The reason is mostly that
the code for rendering unstyled subtitles with libass doesn't make any
attempts to support them. Some of them could be supported in theory.)
Teletext rendering is not implemented in the new OSD rendering code. I
don't have any teletext sources for testing, and since teletext is
being phased out world-wide, the need for this is questionable.
Note that rendering is extremely inefficient, mostly because the libass
output is blended with the extremely strange mplayer OSD format. This
could be improved at a later point.
Remove most OSD rendering from vo_aa.c, because that was extremely
hacky, can't be made work with osd_libass, and didn't work anyway in
my tests.
Internally, some cleanup is done. Subtitle and OSD related variable
declarations were literally all over the place. Move them to sub.h and
sub.c, which were hoarding most of these declarations already. Make the
player core in mplayer.c free of concerns like bitmap font loading.
The old OSD rendering code has been moved to osd_ft.c. The font_load.c
and font_load_ft.c are only needed and compiled if the old OSD
rendering code is configured.
2012-03-22 06:26:37 +01:00
|
|
|
{
|
2014-09-18 00:49:55 +02:00
|
|
|
bool escape_ass = true;
|
osd: use libass for OSD rendering
The OSD will now be rendered with libass. The old rendering code, which
used freetype/fontconfig and did text layout manually, is disabled. To
re-enable the old code, use the --disable-libass-osd configure switch.
Some switches do nothing with the new code enabled, such as -subalign,
-sub-bg-alpha, -sub-bg-color, and many more. (The reason is mostly that
the code for rendering unstyled subtitles with libass doesn't make any
attempts to support them. Some of them could be supported in theory.)
Teletext rendering is not implemented in the new OSD rendering code. I
don't have any teletext sources for testing, and since teletext is
being phased out world-wide, the need for this is questionable.
Note that rendering is extremely inefficient, mostly because the libass
output is blended with the extremely strange mplayer OSD format. This
could be improved at a later point.
Remove most OSD rendering from vo_aa.c, because that was extremely
hacky, can't be made work with osd_libass, and didn't work anyway in
my tests.
Internally, some cleanup is done. Subtitle and OSD related variable
declarations were literally all over the place. Move them to sub.h and
sub.c, which were hoarding most of these declarations already. Make the
player core in mplayer.c free of concerns like bitmap font loading.
The old OSD rendering code has been moved to osd_ft.c. The font_load.c
and font_load_ft.c are only needed and compiled if the old OSD
rendering code is configured.
2012-03-22 06:26:37 +01:00
|
|
|
while (*in) {
|
|
|
|
// As used by osd_get_function_sym().
|
2012-10-20 20:58:46 +02:00
|
|
|
if (in[0] == '\xFF' && in[1]) {
|
2013-12-30 22:44:25 +01:00
|
|
|
bstr_xappend(NULL, dst, bstr0(ASS_USE_OSD_FONT));
|
|
|
|
mp_append_utf8_bstr(NULL, dst, OSD_CODEPOINTS + in[1]);
|
|
|
|
bstr_xappend(NULL, dst, bstr0("{\\r}"));
|
osd: use libass for OSD rendering
The OSD will now be rendered with libass. The old rendering code, which
used freetype/fontconfig and did text layout manually, is disabled. To
re-enable the old code, use the --disable-libass-osd configure switch.
Some switches do nothing with the new code enabled, such as -subalign,
-sub-bg-alpha, -sub-bg-color, and many more. (The reason is mostly that
the code for rendering unstyled subtitles with libass doesn't make any
attempts to support them. Some of them could be supported in theory.)
Teletext rendering is not implemented in the new OSD rendering code. I
don't have any teletext sources for testing, and since teletext is
being phased out world-wide, the need for this is questionable.
Note that rendering is extremely inefficient, mostly because the libass
output is blended with the extremely strange mplayer OSD format. This
could be improved at a later point.
Remove most OSD rendering from vo_aa.c, because that was extremely
hacky, can't be made work with osd_libass, and didn't work anyway in
my tests.
Internally, some cleanup is done. Subtitle and OSD related variable
declarations were literally all over the place. Move them to sub.h and
sub.c, which were hoarding most of these declarations already. Make the
player core in mplayer.c free of concerns like bitmap font loading.
The old OSD rendering code has been moved to osd_ft.c. The font_load.c
and font_load_ft.c are only needed and compiled if the old OSD
rendering code is configured.
2012-03-22 06:26:37 +01:00
|
|
|
in += 2;
|
|
|
|
continue;
|
|
|
|
}
|
2016-05-03 22:29:12 +02:00
|
|
|
if (*in == OSD_ASS_0[0] || *in == OSD_ASS_1[0]) {
|
|
|
|
escape_ass = *in == OSD_ASS_1[0];
|
2014-09-18 00:49:55 +02:00
|
|
|
in += 1;
|
|
|
|
continue;
|
|
|
|
}
|
|
|
|
if (escape_ass && *in == '{')
|
2013-12-30 22:44:25 +01:00
|
|
|
bstr_xappend(NULL, dst, bstr0("\\"));
|
|
|
|
bstr_xappend(NULL, dst, (bstr){(char *)in, 1});
|
2012-10-13 21:09:34 +02:00
|
|
|
// Break ASS escapes with U+2060 WORD JOINER
|
2014-09-18 00:49:55 +02:00
|
|
|
if (escape_ass && *in == '\\')
|
2013-12-30 22:44:25 +01:00
|
|
|
mp_append_utf8_bstr(NULL, dst, 0x2060);
|
osd: use libass for OSD rendering
The OSD will now be rendered with libass. The old rendering code, which
used freetype/fontconfig and did text layout manually, is disabled. To
re-enable the old code, use the --disable-libass-osd configure switch.
Some switches do nothing with the new code enabled, such as -subalign,
-sub-bg-alpha, -sub-bg-color, and many more. (The reason is mostly that
the code for rendering unstyled subtitles with libass doesn't make any
attempts to support them. Some of them could be supported in theory.)
Teletext rendering is not implemented in the new OSD rendering code. I
don't have any teletext sources for testing, and since teletext is
being phased out world-wide, the need for this is questionable.
Note that rendering is extremely inefficient, mostly because the libass
output is blended with the extremely strange mplayer OSD format. This
could be improved at a later point.
Remove most OSD rendering from vo_aa.c, because that was extremely
hacky, can't be made work with osd_libass, and didn't work anyway in
my tests.
Internally, some cleanup is done. Subtitle and OSD related variable
declarations were literally all over the place. Move them to sub.h and
sub.c, which were hoarding most of these declarations already. Make the
player core in mplayer.c free of concerns like bitmap font loading.
The old OSD rendering code has been moved to osd_ft.c. The font_load.c
and font_load_ft.c are only needed and compiled if the old OSD
rendering code is configured.
2012-03-22 06:26:37 +01:00
|
|
|
in++;
|
|
|
|
}
|
2013-12-30 22:44:25 +01:00
|
|
|
}
|
|
|
|
|
2015-11-29 13:50:51 +01:00
|
|
|
static ASS_Event *add_osd_ass_event_escaped(ASS_Track *track, const char *style,
|
|
|
|
const char *text)
|
2013-12-30 22:44:25 +01:00
|
|
|
{
|
|
|
|
bstr buf = {0};
|
|
|
|
mangle_ass(&buf, text);
|
2015-11-29 13:50:51 +01:00
|
|
|
ASS_Event *e = add_osd_ass_event(track, style, buf.start);
|
2013-12-30 22:44:25 +01:00
|
|
|
talloc_free(buf.start);
|
2015-11-28 19:24:31 +01:00
|
|
|
return e;
|
osd: use libass for OSD rendering
The OSD will now be rendered with libass. The old rendering code, which
used freetype/fontconfig and did text layout manually, is disabled. To
re-enable the old code, use the --disable-libass-osd configure switch.
Some switches do nothing with the new code enabled, such as -subalign,
-sub-bg-alpha, -sub-bg-color, and many more. (The reason is mostly that
the code for rendering unstyled subtitles with libass doesn't make any
attempts to support them. Some of them could be supported in theory.)
Teletext rendering is not implemented in the new OSD rendering code. I
don't have any teletext sources for testing, and since teletext is
being phased out world-wide, the need for this is questionable.
Note that rendering is extremely inefficient, mostly because the libass
output is blended with the extremely strange mplayer OSD format. This
could be improved at a later point.
Remove most OSD rendering from vo_aa.c, because that was extremely
hacky, can't be made work with osd_libass, and didn't work anyway in
my tests.
Internally, some cleanup is done. Subtitle and OSD related variable
declarations were literally all over the place. Move them to sub.h and
sub.c, which were hoarding most of these declarations already. Make the
player core in mplayer.c free of concerns like bitmap font loading.
The old OSD rendering code has been moved to osd_ft.c. The font_load.c
and font_load_ft.c are only needed and compiled if the old OSD
rendering code is configured.
2012-03-22 06:26:37 +01:00
|
|
|
}
|
|
|
|
|
2015-11-28 19:24:31 +01:00
|
|
|
static void update_osd_text(struct osd_state *osd, struct osd_object *obj)
|
osd: use libass for OSD rendering
The OSD will now be rendered with libass. The old rendering code, which
used freetype/fontconfig and did text layout manually, is disabled. To
re-enable the old code, use the --disable-libass-osd configure switch.
Some switches do nothing with the new code enabled, such as -subalign,
-sub-bg-alpha, -sub-bg-color, and many more. (The reason is mostly that
the code for rendering unstyled subtitles with libass doesn't make any
attempts to support them. Some of them could be supported in theory.)
Teletext rendering is not implemented in the new OSD rendering code. I
don't have any teletext sources for testing, and since teletext is
being phased out world-wide, the need for this is questionable.
Note that rendering is extremely inefficient, mostly because the libass
output is blended with the extremely strange mplayer OSD format. This
could be improved at a later point.
Remove most OSD rendering from vo_aa.c, because that was extremely
hacky, can't be made work with osd_libass, and didn't work anyway in
my tests.
Internally, some cleanup is done. Subtitle and OSD related variable
declarations were literally all over the place. Move them to sub.h and
sub.c, which were hoarding most of these declarations already. Make the
player core in mplayer.c free of concerns like bitmap font loading.
The old OSD rendering code has been moved to osd_ft.c. The font_load.c
and font_load_ft.c are only needed and compiled if the old OSD
rendering code is configured.
2012-03-22 06:26:37 +01:00
|
|
|
{
|
2013-05-14 14:10:27 +02:00
|
|
|
struct MPOpts *opts = osd->opts;
|
|
|
|
|
2014-01-18 01:19:20 +01:00
|
|
|
if (!obj->text[0])
|
2012-09-28 21:38:52 +02:00
|
|
|
return;
|
|
|
|
|
2016-03-08 21:29:29 +01:00
|
|
|
create_ass_track(osd, obj, &obj->ass, 0, 0);
|
2015-09-07 14:26:01 +02:00
|
|
|
|
2013-05-14 14:10:27 +02:00
|
|
|
struct osd_style_opts font = *opts->osd_style;
|
|
|
|
font.font_size *= opts->osd_scale;
|
|
|
|
|
2016-03-08 21:29:29 +01:00
|
|
|
double playresy = obj->ass.track->PlayResY;
|
2013-12-10 19:58:57 +01:00
|
|
|
// Compensate for libass and mp_ass_set_style scaling the font etc.
|
|
|
|
if (!opts->osd_scale_by_window)
|
|
|
|
playresy *= 720.0 / obj->vo_res.h;
|
|
|
|
|
2016-03-08 21:29:29 +01:00
|
|
|
mp_ass_set_style(get_style(&obj->ass, "OSD"), playresy, &font);
|
|
|
|
add_osd_ass_event_escaped(obj->ass.track, "OSD", obj->text);
|
osd: use libass for OSD rendering
The OSD will now be rendered with libass. The old rendering code, which
used freetype/fontconfig and did text layout manually, is disabled. To
re-enable the old code, use the --disable-libass-osd configure switch.
Some switches do nothing with the new code enabled, such as -subalign,
-sub-bg-alpha, -sub-bg-color, and many more. (The reason is mostly that
the code for rendering unstyled subtitles with libass doesn't make any
attempts to support them. Some of them could be supported in theory.)
Teletext rendering is not implemented in the new OSD rendering code. I
don't have any teletext sources for testing, and since teletext is
being phased out world-wide, the need for this is questionable.
Note that rendering is extremely inefficient, mostly because the libass
output is blended with the extremely strange mplayer OSD format. This
could be improved at a later point.
Remove most OSD rendering from vo_aa.c, because that was extremely
hacky, can't be made work with osd_libass, and didn't work anyway in
my tests.
Internally, some cleanup is done. Subtitle and OSD related variable
declarations were literally all over the place. Move them to sub.h and
sub.c, which were hoarding most of these declarations already. Make the
player core in mplayer.c free of concerns like bitmap font loading.
The old OSD rendering code has been moved to osd_ft.c. The font_load.c
and font_load_ft.c are only needed and compiled if the old OSD
rendering code is configured.
2012-03-22 06:26:37 +01:00
|
|
|
}
|
|
|
|
|
2013-03-30 20:08:56 +01:00
|
|
|
// align: -1 .. +1
|
|
|
|
// frame: size of the containing area
|
|
|
|
// obj: size of the object that should be positioned inside the area
|
|
|
|
// margin: min. distance from object to frame (as long as -1 <= align <= +1)
|
|
|
|
static float get_align(float align, float frame, float obj, float margin)
|
2013-02-14 20:43:00 +01:00
|
|
|
{
|
2013-03-30 20:08:56 +01:00
|
|
|
frame -= margin * 2;
|
|
|
|
return margin + frame / 2 - obj / 2 + (frame - obj) / 2 * align;
|
2013-02-14 20:43:00 +01:00
|
|
|
}
|
|
|
|
|
2013-03-30 20:08:56 +01:00
|
|
|
struct ass_draw {
|
|
|
|
int scale;
|
|
|
|
char *text;
|
|
|
|
};
|
2013-02-14 20:43:00 +01:00
|
|
|
|
2013-03-30 20:08:56 +01:00
|
|
|
static void ass_draw_start(struct ass_draw *d)
|
|
|
|
{
|
|
|
|
d->scale = FFMAX(d->scale, 1);
|
|
|
|
d->text = talloc_asprintf_append(d->text, "{\\p%d}", d->scale);
|
|
|
|
}
|
osd: use libass for OSD rendering
The OSD will now be rendered with libass. The old rendering code, which
used freetype/fontconfig and did text layout manually, is disabled. To
re-enable the old code, use the --disable-libass-osd configure switch.
Some switches do nothing with the new code enabled, such as -subalign,
-sub-bg-alpha, -sub-bg-color, and many more. (The reason is mostly that
the code for rendering unstyled subtitles with libass doesn't make any
attempts to support them. Some of them could be supported in theory.)
Teletext rendering is not implemented in the new OSD rendering code. I
don't have any teletext sources for testing, and since teletext is
being phased out world-wide, the need for this is questionable.
Note that rendering is extremely inefficient, mostly because the libass
output is blended with the extremely strange mplayer OSD format. This
could be improved at a later point.
Remove most OSD rendering from vo_aa.c, because that was extremely
hacky, can't be made work with osd_libass, and didn't work anyway in
my tests.
Internally, some cleanup is done. Subtitle and OSD related variable
declarations were literally all over the place. Move them to sub.h and
sub.c, which were hoarding most of these declarations already. Make the
player core in mplayer.c free of concerns like bitmap font loading.
The old OSD rendering code has been moved to osd_ft.c. The font_load.c
and font_load_ft.c are only needed and compiled if the old OSD
rendering code is configured.
2012-03-22 06:26:37 +01:00
|
|
|
|
2013-03-30 20:08:56 +01:00
|
|
|
static void ass_draw_stop(struct ass_draw *d)
|
|
|
|
{
|
|
|
|
d->text = talloc_strdup_append(d->text, "{\\p0}");
|
|
|
|
}
|
|
|
|
|
|
|
|
static void ass_draw_c(struct ass_draw *d, float x, float y)
|
|
|
|
{
|
|
|
|
int ix = round(x * (1 << (d->scale - 1)));
|
|
|
|
int iy = round(y * (1 << (d->scale - 1)));
|
|
|
|
d->text = talloc_asprintf_append(d->text, " %d %d", ix, iy);
|
|
|
|
}
|
|
|
|
|
|
|
|
static void ass_draw_append(struct ass_draw *d, const char *t)
|
|
|
|
{
|
|
|
|
d->text = talloc_strdup_append(d->text, t);
|
|
|
|
}
|
|
|
|
|
|
|
|
static void ass_draw_move_to(struct ass_draw *d, float x, float y)
|
|
|
|
{
|
|
|
|
ass_draw_append(d, " m");
|
|
|
|
ass_draw_c(d, x, y);
|
|
|
|
}
|
|
|
|
|
|
|
|
static void ass_draw_line_to(struct ass_draw *d, float x, float y)
|
|
|
|
{
|
|
|
|
ass_draw_append(d, " l");
|
|
|
|
ass_draw_c(d, x, y);
|
|
|
|
}
|
|
|
|
|
|
|
|
static void ass_draw_rect_ccw(struct ass_draw *d, float x0, float y0,
|
|
|
|
float x1, float y1)
|
|
|
|
{
|
|
|
|
ass_draw_move_to(d, x0, y0);
|
|
|
|
ass_draw_line_to(d, x0, y1);
|
|
|
|
ass_draw_line_to(d, x1, y1);
|
|
|
|
ass_draw_line_to(d, x1, y0);
|
|
|
|
}
|
|
|
|
|
|
|
|
static void ass_draw_rect_cw(struct ass_draw *d, float x0, float y0,
|
|
|
|
float x1, float y1)
|
|
|
|
{
|
|
|
|
ass_draw_move_to(d, x0, y0);
|
|
|
|
ass_draw_line_to(d, x1, y0);
|
|
|
|
ass_draw_line_to(d, x1, y1);
|
|
|
|
ass_draw_line_to(d, x0, y1);
|
|
|
|
}
|
|
|
|
|
|
|
|
static void ass_draw_reset(struct ass_draw *d)
|
|
|
|
{
|
|
|
|
talloc_free(d->text);
|
|
|
|
d->text = NULL;
|
|
|
|
}
|
|
|
|
|
|
|
|
static void get_osd_bar_box(struct osd_state *osd, struct osd_object *obj,
|
|
|
|
float *o_x, float *o_y, float *o_w, float *o_h,
|
|
|
|
float *o_border)
|
osd: use libass for OSD rendering
The OSD will now be rendered with libass. The old rendering code, which
used freetype/fontconfig and did text layout manually, is disabled. To
re-enable the old code, use the --disable-libass-osd configure switch.
Some switches do nothing with the new code enabled, such as -subalign,
-sub-bg-alpha, -sub-bg-color, and many more. (The reason is mostly that
the code for rendering unstyled subtitles with libass doesn't make any
attempts to support them. Some of them could be supported in theory.)
Teletext rendering is not implemented in the new OSD rendering code. I
don't have any teletext sources for testing, and since teletext is
being phased out world-wide, the need for this is questionable.
Note that rendering is extremely inefficient, mostly because the libass
output is blended with the extremely strange mplayer OSD format. This
could be improved at a later point.
Remove most OSD rendering from vo_aa.c, because that was extremely
hacky, can't be made work with osd_libass, and didn't work anyway in
my tests.
Internally, some cleanup is done. Subtitle and OSD related variable
declarations were literally all over the place. Move them to sub.h and
sub.c, which were hoarding most of these declarations already. Make the
player core in mplayer.c free of concerns like bitmap font loading.
The old OSD rendering code has been moved to osd_ft.c. The font_load.c
and font_load_ft.c are only needed and compiled if the old OSD
rendering code is configured.
2012-03-22 06:26:37 +01:00
|
|
|
{
|
2013-02-14 20:43:00 +01:00
|
|
|
struct MPOpts *opts = osd->opts;
|
|
|
|
|
2016-03-08 21:29:29 +01:00
|
|
|
create_ass_track(osd, obj, &obj->ass, 0, 0);
|
|
|
|
ASS_Track *track = obj->ass.track;
|
2015-11-29 13:50:51 +01:00
|
|
|
|
2016-03-08 21:29:29 +01:00
|
|
|
ASS_Style *style = get_style(&obj->ass, "progbar");
|
2015-11-29 13:50:51 +01:00
|
|
|
if (!style) {
|
|
|
|
*o_x = *o_y = *o_w = *o_h = *o_border = 0;
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
mp_ass_set_style(style, track->PlayResY, opts->osd_style);
|
2013-03-30 20:08:56 +01:00
|
|
|
|
|
|
|
*o_w = track->PlayResX * (opts->osd_bar_w / 100.0);
|
|
|
|
*o_h = track->PlayResY * (opts->osd_bar_h / 100.0);
|
|
|
|
|
2015-02-24 14:36:14 +01:00
|
|
|
float base_size = 0.03125;
|
|
|
|
style->Outline *= *o_h / track->PlayResY / base_size;
|
|
|
|
// So that the chapter marks have space between them
|
|
|
|
style->Outline = FFMIN(style->Outline, *o_h / 5.2);
|
|
|
|
// So that the border is not 0
|
|
|
|
style->Outline = FFMAX(style->Outline, *o_h / 32.0);
|
|
|
|
// Rendering with shadow is broken (because there's more than one shape)
|
|
|
|
style->Shadow = 0;
|
osd: use libass for OSD rendering
The OSD will now be rendered with libass. The old rendering code, which
used freetype/fontconfig and did text layout manually, is disabled. To
re-enable the old code, use the --disable-libass-osd configure switch.
Some switches do nothing with the new code enabled, such as -subalign,
-sub-bg-alpha, -sub-bg-color, and many more. (The reason is mostly that
the code for rendering unstyled subtitles with libass doesn't make any
attempts to support them. Some of them could be supported in theory.)
Teletext rendering is not implemented in the new OSD rendering code. I
don't have any teletext sources for testing, and since teletext is
being phased out world-wide, the need for this is questionable.
Note that rendering is extremely inefficient, mostly because the libass
output is blended with the extremely strange mplayer OSD format. This
could be improved at a later point.
Remove most OSD rendering from vo_aa.c, because that was extremely
hacky, can't be made work with osd_libass, and didn't work anyway in
my tests.
Internally, some cleanup is done. Subtitle and OSD related variable
declarations were literally all over the place. Move them to sub.h and
sub.c, which were hoarding most of these declarations already. Make the
player core in mplayer.c free of concerns like bitmap font loading.
The old OSD rendering code has been moved to osd_ft.c. The font_load.c
and font_load_ft.c are only needed and compiled if the old OSD
rendering code is configured.
2012-03-22 06:26:37 +01:00
|
|
|
|
2015-02-24 14:40:06 +01:00
|
|
|
style->Alignment = 5;
|
|
|
|
|
2013-03-30 20:08:56 +01:00
|
|
|
*o_border = style->Outline;
|
osd: use libass for OSD rendering
The OSD will now be rendered with libass. The old rendering code, which
used freetype/fontconfig and did text layout manually, is disabled. To
re-enable the old code, use the --disable-libass-osd configure switch.
Some switches do nothing with the new code enabled, such as -subalign,
-sub-bg-alpha, -sub-bg-color, and many more. (The reason is mostly that
the code for rendering unstyled subtitles with libass doesn't make any
attempts to support them. Some of them could be supported in theory.)
Teletext rendering is not implemented in the new OSD rendering code. I
don't have any teletext sources for testing, and since teletext is
being phased out world-wide, the need for this is questionable.
Note that rendering is extremely inefficient, mostly because the libass
output is blended with the extremely strange mplayer OSD format. This
could be improved at a later point.
Remove most OSD rendering from vo_aa.c, because that was extremely
hacky, can't be made work with osd_libass, and didn't work anyway in
my tests.
Internally, some cleanup is done. Subtitle and OSD related variable
declarations were literally all over the place. Move them to sub.h and
sub.c, which were hoarding most of these declarations already. Make the
player core in mplayer.c free of concerns like bitmap font loading.
The old OSD rendering code has been moved to osd_ft.c. The font_load.c
and font_load_ft.c are only needed and compiled if the old OSD
rendering code is configured.
2012-03-22 06:26:37 +01:00
|
|
|
|
2013-03-30 20:08:56 +01:00
|
|
|
*o_x = get_align(opts->osd_bar_align_x, track->PlayResX, *o_w, *o_border);
|
|
|
|
*o_y = get_align(opts->osd_bar_align_y, track->PlayResY, *o_h, *o_border);
|
|
|
|
}
|
|
|
|
|
|
|
|
static void update_progbar(struct osd_state *osd, struct osd_object *obj)
|
|
|
|
{
|
2014-01-18 01:19:20 +01:00
|
|
|
if (obj->progbar_state.type < 0)
|
2013-03-30 20:08:56 +01:00
|
|
|
return;
|
osd: use libass for OSD rendering
The OSD will now be rendered with libass. The old rendering code, which
used freetype/fontconfig and did text layout manually, is disabled. To
re-enable the old code, use the --disable-libass-osd configure switch.
Some switches do nothing with the new code enabled, such as -subalign,
-sub-bg-alpha, -sub-bg-color, and many more. (The reason is mostly that
the code for rendering unstyled subtitles with libass doesn't make any
attempts to support them. Some of them could be supported in theory.)
Teletext rendering is not implemented in the new OSD rendering code. I
don't have any teletext sources for testing, and since teletext is
being phased out world-wide, the need for this is questionable.
Note that rendering is extremely inefficient, mostly because the libass
output is blended with the extremely strange mplayer OSD format. This
could be improved at a later point.
Remove most OSD rendering from vo_aa.c, because that was extremely
hacky, can't be made work with osd_libass, and didn't work anyway in
my tests.
Internally, some cleanup is done. Subtitle and OSD related variable
declarations were literally all over the place. Move them to sub.h and
sub.c, which were hoarding most of these declarations already. Make the
player core in mplayer.c free of concerns like bitmap font loading.
The old OSD rendering code has been moved to osd_ft.c. The font_load.c
and font_load_ft.c are only needed and compiled if the old OSD
rendering code is configured.
2012-03-22 06:26:37 +01:00
|
|
|
|
2015-09-07 14:26:01 +02:00
|
|
|
float px, py, width, height, border;
|
|
|
|
get_osd_bar_box(osd, obj, &px, &py, &width, &height, &border);
|
|
|
|
|
2016-03-08 21:29:29 +01:00
|
|
|
ASS_Track *track = obj->ass.track;
|
|
|
|
|
2013-03-30 20:08:56 +01:00
|
|
|
float sx = px - border * 2 - height / 4; // includes additional spacing
|
|
|
|
float sy = py + height / 2;
|
osd: use libass for OSD rendering
The OSD will now be rendered with libass. The old rendering code, which
used freetype/fontconfig and did text layout manually, is disabled. To
re-enable the old code, use the --disable-libass-osd configure switch.
Some switches do nothing with the new code enabled, such as -subalign,
-sub-bg-alpha, -sub-bg-color, and many more. (The reason is mostly that
the code for rendering unstyled subtitles with libass doesn't make any
attempts to support them. Some of them could be supported in theory.)
Teletext rendering is not implemented in the new OSD rendering code. I
don't have any teletext sources for testing, and since teletext is
being phased out world-wide, the need for this is questionable.
Note that rendering is extremely inefficient, mostly because the libass
output is blended with the extremely strange mplayer OSD format. This
could be improved at a later point.
Remove most OSD rendering from vo_aa.c, because that was extremely
hacky, can't be made work with osd_libass, and didn't work anyway in
my tests.
Internally, some cleanup is done. Subtitle and OSD related variable
declarations were literally all over the place. Move them to sub.h and
sub.c, which were hoarding most of these declarations already. Make the
player core in mplayer.c free of concerns like bitmap font loading.
The old OSD rendering code has been moved to osd_ft.c. The font_load.c
and font_load_ft.c are only needed and compiled if the old OSD
rendering code is configured.
2012-03-22 06:26:37 +01:00
|
|
|
|
2013-12-30 22:44:25 +01:00
|
|
|
bstr buf = bstr0(talloc_asprintf(NULL, "{\\an6\\pos(%f,%f)}", sx, sy));
|
osd: use libass for OSD rendering
The OSD will now be rendered with libass. The old rendering code, which
used freetype/fontconfig and did text layout manually, is disabled. To
re-enable the old code, use the --disable-libass-osd configure switch.
Some switches do nothing with the new code enabled, such as -subalign,
-sub-bg-alpha, -sub-bg-color, and many more. (The reason is mostly that
the code for rendering unstyled subtitles with libass doesn't make any
attempts to support them. Some of them could be supported in theory.)
Teletext rendering is not implemented in the new OSD rendering code. I
don't have any teletext sources for testing, and since teletext is
being phased out world-wide, the need for this is questionable.
Note that rendering is extremely inefficient, mostly because the libass
output is blended with the extremely strange mplayer OSD format. This
could be improved at a later point.
Remove most OSD rendering from vo_aa.c, because that was extremely
hacky, can't be made work with osd_libass, and didn't work anyway in
my tests.
Internally, some cleanup is done. Subtitle and OSD related variable
declarations were literally all over the place. Move them to sub.h and
sub.c, which were hoarding most of these declarations already. Make the
player core in mplayer.c free of concerns like bitmap font loading.
The old OSD rendering code has been moved to osd_ft.c. The font_load.c
and font_load_ft.c are only needed and compiled if the old OSD
rendering code is configured.
2012-03-22 06:26:37 +01:00
|
|
|
|
2014-01-18 01:19:20 +01:00
|
|
|
if (obj->progbar_state.type == 0 || obj->progbar_state.type >= 256) {
|
2013-02-16 20:50:05 +01:00
|
|
|
// no sym
|
2014-01-18 01:19:20 +01:00
|
|
|
} else if (obj->progbar_state.type >= 32) {
|
|
|
|
mp_append_utf8_bstr(NULL, &buf, obj->progbar_state.type);
|
2013-02-16 20:50:05 +01:00
|
|
|
} else {
|
2013-12-30 22:44:25 +01:00
|
|
|
bstr_xappend(NULL, &buf, bstr0(ASS_USE_OSD_FONT));
|
2014-01-18 01:19:20 +01:00
|
|
|
mp_append_utf8_bstr(NULL, &buf, OSD_CODEPOINTS + obj->progbar_state.type);
|
2013-12-30 22:44:25 +01:00
|
|
|
bstr_xappend(NULL, &buf, bstr0("{\\r}"));
|
osd: use libass for OSD rendering
The OSD will now be rendered with libass. The old rendering code, which
used freetype/fontconfig and did text layout manually, is disabled. To
re-enable the old code, use the --disable-libass-osd configure switch.
Some switches do nothing with the new code enabled, such as -subalign,
-sub-bg-alpha, -sub-bg-color, and many more. (The reason is mostly that
the code for rendering unstyled subtitles with libass doesn't make any
attempts to support them. Some of them could be supported in theory.)
Teletext rendering is not implemented in the new OSD rendering code. I
don't have any teletext sources for testing, and since teletext is
being phased out world-wide, the need for this is questionable.
Note that rendering is extremely inefficient, mostly because the libass
output is blended with the extremely strange mplayer OSD format. This
could be improved at a later point.
Remove most OSD rendering from vo_aa.c, because that was extremely
hacky, can't be made work with osd_libass, and didn't work anyway in
my tests.
Internally, some cleanup is done. Subtitle and OSD related variable
declarations were literally all over the place. Move them to sub.h and
sub.c, which were hoarding most of these declarations already. Make the
player core in mplayer.c free of concerns like bitmap font loading.
The old OSD rendering code has been moved to osd_ft.c. The font_load.c
and font_load_ft.c are only needed and compiled if the old OSD
rendering code is configured.
2012-03-22 06:26:37 +01:00
|
|
|
}
|
|
|
|
|
2016-03-08 21:29:29 +01:00
|
|
|
add_osd_ass_event(track, "progbar", buf.start);
|
2013-12-30 22:44:25 +01:00
|
|
|
talloc_free(buf.start);
|
osd: use libass for OSD rendering
The OSD will now be rendered with libass. The old rendering code, which
used freetype/fontconfig and did text layout manually, is disabled. To
re-enable the old code, use the --disable-libass-osd configure switch.
Some switches do nothing with the new code enabled, such as -subalign,
-sub-bg-alpha, -sub-bg-color, and many more. (The reason is mostly that
the code for rendering unstyled subtitles with libass doesn't make any
attempts to support them. Some of them could be supported in theory.)
Teletext rendering is not implemented in the new OSD rendering code. I
don't have any teletext sources for testing, and since teletext is
being phased out world-wide, the need for this is questionable.
Note that rendering is extremely inefficient, mostly because the libass
output is blended with the extremely strange mplayer OSD format. This
could be improved at a later point.
Remove most OSD rendering from vo_aa.c, because that was extremely
hacky, can't be made work with osd_libass, and didn't work anyway in
my tests.
Internally, some cleanup is done. Subtitle and OSD related variable
declarations were literally all over the place. Move them to sub.h and
sub.c, which were hoarding most of these declarations already. Make the
player core in mplayer.c free of concerns like bitmap font loading.
The old OSD rendering code has been moved to osd_ft.c. The font_load.c
and font_load_ft.c are only needed and compiled if the old OSD
rendering code is configured.
2012-03-22 06:26:37 +01:00
|
|
|
|
2013-03-30 20:08:56 +01:00
|
|
|
struct ass_draw *d = &(struct ass_draw) { .scale = 4 };
|
|
|
|
// filled area
|
2013-03-31 21:12:53 +02:00
|
|
|
d->text = talloc_asprintf_append(d->text, "{\\bord0\\pos(%f,%f)}", px, py);
|
2013-03-30 20:08:56 +01:00
|
|
|
ass_draw_start(d);
|
2014-01-18 01:19:20 +01:00
|
|
|
float pos = obj->progbar_state.value * width - border / 2;
|
2013-03-30 20:08:56 +01:00
|
|
|
ass_draw_rect_cw(d, 0, 0, pos, height);
|
|
|
|
ass_draw_stop(d);
|
2016-03-08 21:29:29 +01:00
|
|
|
add_osd_ass_event(track, "progbar", d->text);
|
2013-03-30 20:08:56 +01:00
|
|
|
ass_draw_reset(d);
|
|
|
|
|
2013-04-02 01:53:33 +02:00
|
|
|
// position marker
|
|
|
|
d->text = talloc_asprintf_append(d->text, "{\\bord%f\\pos(%f,%f)}",
|
|
|
|
border / 2, px, py);
|
|
|
|
ass_draw_start(d);
|
|
|
|
ass_draw_move_to(d, pos + border / 2, 0);
|
|
|
|
ass_draw_line_to(d, pos + border / 2, height);
|
|
|
|
ass_draw_stop(d);
|
2016-03-08 21:29:29 +01:00
|
|
|
add_osd_ass_event(track, "progbar", d->text);
|
2013-04-02 01:53:33 +02:00
|
|
|
ass_draw_reset(d);
|
|
|
|
|
2013-03-30 20:08:56 +01:00
|
|
|
d->text = talloc_asprintf_append(d->text, "{\\pos(%f,%f)}", px, py);
|
|
|
|
ass_draw_start(d);
|
|
|
|
|
|
|
|
// the box
|
|
|
|
ass_draw_rect_cw(d, -border, -border, width + border, height + border);
|
|
|
|
|
|
|
|
// the "hole"
|
|
|
|
ass_draw_rect_ccw(d, 0, 0, width, height);
|
|
|
|
|
|
|
|
// chapter marks
|
2014-01-18 01:19:20 +01:00
|
|
|
for (int n = 0; n < obj->progbar_state.num_stops; n++) {
|
|
|
|
float s = obj->progbar_state.stops[n] * width;
|
2013-03-30 20:08:56 +01:00
|
|
|
float dent = border * 1.3;
|
|
|
|
|
|
|
|
if (s > dent && s < width - dent) {
|
|
|
|
ass_draw_move_to(d, s + dent, 0);
|
|
|
|
ass_draw_line_to(d, s, dent);
|
|
|
|
ass_draw_line_to(d, s - dent, 0);
|
|
|
|
|
|
|
|
ass_draw_move_to(d, s - dent, height);
|
|
|
|
ass_draw_line_to(d, s, height - dent);
|
|
|
|
ass_draw_line_to(d, s + dent, height);
|
|
|
|
}
|
|
|
|
}
|
osd: use libass for OSD rendering
The OSD will now be rendered with libass. The old rendering code, which
used freetype/fontconfig and did text layout manually, is disabled. To
re-enable the old code, use the --disable-libass-osd configure switch.
Some switches do nothing with the new code enabled, such as -subalign,
-sub-bg-alpha, -sub-bg-color, and many more. (The reason is mostly that
the code for rendering unstyled subtitles with libass doesn't make any
attempts to support them. Some of them could be supported in theory.)
Teletext rendering is not implemented in the new OSD rendering code. I
don't have any teletext sources for testing, and since teletext is
being phased out world-wide, the need for this is questionable.
Note that rendering is extremely inefficient, mostly because the libass
output is blended with the extremely strange mplayer OSD format. This
could be improved at a later point.
Remove most OSD rendering from vo_aa.c, because that was extremely
hacky, can't be made work with osd_libass, and didn't work anyway in
my tests.
Internally, some cleanup is done. Subtitle and OSD related variable
declarations were literally all over the place. Move them to sub.h and
sub.c, which were hoarding most of these declarations already. Make the
player core in mplayer.c free of concerns like bitmap font loading.
The old OSD rendering code has been moved to osd_ft.c. The font_load.c
and font_load_ft.c are only needed and compiled if the old OSD
rendering code is configured.
2012-03-22 06:26:37 +01:00
|
|
|
|
2013-03-30 20:08:56 +01:00
|
|
|
ass_draw_stop(d);
|
2016-03-08 21:29:29 +01:00
|
|
|
add_osd_ass_event(track, "progbar", d->text);
|
2013-03-30 20:08:56 +01:00
|
|
|
ass_draw_reset(d);
|
osd: use libass for OSD rendering
The OSD will now be rendered with libass. The old rendering code, which
used freetype/fontconfig and did text layout manually, is disabled. To
re-enable the old code, use the --disable-libass-osd configure switch.
Some switches do nothing with the new code enabled, such as -subalign,
-sub-bg-alpha, -sub-bg-color, and many more. (The reason is mostly that
the code for rendering unstyled subtitles with libass doesn't make any
attempts to support them. Some of them could be supported in theory.)
Teletext rendering is not implemented in the new OSD rendering code. I
don't have any teletext sources for testing, and since teletext is
being phased out world-wide, the need for this is questionable.
Note that rendering is extremely inefficient, mostly because the libass
output is blended with the extremely strange mplayer OSD format. This
could be improved at a later point.
Remove most OSD rendering from vo_aa.c, because that was extremely
hacky, can't be made work with osd_libass, and didn't work anyway in
my tests.
Internally, some cleanup is done. Subtitle and OSD related variable
declarations were literally all over the place. Move them to sub.h and
sub.c, which were hoarding most of these declarations already. Make the
player core in mplayer.c free of concerns like bitmap font loading.
The old OSD rendering code has been moved to osd_ft.c. The font_load.c
and font_load_ft.c are only needed and compiled if the old OSD
rendering code is configured.
2012-03-22 06:26:37 +01:00
|
|
|
}
|
|
|
|
|
2015-11-28 19:24:31 +01:00
|
|
|
static void update_osd(struct osd_state *osd, struct osd_object *obj)
|
|
|
|
{
|
2016-09-16 17:17:32 +02:00
|
|
|
obj->osd_changed = false;
|
2016-03-08 21:29:29 +01:00
|
|
|
clear_ass(&obj->ass);
|
2015-11-28 19:24:31 +01:00
|
|
|
update_osd_text(osd, obj);
|
|
|
|
update_progbar(osd, obj);
|
|
|
|
}
|
|
|
|
|
2016-03-08 21:42:08 +01:00
|
|
|
static void update_external(struct osd_state *osd, struct osd_object *obj,
|
|
|
|
struct osd_external *ext)
|
Add initial Lua scripting support
This is preliminary. There are still tons of issues, and any aspect
of scripting may change in the future. I decided to merge this
(preliminary) work now because it makes it easier to develop it, not
because it's done. lua.rst is clear enough about it (plus some
sarcasm).
This requires linking to Lua. Lua has no official pkg-config file, but
there are distribution specific .pc files, all with different names.
Adding a non-pkg-config based configure test was considered, but we'd
rather not.
One major complication is that libquvi links against Lua too, and if
the Lua version is different from mpv's, you will get a crash as soon
as libquvi uses Lua. (libquvi by design always runs when a file is
opened.) I would consider this the problem of distros and whoever
builds mpv, but to make things easier for users, we add a terrible
runtime test to the configure script, which probes whether libquvi
will crash. This is disabled when cross-compiling, but in that case
we hope the user knows what he is doing.
2013-09-26 00:41:14 +02:00
|
|
|
{
|
2016-03-08 21:42:08 +01:00
|
|
|
bstr t = bstr0(ext->text);
|
2015-09-07 14:26:01 +02:00
|
|
|
if (!t.len)
|
|
|
|
return;
|
2016-03-08 21:42:08 +01:00
|
|
|
create_ass_track(osd, obj, &ext->ass, ext->res_x, ext->res_y);
|
2015-11-29 13:50:51 +01:00
|
|
|
|
2016-03-08 21:42:08 +01:00
|
|
|
clear_ass(&ext->ass);
|
2016-03-08 21:29:29 +01:00
|
|
|
|
2016-03-08 21:42:08 +01:00
|
|
|
int resy = ext->ass.track->PlayResY;
|
|
|
|
mp_ass_set_style(get_style(&ext->ass, "OSD"), resy, osd->opts->osd_style);
|
2015-11-29 13:50:51 +01:00
|
|
|
|
|
|
|
// Some scripts will reference this style name with \r tags.
|
|
|
|
const struct osd_style_opts *def = osd_style_conf.defaults;
|
2016-03-08 21:42:08 +01:00
|
|
|
mp_ass_set_style(get_style(&ext->ass, "Default"), resy, def);
|
2015-09-07 14:26:01 +02:00
|
|
|
|
Add initial Lua scripting support
This is preliminary. There are still tons of issues, and any aspect
of scripting may change in the future. I decided to merge this
(preliminary) work now because it makes it easier to develop it, not
because it's done. lua.rst is clear enough about it (plus some
sarcasm).
This requires linking to Lua. Lua has no official pkg-config file, but
there are distribution specific .pc files, all with different names.
Adding a non-pkg-config based configure test was considered, but we'd
rather not.
One major complication is that libquvi links against Lua too, and if
the Lua version is different from mpv's, you will get a crash as soon
as libquvi uses Lua. (libquvi by design always runs when a file is
opened.) I would consider this the problem of distros and whoever
builds mpv, but to make things easier for users, we add a terrible
runtime test to the configure script, which probes whether libquvi
will crash. This is disabled when cross-compiling, but in that case
we hope the user knows what he is doing.
2013-09-26 00:41:14 +02:00
|
|
|
while (t.len) {
|
|
|
|
bstr line;
|
|
|
|
bstr_split_tok(t, "\n", &line, &t);
|
|
|
|
if (line.len) {
|
|
|
|
char *tmp = bstrdup0(NULL, line);
|
2016-03-08 21:42:08 +01:00
|
|
|
add_osd_ass_event(ext->ass.track, "OSD", tmp);
|
Add initial Lua scripting support
This is preliminary. There are still tons of issues, and any aspect
of scripting may change in the future. I decided to merge this
(preliminary) work now because it makes it easier to develop it, not
because it's done. lua.rst is clear enough about it (plus some
sarcasm).
This requires linking to Lua. Lua has no official pkg-config file, but
there are distribution specific .pc files, all with different names.
Adding a non-pkg-config based configure test was considered, but we'd
rather not.
One major complication is that libquvi links against Lua too, and if
the Lua version is different from mpv's, you will get a crash as soon
as libquvi uses Lua. (libquvi by design always runs when a file is
opened.) I would consider this the problem of distros and whoever
builds mpv, but to make things easier for users, we add a terrible
runtime test to the configure script, which probes whether libquvi
will crash. This is disabled when cross-compiling, but in that case
we hope the user knows what he is doing.
2013-09-26 00:41:14 +02:00
|
|
|
talloc_free(tmp);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2016-03-08 21:42:08 +01:00
|
|
|
void osd_set_external(struct osd_state *osd, void *id, int res_x, int res_y,
|
|
|
|
char *text)
|
2012-09-28 21:38:52 +02:00
|
|
|
{
|
2016-03-08 21:42:08 +01:00
|
|
|
pthread_mutex_lock(&osd->lock);
|
|
|
|
struct osd_object *obj = osd->objs[OSDTYPE_EXTERNAL];
|
|
|
|
struct osd_external *entry = 0;
|
|
|
|
for (int n = 0; n < obj->num_externals; n++) {
|
|
|
|
if (obj->externals[n].id == id) {
|
|
|
|
entry = &obj->externals[n];
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
if (!entry && !text)
|
|
|
|
goto done;
|
|
|
|
|
|
|
|
if (!entry) {
|
|
|
|
struct osd_external new = { .id = id };
|
|
|
|
MP_TARRAY_APPEND(obj, obj->externals, obj->num_externals, new);
|
|
|
|
entry = &obj->externals[obj->num_externals - 1];
|
|
|
|
}
|
|
|
|
|
|
|
|
if (!text) {
|
|
|
|
int index = entry - &obj->externals[0];
|
|
|
|
destroy_external(entry);
|
|
|
|
MP_TARRAY_REMOVE_AT(obj->externals, obj->num_externals, index);
|
2016-09-20 15:22:26 +02:00
|
|
|
obj->changed = true;
|
|
|
|
osd->want_redraw_notification = true;
|
2016-03-08 21:42:08 +01:00
|
|
|
goto done;
|
2012-09-28 21:38:52 +02:00
|
|
|
}
|
2016-03-08 21:42:08 +01:00
|
|
|
|
|
|
|
if (!entry->text || strcmp(entry->text, text) != 0 ||
|
|
|
|
entry->res_x != res_x || entry->res_y != res_y)
|
|
|
|
{
|
|
|
|
talloc_free(entry->text);
|
|
|
|
entry->text = talloc_strdup(NULL, text);
|
|
|
|
entry->res_x = res_x;
|
|
|
|
entry->res_y = res_y;
|
|
|
|
update_external(osd, obj, entry);
|
2016-06-30 21:38:50 +02:00
|
|
|
obj->changed = true;
|
2016-09-16 17:17:32 +02:00
|
|
|
osd->want_redraw_notification = true;
|
2016-03-08 21:42:08 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
done:
|
|
|
|
pthread_mutex_unlock(&osd->lock);
|
2012-09-28 21:38:52 +02:00
|
|
|
}
|
|
|
|
|
2016-03-08 21:29:29 +01:00
|
|
|
static void append_ass(struct ass_state *ass, struct mp_osd_res *res,
|
2016-06-30 21:38:50 +02:00
|
|
|
ASS_Image **img_list, bool *changed)
|
2016-03-08 21:29:29 +01:00
|
|
|
{
|
2016-06-30 21:38:50 +02:00
|
|
|
if (!ass->render || !ass->track) {
|
|
|
|
*img_list = NULL;
|
2016-03-08 21:29:29 +01:00
|
|
|
return;
|
2016-06-30 21:38:50 +02:00
|
|
|
}
|
2016-03-08 21:29:29 +01:00
|
|
|
|
|
|
|
ass_set_frame_size(ass->render, res->w, res->h);
|
|
|
|
ass_set_aspect_ratio(ass->render, res->display_par, 1.0);
|
2016-06-30 21:38:50 +02:00
|
|
|
|
|
|
|
int ass_changed;
|
|
|
|
*img_list = ass_render_frame(ass->render, ass->track, 0, &ass_changed);
|
|
|
|
*changed |= ass_changed;
|
2016-03-08 21:29:29 +01:00
|
|
|
}
|
|
|
|
|
2012-09-28 21:38:52 +02:00
|
|
|
void osd_object_get_bitmaps(struct osd_state *osd, struct osd_object *obj,
|
2016-07-03 18:33:28 +02:00
|
|
|
int format, struct sub_bitmaps *out_imgs)
|
2012-09-28 21:38:52 +02:00
|
|
|
{
|
2016-09-16 17:17:32 +02:00
|
|
|
if (obj->type == OSDTYPE_OSD && obj->osd_changed)
|
2016-03-08 21:42:08 +01:00
|
|
|
update_osd(osd, obj);
|
2012-09-28 21:38:52 +02:00
|
|
|
|
2016-06-30 21:38:50 +02:00
|
|
|
if (!obj->ass_packer)
|
|
|
|
obj->ass_packer = mp_ass_packer_alloc(obj);
|
|
|
|
|
|
|
|
MP_TARRAY_GROW(obj, obj->ass_imgs, obj->num_externals + 1);
|
|
|
|
|
|
|
|
append_ass(&obj->ass, &obj->vo_res, &obj->ass_imgs[0], &obj->changed);
|
|
|
|
for (int n = 0; n < obj->num_externals; n++) {
|
|
|
|
append_ass(&obj->externals[n].ass, &obj->vo_res, &obj->ass_imgs[n + 1],
|
|
|
|
&obj->changed);
|
|
|
|
}
|
2016-03-08 21:29:29 +01:00
|
|
|
|
2016-06-30 21:38:50 +02:00
|
|
|
mp_ass_packer_pack(obj->ass_packer, obj->ass_imgs, obj->num_externals + 1,
|
2016-07-03 18:33:28 +02:00
|
|
|
obj->changed, format, out_imgs);
|
2012-09-28 21:38:52 +02:00
|
|
|
|
2016-06-30 21:38:50 +02:00
|
|
|
obj->changed = false;
|
2012-09-28 21:38:52 +02:00
|
|
|
}
|