Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
V
vlc-gpu
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-gpu
Commits
11704ece
Commit
11704ece
authored
Nov 09, 2004
by
Gildas Bazin
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
* modules/video_filter/logo.c: whole bunch of fixes.
parent
ed673a8c
Changes
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
62 additions
and
82 deletions
+62
-82
modules/video_filter/logo.c
modules/video_filter/logo.c
+62
-82
No files found.
modules/video_filter/logo.c
View file @
11704ece
...
...
@@ -55,9 +55,8 @@ static int Control ( vout_thread_t *, int, va_list );
static
int
CreateFilter
(
vlc_object_t
*
);
static
void
DestroyFilter
(
vlc_object_t
*
);
static
int
LogoCallback
(
vlc_object_t
*
p_this
,
char
const
*
psz_var
,
vlc_value_t
oldval
,
vlc_value_t
newval
,
void
*
p_data
);
static
int
LogoCallback
(
vlc_object_t
*
,
char
const
*
,
vlc_value_t
,
vlc_value_t
,
void
*
);
/*****************************************************************************
* Module descriptor
...
...
@@ -107,14 +106,14 @@ vlc_module_end();
/*****************************************************************************
* LoadPNG: loads the PNG logo into memory
*****************************************************************************/
static
picture_t
*
LoadPNG
(
vlc_object_t
*
p_this
,
char
*
psz_filename
,
int
i_trans
)
static
picture_t
*
LoadPNG
(
vlc_object_t
*
p_this
,
char
*
psz_filename
,
int
i_trans
)
{
picture_t
*
p_pic
;
FILE
*
file
;
int
i
,
j
;
vlc_bool_t
b_alpha
=
VLC_TRUE
;
png_uint_32
i_width
,
i_height
;
int
i_color_type
,
i_interlace_type
,
i_compression_type
,
i_filter_type
;
int
i_bit_depth
;
...
...
@@ -538,13 +537,13 @@ struct filter_sys_t
char
*
psz_filename
;
int
i_trans
;
time_t
last_time
;
vlc_bool_t
b_absolute
;
mtime_t
i_last_date
;
/* On the fly control variable: */
/* On the fly control variable */
vlc_bool_t
b_need_update
;
vlc_bool_t
b_new
PNG
;
vlc_bool_t
b_new
_png
;
};
static
subpicture_t
*
Filter
(
filter_t
*
,
mtime_t
);
...
...
@@ -557,7 +556,7 @@ static int CreateFilter( vlc_object_t *p_this )
filter_t
*
p_filter
=
(
filter_t
*
)
p_this
;
filter_sys_t
*
p_sys
;
vlc_object_t
*
p_input
;
/* Allocate structure */
p_sys
=
p_filter
->
p_sys
=
malloc
(
sizeof
(
filter_sys_t
)
);
if
(
p_sys
==
NULL
)
...
...
@@ -565,10 +564,12 @@ static int CreateFilter( vlc_object_t *p_this )
msg_Err
(
p_filter
,
"out of memory"
);
return
VLC_ENOMEM
;
}
/* Hook used for callback variables */
p_input
=
vlc_object_find
(
p_this
,
VLC_OBJECT_INPUT
,
FIND_
ANYWHERE
);
p_input
=
vlc_object_find
(
p_this
,
VLC_OBJECT_INPUT
,
FIND_
PARENT
);
if
(
!
p_input
)
{
free
(
p_sys
);
return
VLC_ENOOBJ
;
}
...
...
@@ -576,6 +577,8 @@ static int CreateFilter( vlc_object_t *p_this )
if
(
!
p_sys
->
psz_filename
||
!*
p_sys
->
psz_filename
)
{
msg_Err
(
p_this
,
"logo file not specified"
);
vlc_object_release
(
p_input
);
free
(
p_sys
);
return
0
;
}
...
...
@@ -585,8 +588,6 @@ static int CreateFilter( vlc_object_t *p_this )
p_sys
->
i_trans
=
var_CreateGetInteger
(
p_input
,
"logo-transparency"
);
p_sys
->
i_trans
=
__MAX
(
__MIN
(
p_sys
->
i_trans
,
255
),
0
);
p_sys
->
p_pic
=
LoadPNG
(
p_this
,
p_sys
->
psz_filename
,
p_sys
->
i_trans
);
var_AddCallback
(
p_input
,
"logo-file"
,
LogoCallback
,
p_sys
);
var_AddCallback
(
p_input
,
"logo-x"
,
LogoCallback
,
p_sys
);
var_AddCallback
(
p_input
,
"logo-y"
,
LogoCallback
,
p_sys
);
...
...
@@ -608,14 +609,13 @@ static int CreateFilter( vlc_object_t *p_this )
return
VLC_EGENERIC
;
}
p_sys
->
i_width
=
p_sys
->
p_pic
->
p
[
Y_PLANE
].
i_visible_pitch
;
p_sys
->
i_height
=
p_sys
->
p_pic
->
p
[
Y_PLANE
].
i_visible_lines
;
p_sys
->
i_last_date
=
0
;
/* Misc init */
p_filter
->
pf_sub_filter
=
Filter
;
p_sys
->
i_width
=
p_sys
->
p_pic
->
p
[
Y_PLANE
].
i_visible_pitch
;
p_sys
->
i_height
=
p_sys
->
p_pic
->
p
[
Y_PLANE
].
i_visible_lines
;
p_sys
->
b_need_update
=
VLC_TRUE
;
p_sys
->
last_time
=
((
time_t
)
-
1
);
p_sys
->
b_new_png
=
VLC_FALSE
;
p_sys
->
i_last_date
=
0
;
return
VLC_SUCCESS
;
}
...
...
@@ -636,79 +636,67 @@ static void DestroyFilter( vlc_object_t *p_this )
free
(
p_sys
);
/* Delete the logo variables from INPUT */
p_input
=
vlc_object_find
(
p_this
,
VLC_OBJECT_INPUT
,
FIND_ANYWHERE
);
if
(
!
p_input
)
{
return
;
}
p_input
=
vlc_object_find
(
p_this
,
VLC_OBJECT_INPUT
,
FIND_PARENT
);
if
(
!
p_input
)
return
;
var_Destroy
(
p_input
,
"logo-file"
);
var_Destroy
(
p_input
,
"logo-x"
);
var_Destroy
(
p_input
,
"logo-y"
);
var_Destroy
(
p_input
,
"logo-position"
);
var_Destroy
(
p_input
,
"logo-transparency"
);
vlc_object_release
(
p_input
);
}
/****************************************************************************
/****************************************************************************
*
* Filter: the whole thing
****************************************************************************
****************************************************************************
*
* This function outputs subpictures at regular time intervals.
****************************************************************************/
****************************************************************************
*
/
static
subpicture_t
*
Filter
(
filter_t
*
p_filter
,
mtime_t
date
)
{
filter_sys_t
*
p_sys
=
p_filter
->
p_sys
;
subpicture_t
*
p_spu
;
subpicture_region_t
*
p_region
;
video_format_t
fmt
;
filter_sys_t
*
p_dummy
;
time_t
t
;
FILE
*
file
;
if
(
p_sys
->
last_time
==
time
(
NULL
)
)
{
return
NULL
;
}
if
(
!
p_sys
->
b_need_update
&&
p_sys
->
i_last_date
+
5000000
>
date
)
return
0
;
if
(
p_sys
->
b_need_update
==
VLC_FALSE
)
{
return
NULL
;
}
if
(
p_sys
->
b_newPNG
==
VLC_TRUE
)
if
(
p_sys
->
b_new_png
)
{
/* Trap invalid filenames, else get new graphic, swap for old */
if
(
!
(
file
=
fopen
(
p_sys
->
psz_filename
,
"rb"
))
)
{
msg_Err
(
p_filter
,
"logo file (%s) not found"
,
p_sys
->
psz_filename
);
p_sys
->
b_newPNG
=
VLC_FALSE
;
}
else
{
fclose
(
file
);
p_dummy
=
malloc
(
sizeof
(
filter_sys_t
)
);
p_dummy
->
p_pic
=
malloc
(
sizeof
(
picture_t
)
);
p_dummy
->
p_pic
=
LoadPNG
(
p_filter
,
p_sys
->
psz_filename
,
p_sys
->
i_trans
);
if
(
!
p_sys
->
p_pic
)
{
p_dummy
->
p_pic
=
p_sys
->
p_pic
;
}
/* if( p_sys->p_pic ) free( p_sys->p_pic ); */
p_sys
->
p_pic
=
p_dummy
->
p_pic
;
free
(
p_dummy
->
p_pic
);
free
(
p_dummy
);
p_sys
->
i_width
=
p_sys
->
p_pic
->
p
[
Y_PLANE
].
i_visible_pitch
;
p_sys
->
i_height
=
p_sys
->
p_pic
->
p
[
Y_PLANE
].
i_visible_lines
;
p_sys
->
i_last_date
=
0
;
p_sys
->
b_newPNG
=
VLC_FALSE
;
}
if
(
p_sys
->
p_pic
&&
p_sys
->
p_pic
->
p_data_orig
)
free
(
p_sys
->
p_pic
->
p_data_orig
);
if
(
p_sys
->
p_pic
)
free
(
p_sys
->
p_pic
);
p_sys
->
p_pic
=
LoadPNG
(
VLC_OBJECT
(
p_filter
),
p_sys
->
psz_filename
,
p_sys
->
i_trans
);
if
(
p_sys
->
p_pic
)
{
p_sys
->
i_width
=
p_sys
->
p_pic
->
p
[
Y_PLANE
].
i_visible_pitch
;
p_sys
->
i_height
=
p_sys
->
p_pic
->
p
[
Y_PLANE
].
i_visible_lines
;
}
p_sys
->
b_new_png
=
VLC_FALSE
;
}
p_sys
->
b_need_update
=
VLC_FALSE
;
/* Allocate the subpicture internal data. */
p_spu
=
p_filter
->
pf_sub_buffer_new
(
p_filter
);
if
(
!
p_spu
)
return
NULL
;
p_spu
->
b_absolute
=
p_sys
->
b_absolute
;
p_spu
->
i_start
=
p_sys
->
i_last_date
=
date
;
p_spu
->
i_stop
=
0
;
p_spu
->
b_ephemer
=
VLC_TRUE
;
p_sys
->
b_need_update
=
VLC_FALSE
;
if
(
!
p_sys
->
p_pic
||
!
p_sys
->
i_trans
)
{
/* Send an empty subpicture to clear the display */
return
p_spu
;
}
/* Create new SPU region */
memset
(
&
fmt
,
0
,
sizeof
(
video_format_t
)
);
fmt
.
i_chroma
=
VLC_FOURCC
(
'Y'
,
'U'
,
'V'
,
'A'
);
...
...
@@ -724,39 +712,31 @@ static subpicture_t *Filter( filter_t *p_filter, mtime_t date )
p_filter
->
pf_sub_buffer_del
(
p_filter
,
p_spu
);
return
NULL
;
}
t
=
p_sys
->
last_time
=
time
(
NULL
);
vout_CopyPicture
(
p_filter
,
&
p_region
->
picture
,
p_sys
->
p_pic
);
p_region
->
i_x
=
0
;
p_region
->
i_y
=
0
;
p_spu
->
i_x
=
p_sys
->
posx
;
p_spu
->
i_y
=
p_sys
->
posy
;
p_spu
->
i_flags
=
p_sys
->
pos
;
p_spu
->
b_absolute
=
p_sys
->
b_absolute
;
p_spu
->
p_region
=
p_region
;
p_spu
->
i_start
=
p_sys
->
i_last_date
=
date
;
p_spu
->
i_stop
=
0
;
p_spu
->
b_ephemer
=
VLC_TRUE
;
p_sys
->
b_need_update
=
VLC_FALSE
;
return
p_spu
;
}
/**********************************************************************
/*****************************************************************************
* Callback to update params on the fly
**********************************************************************/
**********************************************************************
*******
/
static
int
LogoCallback
(
vlc_object_t
*
p_this
,
char
const
*
psz_var
,
vlc_value_t
oldval
,
vlc_value_t
newval
,
void
*
p_data
)
vlc_value_t
oldval
,
vlc_value_t
newval
,
void
*
p_data
)
{
filter_sys_t
*
p_sys
=
(
filter_sys_t
*
)
p_data
;
filter_sys_t
*
p_sys
=
(
filter_sys_t
*
)
p_data
;
if
(
!
strncmp
(
psz_var
,
"logo-file"
,
6
)
)
{
if
(
p_sys
->
psz_filename
)
free
(
p_sys
->
psz_filename
);
p_sys
->
psz_filename
=
strdup
(
newval
.
psz_string
);
p_sys
->
b_new
PNG
=
VLC_TRUE
;
p_sys
->
b_new
_png
=
VLC_TRUE
;
}
else
if
(
!
strncmp
(
psz_var
,
"logo-x"
,
6
)
)
{
...
...
@@ -773,7 +753,7 @@ static int LogoCallback( vlc_object_t *p_this, char const *psz_var,
else
if
(
!
strncmp
(
psz_var
,
"logo-transparency"
,
9
)
)
{
p_sys
->
i_trans
=
__MAX
(
__MIN
(
newval
.
i_int
,
255
),
0
);
p_sys
->
b_new
PNG
=
VLC_TRUE
;
p_sys
->
b_new
_png
=
VLC_TRUE
;
}
p_sys
->
b_need_update
=
VLC_TRUE
;
return
VLC_SUCCESS
;
...
...
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