Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
V
vlc-2-2
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Redmine
Redmine
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Operations
Operations
Metrics
Environments
Analytics
Analytics
CI / CD
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
videolan
vlc-2-2
Commits
f3f0a7fa
Commit
f3f0a7fa
authored
Sep 09, 2013
by
Jean-Baptiste Kempf
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Freetype: move ProcessNodes to text_renderer
parent
4f9007cf
Changes
3
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
157 additions
and
148 deletions
+157
-148
modules/text_renderer/freetype.c
modules/text_renderer/freetype.c
+0
-148
modules/text_renderer/text_renderer.c
modules/text_renderer/text_renderer.c
+148
-0
modules/text_renderer/text_renderer.h
modules/text_renderer/text_renderer.h
+9
-0
No files found.
modules/text_renderer/freetype.c
View file @
f3f0a7fa
...
...
@@ -39,7 +39,6 @@
#include <vlc_stream.h>
/* stream_MemoryNew */
#include <vlc_input.h>
/* vlc_input_attachment_* */
#include <vlc_xml.h>
/* xml_reader */
#include <vlc_strings.h>
/* resolve_xml_special_chars */
#include <vlc_dialog.h>
/* FcCache dialog */
#include <vlc_filter.h>
/* filter_sys_t */
#include <vlc_text_style.h>
/* text_style_t*/
...
...
@@ -1245,153 +1244,6 @@ static inline int RenderAXYZ( filter_t *p_filter,
static
int
ProcessNodes
(
filter_t
*
p_filter
,
uni_char_t
*
psz_text
,
text_style_t
**
pp_styles
,
uint32_t
*
pi_k_dates
,
int
*
pi_len
,
xml_reader_t
*
p_xml_reader
,
text_style_t
*
p_font_style
,
text_style_t
*
p_default_style
)
{
int
rv
=
VLC_SUCCESS
;
int
i_text_length
=
0
;
font_stack_t
*
p_fonts
=
NULL
;
uint32_t
i_k_date
=
0
;
int
i_style_flags
=
0
;
if
(
p_font_style
)
{
/* If the font is not specified in the style, assume the system font */
if
(
!
p_font_style
->
psz_fontname
)
p_font_style
->
psz_fontname
=
strdup
(
p_default_style
->
psz_fontname
);
rv
=
PushFont
(
&
p_fonts
,
p_font_style
->
psz_fontname
,
p_font_style
->
i_font_size
>
0
?
p_font_style
->
i_font_size
:
p_default_style
->
i_font_size
,
(
p_font_style
->
i_font_color
&
0xffffff
)
|
((
p_font_style
->
i_font_alpha
&
0xff
)
<<
24
),
(
p_font_style
->
i_karaoke_background_color
&
0xffffff
)
|
((
p_font_style
->
i_karaoke_background_alpha
&
0xff
)
<<
24
));
i_style_flags
=
p_font_style
->
i_style_flags
&
(
STYLE_BOLD
|
STYLE_ITALIC
|
STYLE_UNDERLINE
|
STYLE_STRIKEOUT
);
}
else
{
uint32_t
i_font_size
=
p_default_style
->
i_font_size
;
uint32_t
i_font_color
=
var_InheritInteger
(
p_filter
,
"freetype-color"
);
i_font_color
=
VLC_CLIP
(
i_font_color
,
0
,
0xFFFFFF
);
int
i_font_alpha
=
p_default_style
->
i_font_alpha
;
rv
=
PushFont
(
&
p_fonts
,
p_default_style
->
psz_fontname
,
i_font_size
,
(
i_font_color
&
0xffffff
)
|
((
i_font_alpha
&
0xff
)
<<
24
),
0x00ffffff
);
}
if
(
p_default_style
->
i_style_flags
&
STYLE_BOLD
)
i_style_flags
|=
STYLE_BOLD
;
if
(
rv
!=
VLC_SUCCESS
)
return
rv
;
const
char
*
node
;
int
type
;
while
(
(
type
=
xml_ReaderNextNode
(
p_xml_reader
,
&
node
))
>
0
)
{
switch
(
type
)
{
case
XML_READER_ENDELEM
:
if
(
!
strcasecmp
(
"font"
,
node
)
)
PopFont
(
&
p_fonts
);
else
if
(
!
strcasecmp
(
"tt"
,
node
)
)
PopFont
(
&
p_fonts
);
else
if
(
!
strcasecmp
(
"b"
,
node
)
)
i_style_flags
&=
~
STYLE_BOLD
;
else
if
(
!
strcasecmp
(
"i"
,
node
)
)
i_style_flags
&=
~
STYLE_ITALIC
;
else
if
(
!
strcasecmp
(
"u"
,
node
)
)
i_style_flags
&=
~
STYLE_UNDERLINE
;
else
if
(
!
strcasecmp
(
"s"
,
node
)
)
i_style_flags
&=
~
STYLE_STRIKEOUT
;
break
;
case
XML_READER_STARTELEM
:
if
(
!
strcasecmp
(
"font"
,
node
)
)
HandleFontAttributes
(
p_xml_reader
,
&
p_fonts
);
else
if
(
!
strcasecmp
(
"tt"
,
node
)
)
HandleTT
(
&
p_fonts
,
p_default_style
->
psz_monofontname
);
else
if
(
!
strcasecmp
(
"b"
,
node
)
)
i_style_flags
|=
STYLE_BOLD
;
else
if
(
!
strcasecmp
(
"i"
,
node
)
)
i_style_flags
|=
STYLE_ITALIC
;
else
if
(
!
strcasecmp
(
"u"
,
node
)
)
i_style_flags
|=
STYLE_UNDERLINE
;
else
if
(
!
strcasecmp
(
"s"
,
node
)
)
i_style_flags
|=
STYLE_STRIKEOUT
;
else
if
(
!
strcasecmp
(
"br"
,
node
)
)
{
i_text_length
+=
SetupText
(
p_filter
,
&
psz_text
[
i_text_length
],
&
pp_styles
[
i_text_length
],
pi_k_dates
?
&
pi_k_dates
[
i_text_length
]
:
NULL
,
"
\n
"
,
GetStyleFromFontStack
(
p_filter
,
&
p_fonts
,
p_default_style
,
i_style_flags
),
i_k_date
);
}
else
if
(
!
strcasecmp
(
"k"
,
node
)
)
{
/* Karaoke tags */
const
char
*
name
,
*
value
;
while
(
(
name
=
xml_ReaderNextAttr
(
p_xml_reader
,
&
value
))
!=
NULL
)
{
if
(
!
strcasecmp
(
"t"
,
name
)
&&
value
)
i_k_date
+=
atoi
(
value
);
}
}
break
;
case
XML_READER_TEXT
:
{
char
*
psz_node
=
strdup
(
node
);
if
(
unlikely
(
!
psz_node
)
)
break
;
HandleWhiteSpace
(
psz_node
);
resolve_xml_special_chars
(
psz_node
);
i_text_length
+=
SetupText
(
p_filter
,
&
psz_text
[
i_text_length
],
&
pp_styles
[
i_text_length
],
pi_k_dates
?
&
pi_k_dates
[
i_text_length
]
:
NULL
,
psz_node
,
GetStyleFromFontStack
(
p_filter
,
&
p_fonts
,
p_default_style
,
i_style_flags
),
i_k_date
);
free
(
psz_node
);
break
;
}
}
}
*
pi_len
=
i_text_length
;
while
(
VLC_SUCCESS
==
PopFont
(
&
p_fonts
)
);
return
VLC_SUCCESS
;
}
static
void
FreeLine
(
line_desc_t
*
p_line
)
{
for
(
int
i
=
0
;
i
<
p_line
->
i_character_count
;
i
++
)
...
...
modules/text_renderer/text_renderer.c
View file @
f3f0a7fa
...
...
@@ -34,6 +34,7 @@
#include <vlc_filter.h>
/* filter_sys_t */
#include <vlc_xml.h>
/* xml_reader */
#include <vlc_charset.h>
/* ToCharset */
#include <vlc_strings.h>
/* resolve_xml_special_chars */
#include "text_renderer.h"
...
...
@@ -523,4 +524,151 @@ text_style_t *GetStyleFromFontStack( filter_t *p_filter,
i_style_flags
);
}
int
ProcessNodes
(
filter_t
*
p_filter
,
uni_char_t
*
psz_text
,
text_style_t
**
pp_styles
,
uint32_t
*
pi_k_dates
,
int
*
pi_len
,
xml_reader_t
*
p_xml_reader
,
text_style_t
*
p_font_style
,
text_style_t
*
p_default_style
)
{
int
rv
=
VLC_SUCCESS
;
int
i_text_length
=
0
;
font_stack_t
*
p_fonts
=
NULL
;
uint32_t
i_k_date
=
0
;
int
i_style_flags
=
0
;
if
(
p_font_style
)
{
/* If the font is not specified in the style, assume the system font */
if
(
!
p_font_style
->
psz_fontname
)
p_font_style
->
psz_fontname
=
strdup
(
p_default_style
->
psz_fontname
);
rv
=
PushFont
(
&
p_fonts
,
p_font_style
->
psz_fontname
,
p_font_style
->
i_font_size
>
0
?
p_font_style
->
i_font_size
:
p_default_style
->
i_font_size
,
(
p_font_style
->
i_font_color
&
0xffffff
)
|
((
p_font_style
->
i_font_alpha
&
0xff
)
<<
24
),
(
p_font_style
->
i_karaoke_background_color
&
0xffffff
)
|
((
p_font_style
->
i_karaoke_background_alpha
&
0xff
)
<<
24
));
i_style_flags
=
p_font_style
->
i_style_flags
&
(
STYLE_BOLD
|
STYLE_ITALIC
|
STYLE_UNDERLINE
|
STYLE_STRIKEOUT
);
}
else
{
uint32_t
i_font_size
=
p_default_style
->
i_font_size
;
uint32_t
i_font_color
=
var_InheritInteger
(
p_filter
,
"freetype-color"
);
i_font_color
=
VLC_CLIP
(
i_font_color
,
0
,
0xFFFFFF
);
int
i_font_alpha
=
p_default_style
->
i_font_alpha
;
rv
=
PushFont
(
&
p_fonts
,
p_default_style
->
psz_fontname
,
i_font_size
,
(
i_font_color
&
0xffffff
)
|
((
i_font_alpha
&
0xff
)
<<
24
),
0x00ffffff
);
}
if
(
p_default_style
->
i_style_flags
&
STYLE_BOLD
)
i_style_flags
|=
STYLE_BOLD
;
if
(
rv
!=
VLC_SUCCESS
)
return
rv
;
const
char
*
node
;
int
type
;
while
(
(
type
=
xml_ReaderNextNode
(
p_xml_reader
,
&
node
))
>
0
)
{
switch
(
type
)
{
case
XML_READER_ENDELEM
:
if
(
!
strcasecmp
(
"font"
,
node
)
)
PopFont
(
&
p_fonts
);
else
if
(
!
strcasecmp
(
"tt"
,
node
)
)
PopFont
(
&
p_fonts
);
else
if
(
!
strcasecmp
(
"b"
,
node
)
)
i_style_flags
&=
~
STYLE_BOLD
;
else
if
(
!
strcasecmp
(
"i"
,
node
)
)
i_style_flags
&=
~
STYLE_ITALIC
;
else
if
(
!
strcasecmp
(
"u"
,
node
)
)
i_style_flags
&=
~
STYLE_UNDERLINE
;
else
if
(
!
strcasecmp
(
"s"
,
node
)
)
i_style_flags
&=
~
STYLE_STRIKEOUT
;
break
;
case
XML_READER_STARTELEM
:
if
(
!
strcasecmp
(
"font"
,
node
)
)
HandleFontAttributes
(
p_xml_reader
,
&
p_fonts
);
else
if
(
!
strcasecmp
(
"tt"
,
node
)
)
HandleTT
(
&
p_fonts
,
p_default_style
->
psz_monofontname
);
else
if
(
!
strcasecmp
(
"b"
,
node
)
)
i_style_flags
|=
STYLE_BOLD
;
else
if
(
!
strcasecmp
(
"i"
,
node
)
)
i_style_flags
|=
STYLE_ITALIC
;
else
if
(
!
strcasecmp
(
"u"
,
node
)
)
i_style_flags
|=
STYLE_UNDERLINE
;
else
if
(
!
strcasecmp
(
"s"
,
node
)
)
i_style_flags
|=
STYLE_STRIKEOUT
;
else
if
(
!
strcasecmp
(
"br"
,
node
)
)
{
i_text_length
+=
SetupText
(
p_filter
,
&
psz_text
[
i_text_length
],
&
pp_styles
[
i_text_length
],
pi_k_dates
?
&
pi_k_dates
[
i_text_length
]
:
NULL
,
"
\n
"
,
GetStyleFromFontStack
(
p_filter
,
&
p_fonts
,
p_default_style
,
i_style_flags
),
i_k_date
);
}
else
if
(
!
strcasecmp
(
"k"
,
node
)
)
{
/* Karaoke tags */
const
char
*
name
,
*
value
;
while
(
(
name
=
xml_ReaderNextAttr
(
p_xml_reader
,
&
value
))
!=
NULL
)
{
if
(
!
strcasecmp
(
"t"
,
name
)
&&
value
)
i_k_date
+=
atoi
(
value
);
}
}
break
;
case
XML_READER_TEXT
:
{
char
*
psz_node
=
strdup
(
node
);
if
(
unlikely
(
!
psz_node
)
)
break
;
HandleWhiteSpace
(
psz_node
);
resolve_xml_special_chars
(
psz_node
);
i_text_length
+=
SetupText
(
p_filter
,
&
psz_text
[
i_text_length
],
&
pp_styles
[
i_text_length
],
pi_k_dates
?
&
pi_k_dates
[
i_text_length
]
:
NULL
,
psz_node
,
GetStyleFromFontStack
(
p_filter
,
&
p_fonts
,
p_default_style
,
i_style_flags
),
i_k_date
);
free
(
psz_node
);
break
;
}
}
}
*
pi_len
=
i_text_length
;
while
(
VLC_SUCCESS
==
PopFont
(
&
p_fonts
)
);
return
VLC_SUCCESS
;
}
modules/text_renderer/text_renderer.h
View file @
f3f0a7fa
...
...
@@ -88,3 +88,12 @@ unsigned SetupText( filter_t *p_filter,
bool
FaceStyleEquals
(
const
text_style_t
*
p_style1
,
const
text_style_t
*
p_style2
);
/* Parser */
int
ProcessNodes
(
filter_t
*
p_filter
,
uni_char_t
*
psz_text
,
text_style_t
**
pp_styles
,
uint32_t
*
pi_k_dates
,
int
*
pi_len
,
xml_reader_t
*
p_xml_reader
,
text_style_t
*
p_font_style
,
text_style_t
*
p_default_style
);
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment