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
5ce9dc48
Commit
5ce9dc48
authored
May 06, 2010
by
Laurent Aimar
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Used subpicture_updater_t for vout_OSDText/Message.
parent
cae552ce
Changes
5
Hide whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
117 additions
and
104 deletions
+117
-104
include/vlc_vout_osd.h
include/vlc_vout_osd.h
+18
-8
src/libvlccore.sym
src/libvlccore.sym
+1
-0
src/video_output/video_output.c
src/video_output/video_output.c
+3
-11
src/video_output/video_text.c
src/video_output/video_text.c
+95
-82
src/video_output/vout_internal.h
src/video_output/vout_internal.h
+0
-3
No files found.
include/vlc_vout_osd.h
View file @
5ce9dc48
...
...
@@ -49,12 +49,24 @@ extern "C" {
VLC_EXPORT
(
int
,
vout_OSDEpg
,
(
vout_thread_t
*
,
input_item_t
*
)
);
/**
* Write an informative message at the default location,
* for the default duration and only if the OSD option is enabled.
* \param p_caller The object that called the function.
* \param i_channel Subpicture channel
* \param psz_format printf style formatting
**/
* \brief Write an informative message if the OSD option is enabled.
* \param vout The vout on which the message will be displayed
* \param channel Subpicture channel
* \param position Position of the text
* \param duration Duration of the text being displayed
* \param text Text to be displayed
*/
VLC_EXPORT
(
void
,
vout_OSDText
,
(
vout_thread_t
*
vout
,
int
channel
,
int
position
,
mtime_t
duration
,
const
char
*
text
)
);
/**
* \brief Write an informative message at the default location,
* for the default duration and only if the OSD option is enabled.
* \param vout The vout on which the message will be displayed
* \param channel Subpicture channel
* \param format printf style formatting
*
* Provided for convenience.
*/
VLC_EXPORT
(
void
,
vout_OSDMessage
,
(
vout_thread_t
*
,
int
,
const
char
*
,
...
)
LIBVLC_FORMAT
(
3
,
4
)
);
/**
...
...
@@ -63,7 +75,6 @@ VLC_EXPORT( void, vout_OSDMessage, ( vout_thread_t *, int, const char *, ... )
* \param i_channel Subpicture channel
* \param i_postion Current position in the slider
* \param i_type Types are: OSD_HOR_SLIDER and OSD_VERT_SLIDER.
* @see vlc_osd.h
*/
VLC_EXPORT
(
void
,
vout_OSDSlider
,
(
vout_thread_t
*
,
int
,
int
,
short
)
);
...
...
@@ -72,7 +83,6 @@ VLC_EXPORT( void, vout_OSDSlider, ( vout_thread_t *, int, int , short ) );
* \param p_this The object that called the function.
* \param i_channel Subpicture channel
* \param i_type Types are: OSD_PLAY_ICON, OSD_PAUSE_ICON, OSD_SPEAKER_ICON, OSD_MUTE_ICON
* @see vlc_osd.h
*/
VLC_EXPORT
(
void
,
vout_OSDIcon
,
(
vout_thread_t
*
,
int
,
short
)
);
...
...
src/libvlccore.sym
View file @
5ce9dc48
...
...
@@ -621,6 +621,7 @@ vout_OSDIcon
vout_OSDMessage
vout_OSDEpg
vout_OSDSlider
vout_OSDText
vout_Request
vout_window_New
vout_window_Control
...
...
src/video_output/video_output.c
View file @
5ce9dc48
...
...
@@ -844,22 +844,14 @@ static int ThreadManage(vout_thread_t *vout,
static
void
ThreadDisplayOsdTitle
(
vout_thread_t
*
vout
,
const
char
*
string
)
{
if
(
!
var_InheritBool
(
vout
,
"osd"
))
return
;
if
(
!
vout
->
p
->
title
.
show
)
return
;
vlc_assert_locked
(
&
vout
->
p
->
change_lock
);
if
(
vout
->
p
->
title
.
timeout
>
0
)
vout_ShowTextRelative
(
vout
,
SPU_DEFAULT_CHANNEL
,
string
,
NULL
,
vout
->
p
->
title
.
position
,
30
+
vout
->
p
->
fmt_in
.
i_width
-
vout
->
p
->
fmt_in
.
i_visible_width
-
vout
->
p
->
fmt_in
.
i_x_offset
,
20
+
vout
->
p
->
fmt_in
.
i_y_offset
,
INT64_C
(
1000
)
*
vout
->
p
->
title
.
timeout
);
vout_OSDText
(
vout
,
SPU_DEFAULT_CHANNEL
,
vout
->
p
->
title
.
position
,
INT64_C
(
1000
)
*
vout
->
p
->
title
.
timeout
,
string
);
}
static
void
ThreadChangeFilters
(
vout_thread_t
*
vout
,
const
char
*
filters
)
...
...
src/video_output/video_text.c
View file @
5ce9dc48
/*****************************************************************************
* video_text.c : text manipulation functions
* video_text.c :
OSD
text manipulation functions
*****************************************************************************
* Copyright (C) 1999-20
07
the VideoLAN team
* Copyright (C) 1999-20
10
the VideoLAN team
* $Id$
*
* Author: Sigmund Augdal Helberg <dnumgis@videolan.org>
* Laurent Aimar <fenrir _AT_ videolan _DOT_ org>
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
...
...
@@ -28,98 +29,110 @@
#include <vlc_common.h>
#include <vlc_vout.h>
#include <vlc_block.h>
#include <vlc_filter.h>
#include <vlc_osd.h>
/* TODO remove access to private vout data */
#include "vout_internal.h"
/**
* \brief Show text on the video from a given start date to a given end date
* \param p_vout pointer to the vout the text is to be showed on
* \param i_channel Subpicture channel
* \param psz_string The text to be shown
* \param p_style Pointer to a struct with text style info (it is duplicated if non NULL)
* \param i_flags flags for alignment and such
* \param i_hmargin horizontal margin in pixels
* \param i_vmargin vertical margin in pixels
* \param i_duration Amount of time the text is to be shown.
*/
int
vout_ShowTextRelative
(
vout_thread_t
*
p_vout
,
int
i_channel
,
const
char
*
psz_string
,
const
text_style_t
*
p_style
,
int
i_flags
,
int
i_hmargin
,
int
i_vmargin
,
mtime_t
i_duration
)
#include <vlc_vout_osd.h>
struct
subpicture_updater_sys_t
{
int
position
;
char
*
text
;
};
static
int
OSDTextValidate
(
subpicture_t
*
subpic
,
bool
has_src_changed
,
const
video_format_t
*
fmt_src
,
bool
has_dst_changed
,
const
video_format_t
*
fmt_dst
,
mtime_t
ts
)
{
VLC_UNUSED
(
subpic
);
VLC_UNUSED
(
ts
);
VLC_UNUSED
(
fmt_src
);
VLC_UNUSED
(
has_dst_changed
);
VLC_UNUSED
(
fmt_dst
);
if
(
!
has_src_changed
&&
!
has_dst_changed
)
return
VLC_SUCCESS
;
return
VLC_EGENERIC
;
}
static
void
OSDTextUpdate
(
subpicture_t
*
subpic
,
const
video_format_t
*
fmt_src
,
const
video_format_t
*
fmt_dst
,
mtime_t
ts
)
{
subpicture_t
*
p_spu
;
subpicture_updater_sys_t
*
sys
=
subpic
->
updater
.
p_sys
;
VLC_UNUSED
(
fmt_dst
);
VLC_UNUSED
(
ts
);
subpic
->
i_original_picture_width
=
fmt_src
->
i_width
;
subpic
->
i_original_picture_height
=
fmt_src
->
i_height
;
video_format_t
fmt
;
video_format_Init
(
&
fmt
,
VLC_CODEC_TEXT
);
fmt
.
i_sar_num
=
0
;
fmt
.
i_sar_den
=
1
;
if
(
!
psz_string
)
return
VLC_EGENERIC
;
p_spu
=
subpicture_New
(
NULL
);
if
(
!
p_spu
)
return
VLC_EGENERIC
;
p_spu
->
i_channel
=
i_channel
;
p_spu
->
i_start
=
mdate
();
p_spu
->
i_stop
=
p_spu
->
i_start
+
i_duration
;
p_spu
->
b_ephemer
=
true
;
p_spu
->
b_absolute
=
false
;
p_spu
->
b_fade
=
true
;
/* Create a new subpicture region */
memset
(
&
fmt
,
0
,
sizeof
(
video_format_t
)
);
fmt
.
i_chroma
=
VLC_CODEC_TEXT
;
fmt
.
i_width
=
fmt
.
i_height
=
0
;
fmt
.
i_x_offset
=
fmt
.
i_y_offset
=
0
;
p_spu
->
p_region
=
subpicture_region_New
(
&
fmt
);
if
(
!
p_spu
->
p_region
)
{
msg_Err
(
p_vout
,
"cannot allocate SPU region"
);
subpicture_Delete
(
p_spu
);
return
VLC_EGENERIC
;
}
subpicture_region_t
*
r
=
subpic
->
p_region
=
subpicture_region_New
(
&
fmt
);
if
(
!
r
)
return
;
p_spu
->
p_region
->
psz_text
=
strdup
(
psz_string
);
p_spu
->
p_region
->
i_align
=
i_flags
&
SUBPICTURE_ALIGN_MASK
;
p_spu
->
p_region
->
i_x
=
i_hmargin
;
p_spu
->
p_region
->
i_y
=
i_vmargin
;
if
(
p_style
)
p_spu
->
p_region
->
p_style
=
text_style_Duplicate
(
p_style
);
r
->
psz_text
=
strdup
(
sys
->
text
);
r
->
i_align
=
sys
->
position
;
r
->
i_x
=
30
+
fmt_src
->
i_width
-
fmt_src
->
i_visible_width
-
fmt_src
->
i_x_offset
;
r
->
i_y
=
20
+
fmt_src
->
i_y_offset
;
}
spu_DisplaySubpicture
(
vout_GetSpu
(
p_vout
),
p_spu
);
static
void
OSDTextDestroy
(
subpicture_t
*
subpic
)
{
subpicture_updater_sys_t
*
sys
=
subpic
->
updater
.
p_sys
;
return
VLC_SUCCESS
;
free
(
sys
->
text
);
free
(
sys
);
}
/**
* \brief Write an informative message at the default location,
* for the default duration and only if the OSD option is enabled.
* \param p_caller The object that called the function.
* \param i_channel Subpicture channel
* \param psz_format printf style formatting
**/
void
vout_OSDMessage
(
vout_thread_t
*
p_vout
,
int
i_channel
,
const
char
*
psz_format
,
...
)
void
vout_OSDText
(
vout_thread_t
*
vout
,
int
channel
,
int
position
,
mtime_t
duration
,
const
char
*
text
)
{
if
(
!
var_InheritBool
(
p_vout
,
"osd"
)
)
assert
(
(
position
&
~
SUBPICTURE_ALIGN_MASK
)
==
0
);
if
(
!
var_InheritBool
(
vout
,
"osd"
)
||
duration
<=
0
)
return
;
subpicture_updater_sys_t
*
sys
=
malloc
(
sizeof
(
*
sys
));
if
(
!
sys
)
return
;
sys
->
position
=
position
;
sys
->
text
=
strdup
(
text
);
subpicture_updater_t
updater
=
{
.
pf_validate
=
OSDTextValidate
,
.
pf_update
=
OSDTextUpdate
,
.
pf_destroy
=
OSDTextDestroy
,
.
p_sys
=
sys
,
};
subpicture_t
*
subpic
=
subpicture_New
(
&
updater
);
if
(
!
subpic
)
{
free
(
sys
->
text
);
free
(
sys
);
return
;
}
subpic
->
i_channel
=
channel
;
subpic
->
i_start
=
mdate
();
subpic
->
i_stop
=
subpic
->
i_start
+
duration
;
subpic
->
b_ephemer
=
true
;
subpic
->
b_absolute
=
false
;
subpic
->
b_fade
=
true
;
spu_DisplaySubpicture
(
vout_GetSpu
(
vout
),
subpic
);
}
void
vout_OSDMessage
(
vout_thread_t
*
vout
,
int
channel
,
const
char
*
format
,
...)
{
va_list
args
;
va_start
(
args
,
psz_format
);
char
*
psz_string
;
if
(
vasprintf
(
&
psz_string
,
psz_format
,
args
)
!=
-
1
)
{
vout_ShowTextRelative
(
p_vout
,
i_channel
,
psz_string
,
NULL
,
SUBPICTURE_ALIGN_TOP
|
SUBPICTURE_ALIGN_RIGHT
,
30
+
p_vout
->
p
->
fmt_in
.
i_width
-
p_vout
->
p
->
fmt_in
.
i_visible_width
-
p_vout
->
p
->
fmt_in
.
i_x_offset
,
20
+
p_vout
->
p
->
fmt_in
.
i_y_offset
,
1000000
);
free
(
psz_string
);
va_start
(
args
,
format
);
char
*
string
;
if
(
vasprintf
(
&
string
,
format
,
args
)
!=
-
1
)
{
vout_OSDText
(
vout
,
channel
,
SUBPICTURE_ALIGN_TOP
|
SUBPICTURE_ALIGN_RIGHT
,
1000000
,
string
);
free
(
string
);
}
va_end
(
args
);
va_end
(
args
);
}
src/video_output/vout_internal.h
View file @
5ce9dc48
...
...
@@ -169,8 +169,5 @@ void vout_DisplayWrapper(vout_thread_t *, picture_t *);
/* */
int
spu_ProcessMouse
(
spu_t
*
,
const
vlc_mouse_t
*
,
const
video_format_t
*
);
/* */
int
vout_ShowTextRelative
(
vout_thread_t
*
,
int
,
const
char
*
,
const
text_style_t
*
,
int
,
int
,
int
,
mtime_t
);
#endif
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