Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
V
vlc
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
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
Show 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" {
...
@@ -49,12 +49,24 @@ extern "C" {
VLC_EXPORT
(
int
,
vout_OSDEpg
,
(
vout_thread_t
*
,
input_item_t
*
)
);
VLC_EXPORT
(
int
,
vout_OSDEpg
,
(
vout_thread_t
*
,
input_item_t
*
)
);
/**
/**
* Write an informative message at the default location,
* \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.
* for the default duration and only if the OSD option is enabled.
* \param p_caller The object that called the function.
* \param vout The vout on which the message will be displayed
* \param i_channel Subpicture channel
* \param channel Subpicture channel
* \param psz_format printf style formatting
* \param format printf style formatting
**/
*
* Provided for convenience.
*/
VLC_EXPORT
(
void
,
vout_OSDMessage
,
(
vout_thread_t
*
,
int
,
const
char
*
,
...
)
LIBVLC_FORMAT
(
3
,
4
)
);
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 *, ... )
...
@@ -63,7 +75,6 @@ VLC_EXPORT( void, vout_OSDMessage, ( vout_thread_t *, int, const char *, ... )
* \param i_channel Subpicture channel
* \param i_channel Subpicture channel
* \param i_postion Current position in the slider
* \param i_postion Current position in the slider
* \param i_type Types are: OSD_HOR_SLIDER and OSD_VERT_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
)
);
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 ) );
...
@@ -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 p_this The object that called the function.
* \param i_channel Subpicture channel
* \param i_channel Subpicture channel
* \param i_type Types are: OSD_PLAY_ICON, OSD_PAUSE_ICON, OSD_SPEAKER_ICON, OSD_MUTE_ICON
* \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
)
);
VLC_EXPORT
(
void
,
vout_OSDIcon
,
(
vout_thread_t
*
,
int
,
short
)
);
...
...
src/libvlccore.sym
View file @
5ce9dc48
...
@@ -621,6 +621,7 @@ vout_OSDIcon
...
@@ -621,6 +621,7 @@ vout_OSDIcon
vout_OSDMessage
vout_OSDMessage
vout_OSDEpg
vout_OSDEpg
vout_OSDSlider
vout_OSDSlider
vout_OSDText
vout_Request
vout_Request
vout_window_New
vout_window_New
vout_window_Control
vout_window_Control
...
...
src/video_output/video_output.c
View file @
5ce9dc48
...
@@ -844,22 +844,14 @@ static int ThreadManage(vout_thread_t *vout,
...
@@ -844,22 +844,14 @@ static int ThreadManage(vout_thread_t *vout,
static
void
ThreadDisplayOsdTitle
(
vout_thread_t
*
vout
,
const
char
*
string
)
static
void
ThreadDisplayOsdTitle
(
vout_thread_t
*
vout
,
const
char
*
string
)
{
{
if
(
!
var_InheritBool
(
vout
,
"osd"
))
return
;
if
(
!
vout
->
p
->
title
.
show
)
if
(
!
vout
->
p
->
title
.
show
)
return
;
return
;
vlc_assert_locked
(
&
vout
->
p
->
change_lock
);
vlc_assert_locked
(
&
vout
->
p
->
change_lock
);
if
(
vout
->
p
->
title
.
timeout
>
0
)
vout_OSDText
(
vout
,
SPU_DEFAULT_CHANNEL
,
vout_ShowTextRelative
(
vout
,
SPU_DEFAULT_CHANNEL
,
vout
->
p
->
title
.
position
,
INT64_C
(
1000
)
*
vout
->
p
->
title
.
timeout
,
string
,
NULL
,
string
);
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
);
}
}
static
void
ThreadChangeFilters
(
vout_thread_t
*
vout
,
const
char
*
filters
)
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$
* $Id$
*
*
* Author: Sigmund Augdal Helberg <dnumgis@videolan.org>
* 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
* 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
* it under the terms of the GNU General Public License as published by
...
@@ -28,98 +29,110 @@
...
@@ -28,98 +29,110 @@
#include <vlc_common.h>
#include <vlc_common.h>
#include <vlc_vout.h>
#include <vlc_vout.h>
#include <vlc_block.h>
#include <vlc_vout_osd.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
)
{
subpicture_t
*
p_spu
;
video_format_t
fmt
;
if
(
!
psz_string
)
return
VLC_EGENERIC
;
struct
subpicture_updater_sys_t
{
int
position
;
char
*
text
;
};
p_spu
=
subpicture_New
(
NULL
);
static
int
OSDTextValidate
(
subpicture_t
*
subpic
,
if
(
!
p_spu
)
bool
has_src_changed
,
const
video_format_t
*
fmt_src
,
return
VLC_EGENERIC
;
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
);
p_spu
->
i_channel
=
i_channel
;
if
(
!
has_src_changed
&&
!
has_dst_changed
)
p_spu
->
i_start
=
mdate
();
return
VLC_SUCCESS
;
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
;
return
VLC_EGENERIC
;
}
}
p_spu
->
p_region
->
psz_text
=
strdup
(
psz_string
);
static
void
OSDTextUpdate
(
subpicture_t
*
subpic
,
p_spu
->
p_region
->
i_align
=
i_flags
&
SUBPICTURE_ALIGN_MASK
;
const
video_format_t
*
fmt_src
,
p_spu
->
p_region
->
i_x
=
i_hmargin
;
const
video_format_t
*
fmt_dst
,
p_spu
->
p_region
->
i_y
=
i_vmargin
;
mtime_t
ts
)
if
(
p_style
)
{
p_spu
->
p_region
->
p_style
=
text_style_Duplicate
(
p_style
);
subpicture_updater_sys_t
*
sys
=
subpic
->
updater
.
p_sys
;
VLC_UNUSED
(
fmt_dst
);
VLC_UNUSED
(
ts
);
spu_DisplaySubpicture
(
vout_GetSpu
(
p_vout
),
p_spu
);
subpic
->
i_original_picture_width
=
fmt_src
->
i_width
;
subpic
->
i_original_picture_height
=
fmt_src
->
i_height
;
return
VLC_SUCCESS
;
video_format_t
fmt
;
video_format_Init
(
&
fmt
,
VLC_CODEC_TEXT
);
fmt
.
i_sar_num
=
0
;
fmt
.
i_sar_den
=
1
;
subpicture_region_t
*
r
=
subpic
->
p_region
=
subpicture_region_New
(
&
fmt
);
if
(
!
r
)
return
;
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
;
}
}
/**
static
void
OSDTextDestroy
(
subpicture_t
*
subpic
)
* \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
,
...
)
{
{
if
(
!
var_InheritBool
(
p_vout
,
"osd"
)
)
subpicture_updater_sys_t
*
sys
=
subpic
->
updater
.
p_sys
;
free
(
sys
->
text
);
free
(
sys
);
}
void
vout_OSDText
(
vout_thread_t
*
vout
,
int
channel
,
int
position
,
mtime_t
duration
,
const
char
*
text
)
{
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
;
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_list
args
;
va_start
(
args
,
psz_format
);
va_start
(
args
,
format
);
char
*
psz_string
;
char
*
string
;
if
(
vasprintf
(
&
psz_string
,
psz_format
,
args
)
!=
-
1
)
if
(
vasprintf
(
&
string
,
format
,
args
)
!=
-
1
)
{
{
vout_OSDText
(
vout
,
channel
,
vout_ShowTextRelative
(
p_vout
,
i_channel
,
psz_string
,
NULL
,
SUBPICTURE_ALIGN_TOP
|
SUBPICTURE_ALIGN_RIGHT
,
1000000
,
SUBPICTURE_ALIGN_TOP
|
SUBPICTURE_ALIGN_RIGHT
,
string
);
30
+
p_vout
->
p
->
fmt_in
.
i_width
free
(
string
);
-
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_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 *);
...
@@ -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
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
#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