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
0c630661
Commit
0c630661
authored
Apr 16, 2014
by
Rafaël Carré
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
audiobargraph_v: cosmetics
parent
53d10bb5
Changes
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
175 additions
and
220 deletions
+175
-220
modules/video_filter/audiobargraph_v.c
modules/video_filter/audiobargraph_v.c
+175
-220
No files found.
modules/video_filter/audiobargraph_v.c
View file @
0c630661
...
...
@@ -46,14 +46,14 @@
*****************************************************************************/
#define POSX_TEXT N_("X coordinate")
#define POSX_LONGTEXT N_("X coordinate of the bargraph."
)
#define POSX_LONGTEXT N_("X coordinate of the bargraph.")
#define POSY_TEXT N_("Y coordinate")
#define POSY_LONGTEXT N_("Y coordinate of the bargraph."
)
#define POSY_LONGTEXT N_("Y coordinate of the bargraph.")
#define TRANS_TEXT N_("Transparency of the bargraph")
#define TRANS_LONGTEXT N_("Bargraph transparency value " \
"(from 0 for full transparency to 255 for full opacity)."
)
"(from 0 for full transparency to 255 for full opacity).")
#define POS_TEXT N_("Bargraph position")
#define POS_LONGTEXT N_(
\
#define POS_LONGTEXT N_(\
"Enforce the bargraph position on the video " \
"(0=center, 1=left, 2=right, 4=top, 8=bottom, you can " \
"also use combinations of these values, eg 6 = top-right).")
...
...
@@ -68,37 +68,37 @@ static const char *const ppsz_pos_descriptions[] =
{
N_
(
"Center"
),
N_
(
"Left"
),
N_
(
"Right"
),
N_
(
"Top"
),
N_
(
"Bottom"
),
N_
(
"Top-Left"
),
N_
(
"Top-Right"
),
N_
(
"Bottom-Left"
),
N_
(
"Bottom-Right"
)
};
static
int
OpenSub
(
vlc_object_t
*
);
static
int
OpenVideo
(
vlc_object_t
*
);
static
void
Close
(
vlc_object_t
*
);
static
int
OpenSub
(
vlc_object_t
*
);
static
int
OpenVideo
(
vlc_object_t
*
);
static
void
Close
(
vlc_object_t
*
);
vlc_module_begin
()
set_category
(
CAT_VIDEO
)
set_subcategory
(
SUBCAT_VIDEO_SUBPIC
)
set_capability
(
"sub source"
,
0
)
set_callbacks
(
OpenSub
,
Close
)
set_description
(
N_
(
"Audio Bar Graph Video sub source"
)
)
set_shortname
(
N_
(
"Audio Bar Graph Video"
)
)
add_shortcut
(
"audiobargraph_v"
)
add_obsolete_string
(
CFG_PREFIX
"i_values"
)
add_integer
(
CFG_PREFIX
"x"
,
0
,
POSX_TEXT
,
POSX_LONGTEXT
,
true
)
add_integer
(
CFG_PREFIX
"y"
,
0
,
POSY_TEXT
,
POSY_LONGTEXT
,
true
)
add_integer_with_range
(
CFG_PREFIX
"transparency"
,
255
,
0
,
255
,
TRANS_TEXT
,
TRANS_LONGTEXT
,
false
)
add_integer
(
CFG_PREFIX
"position"
,
-
1
,
POS_TEXT
,
POS_LONGTEXT
,
false
)
change_integer_list
(
pi_pos_values
,
ppsz_pos_descriptions
)
add_obsolete_integer
(
CFG_PREFIX
"alarm"
)
add_integer
(
CFG_PREFIX
"barWidth"
,
10
,
BARWIDTH_TEXT
,
BARWIDTH_LONGTEXT
,
true
)
set_category
(
CAT_VIDEO
)
set_subcategory
(
SUBCAT_VIDEO_SUBPIC
)
set_capability
(
"sub source"
,
0
)
set_callbacks
(
OpenSub
,
Close
)
set_description
(
N_
(
"Audio Bar Graph Video sub source"
)
)
set_shortname
(
N_
(
"Audio Bar Graph Video"
)
)
add_shortcut
(
"audiobargraph_v"
)
add_obsolete_string
(
CFG_PREFIX
"i_values"
)
add_integer
(
CFG_PREFIX
"x"
,
0
,
POSX_TEXT
,
POSX_LONGTEXT
,
true
)
add_integer
(
CFG_PREFIX
"y"
,
0
,
POSY_TEXT
,
POSY_LONGTEXT
,
true
)
add_integer_with_range
(
CFG_PREFIX
"transparency"
,
255
,
0
,
255
,
TRANS_TEXT
,
TRANS_LONGTEXT
,
false
)
add_integer
(
CFG_PREFIX
"position"
,
-
1
,
POS_TEXT
,
POS_LONGTEXT
,
false
)
change_integer_list
(
pi_pos_values
,
ppsz_pos_descriptions
)
add_obsolete_integer
(
CFG_PREFIX
"alarm"
)
add_integer
(
CFG_PREFIX
"barWidth"
,
10
,
BARWIDTH_TEXT
,
BARWIDTH_LONGTEXT
,
true
)
/* video output filter submodule */
add_submodule
()
set_capability
(
"video filter2"
,
0
)
set_callbacks
(
OpenVideo
,
Close
)
set_description
(
N_
(
"Audio Bar Graph Video sub source"
)
)
add_shortcut
(
"audiobargraph_v"
)
set_capability
(
"video filter2"
,
0
)
set_callbacks
(
OpenVideo
,
Close
)
set_description
(
N_
(
"Audio Bar Graph Video sub source"
)
)
add_shortcut
(
"audiobargraph_v"
)
vlc_module_end
()
...
...
@@ -180,7 +180,7 @@ static float iec_scale(float dB)
/*****************************************************************************
* parse_i_values : parse i_values parameter and store the corresponding values
*****************************************************************************/
static
void
parse_i_values
(
BarGraph_t
*
p_BarGraph
,
char
*
i_values
)
static
void
parse_i_values
(
BarGraph_t
*
p_BarGraph
,
char
*
i_values
)
{
char
*
res
=
NULL
;
char
delim
[]
=
":"
;
...
...
@@ -195,7 +195,7 @@ static void parse_i_values( BarGraph_t *p_BarGraph, char *i_values)
p_BarGraph
->
i_values
=
xrealloc
(
p_BarGraph
->
i_values
,
p_BarGraph
->
nbChannels
*
sizeof
(
int
));
db
=
log10
(
atof
(
res
))
*
20
;
p_BarGraph
->
i_values
[
p_BarGraph
->
nbChannels
-
1
]
=
VLC_CLIP
(
iec_scale
(
db
)
*
p_BarGraph
->
scale
,
0
,
p_BarGraph
->
scale
);
p_BarGraph
->
i_values
[
p_BarGraph
->
nbChannels
-
1
]
=
VLC_CLIP
(
iec_scale
(
db
)
*
p_BarGraph
->
scale
,
0
,
p_BarGraph
->
scale
);
res
=
strtok_r
(
NULL
,
delim
,
&
tok
);
}
...
...
@@ -204,7 +204,7 @@ static void parse_i_values( BarGraph_t *p_BarGraph, char *i_values)
/*****************************************************************************
* LoadImage: creates and returns the bar graph image
*****************************************************************************/
static
picture_t
*
LoadImage
(
vlc_object_t
*
p_this
,
int
nbChannels
,
int
*
i_values
,
int
scale
,
int
alarm
,
int
barWidth
)
static
picture_t
*
LoadImage
(
vlc_object_t
*
p_this
,
int
nbChannels
,
int
*
i_values
,
int
scale
,
int
alarm
,
int
barWidth
)
{
VLC_UNUSED
(
p_this
);
picture_t
*
p_pic
;
...
...
@@ -213,11 +213,11 @@ static picture_t *LoadImage( vlc_object_t *p_this, int nbChannels, int* i_values
int
i_line
;
int
minus8
,
minus10
,
minus18
,
minus20
,
minus30
,
minus40
,
minus50
,
minus60
;
if
(
nbChannels
==
0
)
{
if
(
nbChannels
==
0
)
i_width
=
20
;
}
else
{
else
i_width
=
2
*
nbChannels
*
barWidth
+
10
;
}
minus8
=
iec_scale
(
-
8
)
*
scale
+
20
;
minus10
=
iec_scale
(
-
10
)
*
scale
+
20
;
minus18
=
iec_scale
(
-
18
)
*
scale
+
20
;
...
...
@@ -232,24 +232,23 @@ static picture_t *LoadImage( vlc_object_t *p_this, int nbChannels, int* i_values
#define DrawLine(a,b,Y,U,V,A) \
for (i=a; i<b; i++) {\
*(p_pic->p[0].p_pixels + (scale + 30 - i_line - 1) * p_pic->p[0].i_pitch + i
) = Y;\
*(p_pic->p[1].p_pixels + (scale + 30 - i_line - 1) * p_pic->p[1].i_pitch + i
) = U;\
*(p_pic->p[2].p_pixels + (scale + 30 - i_line - 1) * p_pic->p[2].i_pitch + i
) = V;\
*(p_pic->p[3].p_pixels + (scale + 30 - i_line - 1) * p_pic->p[3].i_pitch + i
) = A; \
*(p_pic->p[0].p_pixels + (scale + 30 - i_line - 1) * p_pic->p[0].i_pitch + i) = Y;\
*(p_pic->p[1].p_pixels + (scale + 30 - i_line - 1) * p_pic->p[1].i_pitch + i) = U;\
*(p_pic->p[2].p_pixels + (scale + 30 - i_line - 1) * p_pic->p[2].i_pitch + i) = V;\
*(p_pic->p[3].p_pixels + (scale + 30 - i_line - 1) * p_pic->p[3].i_pitch + i) = A; \
}
#define DrawLineBlack(a,b) DrawLine(a,b,0,128,128,0xFF)
#define DrawLineWhite(a,b) DrawLine(a,b,255,128,128,0xFF)
// blacken the whole picture
for
(
i
=
0
;
i
<
p_pic
->
i_planes
;
i
++
)
{
memset
(
p_pic
->
p
[
i
].
p_pixels
,
0x00
,
p_pic
->
p
[
i
].
i_visible_lines
*
p_pic
->
p
[
i
].
i_pitch
);
for
(
i
=
0
;
i
<
p_pic
->
i_planes
;
i
++
)
{
memset
(
p_pic
->
p
[
i
].
p_pixels
,
0x00
,
p_pic
->
p
[
i
].
i_visible_lines
*
p_pic
->
p
[
i
].
i_pitch
);
}
// side bar
for
(
i_line
=
20
;
i_line
<
scale
+
20
;
i_line
++
)
{
for
(
i_line
=
20
;
i_line
<
scale
+
20
;
i_line
++
)
{
// vertical line
DrawLineBlack
(
20
,
22
);
DrawLineWhite
(
22
,
24
);
...
...
@@ -503,32 +502,29 @@ static picture_t *LoadImage( vlc_object_t *p_this, int nbChannels, int* i_values
}
}
#define drawPoint(offset,y,u,v,a) \
*(p_pic->p[0].p_pixels + (scale + 30 - i_line - 1) * p_pic->p[0].i_pitch + offset ) = y; \
*(p_pic->p[1].p_pixels + (scale + 30 - i_line - 1) * p_pic->p[1].i_pitch + offset ) = u; \
*(p_pic->p[2].p_pixels + (scale + 30 - i_line - 1) * p_pic->p[2].i_pitch + offset ) = v; \
*(p_pic->p[3].p_pixels + (scale + 30 - i_line - 1) * p_pic->p[3].i_pitch + offset ) = a;
#define drawPoint(offset,y,u,v,a) do { \
*(p_pic->p[0].p_pixels + (scale + 30 - i_line - 1) * p_pic->p[0].i_pitch + offset) = y; \
*(p_pic->p[1].p_pixels + (scale + 30 - i_line - 1) * p_pic->p[1].i_pitch + offset) = u; \
*(p_pic->p[2].p_pixels + (scale + 30 - i_line - 1) * p_pic->p[2].i_pitch + offset) = v; \
*(p_pic->p[3].p_pixels + (scale + 30 - i_line - 1) * p_pic->p[3].i_pitch + offset) = a; \
} while(0)
// draw the bars and channel indicators
for
(
i
=
0
;
i
<
nbChannels
;
i
++
)
{
pi
=
25
+
((
i
+
1
)
*
5
)
+
(
i
*
barWidth
)
;
// 25 separació amb indicador, 5 separació entre barres
for
(
j
=
pi
;
j
<
pi
+
barWidth
;
j
++
)
{
for
(
j
=
pi
;
j
<
pi
+
barWidth
;
j
++
)
{
// channel indicators
for
(
i_line
=
12
;
i_line
<
20
;
i_line
++
)
{
if
(
alarm
)
{
for
(
i_line
=
12
;
i_line
<
20
;
i_line
++
)
{
if
(
alarm
)
{
drawPoint
(
j
,
76
,
85
,
0xFF
,
0xFF
);
// red
}
else
{
}
else
drawPoint
(
j
,
0
,
128
,
128
,
0xFF
);
// black DrawLine(pi,pf,0xFF,128,128,0xFF);
}
}
// bars
for
(
i_line
=
20
;
i_line
<
i_values
[
i
]
+
20
;
i_line
++
)
{
for
(
i_line
=
20
;
i_line
<
i_values
[
i
]
+
20
;
i_line
++
)
{
if
(
i_line
<
minus18
)
{
// green if < -18 dB
drawPoint
(
j
,
150
,
44
,
21
,
0xFF
);
//DrawLine(pi,pf,150,44,21,0xFF);
...
...
@@ -541,8 +537,7 @@ static picture_t *LoadImage( vlc_object_t *p_this, int nbChannels, int* i_values
}
}
// bars no signal
for
(
;
i_line
<
scale
+
20
;
i_line
++
)
{
for
(;
i_line
<
scale
+
20
;
i_line
++
)
{
if
(
i_line
<
minus18
)
{
// green if < -18 dB
drawPoint
(
j
,
74
,
85
,
74
,
0xFF
);
//DrawLine(pi,pf,74,85,74,0xFF);
...
...
@@ -562,54 +557,40 @@ static picture_t *LoadImage( vlc_object_t *p_this, int nbChannels, int* i_values
/*****************************************************************************
* LoadBarGraph: loads the BarGraph images into memory
*****************************************************************************/
static
void
LoadBarGraph
(
vlc_object_t
*
p_this
,
BarGraph_t
*
p_BarGraph
)
static
void
LoadBarGraph
(
vlc_object_t
*
p_this
,
BarGraph_t
*
p_BarGraph
)
{
p_BarGraph
->
p_pic
=
LoadImage
(
p_this
,
p_BarGraph
->
nbChannels
,
p_BarGraph
->
i_values
,
p_BarGraph
->
scale
,
p_BarGraph
->
alarm
,
p_BarGraph
->
barWidth
);
if
(
!
p_BarGraph
->
p_pic
)
{
msg_Warn
(
p_this
,
"error while creating picture"
);
}
p_BarGraph
->
p_pic
=
LoadImage
(
p_this
,
p_BarGraph
->
nbChannels
,
p_BarGraph
->
i_values
,
p_BarGraph
->
scale
,
p_BarGraph
->
alarm
,
p_BarGraph
->
barWidth
);
if
(
!
p_BarGraph
->
p_pic
)
msg_Warn
(
p_this
,
"error while creating picture"
);
}
/*****************************************************************************
* Callback to update params on the fly
*****************************************************************************/
static
int
BarGraphCallback
(
vlc_object_t
*
p_this
,
char
const
*
psz_var
,
vlc_value_t
oldval
,
vlc_value_t
newval
,
void
*
p_data
)
static
int
BarGraphCallback
(
vlc_object_t
*
p_this
,
char
const
*
psz_var
,
vlc_value_t
oldval
,
vlc_value_t
newval
,
void
*
p_data
)
{
VLC_UNUSED
(
oldval
);
filter_sys_t
*
p_sys
=
(
filter_sys_t
*
)
p_data
;
BarGraph_t
*
p_BarGraph
=
&
(
p_sys
->
p_BarGraph
);
char
*
res
=
NULL
;
vlc_mutex_lock
(
&
p_sys
->
lock
);
if
(
!
strcmp
(
psz_var
,
"audiobargraph_v-x"
)
)
{
vlc_mutex_lock
(
&
p_sys
->
lock
);
if
(
!
strcmp
(
psz_var
,
"audiobargraph_v-x"
))
p_sys
->
i_pos_x
=
newval
.
i_int
;
}
else
if
(
!
strcmp
(
psz_var
,
"audiobargraph_v-y"
)
)
{
else
if
(
!
strcmp
(
psz_var
,
"audiobargraph_v-y"
))
p_sys
->
i_pos_y
=
newval
.
i_int
;
}
else
if
(
!
strcmp
(
psz_var
,
"audiobargraph_v-position"
)
)
{
else
if
(
!
strcmp
(
psz_var
,
"audiobargraph_v-position"
))
p_sys
->
i_pos
=
newval
.
i_int
;
}
else
if
(
!
strcmp
(
psz_var
,
"audiobargraph_v-transparency"
)
)
{
p_BarGraph
->
i_alpha
=
VLC_CLIP
(
newval
.
i_int
,
0
,
255
);
}
else
if
(
!
strcmp
(
psz_var
,
"audiobargraph_v-i_values"
)
)
{
if
(
p_BarGraph
->
p_pic
)
{
picture_Release
(
p_BarGraph
->
p_pic
);
else
if
(
!
strcmp
(
psz_var
,
"audiobargraph_v-transparency"
))
p_BarGraph
->
i_alpha
=
VLC_CLIP
(
newval
.
i_int
,
0
,
255
);
else
if
(
!
strcmp
(
psz_var
,
"audiobargraph_v-i_values"
))
{
if
(
p_BarGraph
->
p_pic
)
{
picture_Release
(
p_BarGraph
->
p_pic
);
p_BarGraph
->
p_pic
=
NULL
;
}
char
*
psz
=
xstrdup
(
newval
.
psz_string
?
newval
.
psz_string
:
""
);
char
*
psz
=
xstrdup
(
newval
.
psz_string
?
newval
.
psz_string
:
""
);
free
(
p_BarGraph
->
i_values
);
//p_BarGraph->i_values = NULL;
//p_BarGraph->nbChannels = 0;
...
...
@@ -617,32 +598,26 @@ static int BarGraphCallback( vlc_object_t *p_this, char const *psz_var,
res
=
strchr
(
psz
,
'@'
);
if
(
res
)
*
res
=
0
;
parse_i_values
(
p_BarGraph
,
psz
);
free
(
psz
);
parse_i_values
(
p_BarGraph
,
psz
);
free
(
psz
);
LoadBarGraph
(
p_this
,
p_BarGraph
);
}
else
if
(
!
strcmp
(
psz_var
,
"audiobargraph_v-alarm"
)
)
{
if
(
p_BarGraph
->
p_pic
)
{
picture_Release
(
p_BarGraph
->
p_pic
);
}
else
if
(
!
strcmp
(
psz_var
,
"audiobargraph_v-alarm"
))
{
if
(
p_BarGraph
->
p_pic
)
{
picture_Release
(
p_BarGraph
->
p_pic
);
p_BarGraph
->
p_pic
=
NULL
;
}
p_BarGraph
->
alarm
=
newval
.
b_bool
;
LoadBarGraph
(
p_this
,
p_BarGraph
);
}
else
if
(
!
strcmp
(
psz_var
,
"audiobargraph_v-barWidth"
)
)
{
if
(
p_BarGraph
->
p_pic
)
{
picture_Release
(
p_BarGraph
->
p_pic
);
}
else
if
(
!
strcmp
(
psz_var
,
"audiobargraph_v-barWidth"
))
{
if
(
p_BarGraph
->
p_pic
)
{
picture_Release
(
p_BarGraph
->
p_pic
);
p_BarGraph
->
p_pic
=
NULL
;
}
p_BarGraph
->
barWidth
=
newval
.
i_int
;
LoadBarGraph
(
p_this
,
p_BarGraph
);
}
p_sys
->
b_spu_update
=
true
;
vlc_mutex_unlock
(
&
p_sys
->
lock
);
vlc_mutex_unlock
(
&
p_sys
->
lock
);
return
VLC_SUCCESS
;
}
...
...
@@ -650,7 +625,7 @@ static int BarGraphCallback( vlc_object_t *p_this, char const *psz_var,
/**
* Sub source
*/
static
subpicture_t
*
FilterSub
(
filter_t
*
p_filter
,
mtime_t
date
)
static
subpicture_t
*
FilterSub
(
filter_t
*
p_filter
,
mtime_t
date
)
{
filter_sys_t
*
p_sys
=
p_filter
->
p_sys
;
BarGraph_t
*
p_BarGraph
=
&
(
p_sys
->
p_BarGraph
);
...
...
@@ -660,19 +635,18 @@ static subpicture_t *FilterSub( filter_t *p_filter, mtime_t date )
video_format_t
fmt
;
picture_t
*
p_pic
;
vlc_mutex_lock
(
&
p_sys
->
lock
);
vlc_mutex_lock
(
&
p_sys
->
lock
);
/* Basic test: b_spu_update occurs on a dynamic change */
if
(
!
p_sys
->
b_spu_update
)
{
vlc_mutex_unlock
(
&
p_sys
->
lock
);
if
(
!
p_sys
->
b_spu_update
)
{
vlc_mutex_unlock
(
&
p_sys
->
lock
);
return
0
;
}
p_pic
=
p_BarGraph
->
p_pic
;
/* Allocate the subpicture internal data. */
p_spu
=
filter_NewSubpicture
(
p_filter
);
if
(
!
p_spu
)
p_spu
=
filter_NewSubpicture
(
p_filter
);
if
(
!
p_spu
)
goto
exit
;
p_spu
->
b_absolute
=
p_sys
->
b_absolute
;
...
...
@@ -681,36 +655,32 @@ static subpicture_t *FilterSub( filter_t *p_filter, mtime_t date )
p_spu
->
b_ephemer
=
true
;
/* Send an empty subpicture to clear the display when needed */
if
(
!
p_pic
||
!
p_BarGraph
->
i_alpha
)
if
(
!
p_pic
||
!
p_BarGraph
->
i_alpha
)
goto
exit
;
/* Create new SPU region */
memset
(
&
fmt
,
0
,
sizeof
(
video_format_t
)
);
memset
(
&
fmt
,
0
,
sizeof
(
video_format_t
)
);
fmt
.
i_chroma
=
VLC_CODEC_YUVA
;
fmt
.
i_sar_num
=
fmt
.
i_sar_den
=
1
;
fmt
.
i_width
=
fmt
.
i_visible_width
=
p_pic
->
p
[
Y_PLANE
].
i_visible_pitch
;
fmt
.
i_height
=
fmt
.
i_visible_height
=
p_pic
->
p
[
Y_PLANE
].
i_visible_lines
;
fmt
.
i_x_offset
=
fmt
.
i_y_offset
=
0
;
p_region
=
subpicture_region_New
(
&
fmt
);
if
(
!
p_region
)
{
msg_Err
(
p_filter
,
"cannot allocate SPU region"
);
p_filter
->
pf_sub_buffer_del
(
p_filter
,
p_spu
);
p_region
=
subpicture_region_New
(
&
fmt
);
if
(
!
p_region
)
{
msg_Err
(
p_filter
,
"cannot allocate SPU region"
);
p_filter
->
pf_sub_buffer_del
(
p_filter
,
p_spu
);
p_spu
=
NULL
;
goto
exit
;
}
/* */
picture_Copy
(
p_region
->
p_picture
,
p_pic
);
picture_Copy
(
p_region
->
p_picture
,
p_pic
);
/* where to locate the bar graph: */
if
(
p_sys
->
i_pos
<
0
)
{
/* set to an absolute xy */
if
(
p_sys
->
i_pos
<
0
)
{
/* set to an absolute xy */
p_region
->
i_align
=
SUBPICTURE_ALIGN_RIGHT
|
SUBPICTURE_ALIGN_TOP
;
p_spu
->
b_absolute
=
true
;
}
else
{
/* set to one of the 9 relative locations */
}
else
{
/* set to one of the 9 relative locations */
p_region
->
i_align
=
p_sys
->
i_pos
;
p_spu
->
b_absolute
=
false
;
}
...
...
@@ -723,7 +693,7 @@ static subpicture_t *FilterSub( filter_t *p_filter, mtime_t date )
p_spu
->
i_alpha
=
p_BarGraph
->
i_alpha
;
exit:
vlc_mutex_unlock
(
&
p_sys
->
lock
);
vlc_mutex_unlock
(
&
p_sys
->
lock
);
return
p_spu
;
}
...
...
@@ -731,131 +701,116 @@ exit:
/**
* Video filter
*/
static
picture_t
*
FilterVideo
(
filter_t
*
p_filter
,
picture_t
*
p_src
)
static
picture_t
*
FilterVideo
(
filter_t
*
p_filter
,
picture_t
*
p_src
)
{
filter_sys_t
*
p_sys
=
p_filter
->
p_sys
;
BarGraph_t
*
p_BarGraph
=
&
(
p_sys
->
p_BarGraph
);
picture_t
*
p_dst
=
filter_NewPicture
(
p_filter
);
if
(
!
p_dst
)
goto
exit
;
picture_t
*
p_dst
=
filter_NewPicture
(
p_filter
);
if
(
!
p_dst
)
{
picture_Release
(
p_src
);
return
NULL
;
}
picture_Copy
(
p_dst
,
p_src
);
picture_Copy
(
p_dst
,
p_src
);
/* */
vlc_mutex_lock
(
&
p_sys
->
lock
);
vlc_mutex_lock
(
&
p_sys
->
lock
);
/* */
const
picture_t
*
p_pic
=
p_BarGraph
->
p_pic
;
if
(
p_pic
)
{
const
video_format_t
*
p_fmt
=
&
p_pic
->
format
;
const
int
i_dst_w
=
p_filter
->
fmt_out
.
video
.
i_visible_width
;
const
int
i_dst_h
=
p_filter
->
fmt_out
.
video
.
i_visible_height
;
if
(
p_sys
->
i_pos
)
{
if
(
p_sys
->
i_pos
&
SUBPICTURE_ALIGN_BOTTOM
)
{
p_sys
->
i_pos_y
=
i_dst_h
-
p_fmt
->
i_visible_height
;
}
else
if
(
!
(
p_sys
->
i_pos
&
SUBPICTURE_ALIGN_TOP
)
)
{
p_sys
->
i_pos_y
=
(
i_dst_h
-
p_fmt
->
i_visible_height
)
/
2
;
}
else
{
p_sys
->
i_pos_y
=
0
;
}
if
(
!
p_pic
)
goto
out
;
const
video_format_t
*
p_fmt
=
&
p_pic
->
format
;
const
int
i_dst_w
=
p_filter
->
fmt_out
.
video
.
i_visible_width
;
const
int
i_dst_h
=
p_filter
->
fmt_out
.
video
.
i_visible_height
;
if
(
p_sys
->
i_pos
)
{
if
(
p_sys
->
i_pos
&
SUBPICTURE_ALIGN_BOTTOM
)
p_sys
->
i_pos_y
=
i_dst_h
-
p_fmt
->
i_visible_height
;
else
if
(
!
(
p_sys
->
i_pos
&
SUBPICTURE_ALIGN_TOP
))
p_sys
->
i_pos_y
=
(
i_dst_h
-
p_fmt
->
i_visible_height
)
/
2
;
else
p_sys
->
i_pos_y
=
0
;
if
(
p_sys
->
i_pos
&
SUBPICTURE_ALIGN_RIGHT
)
p_sys
->
i_pos_x
=
i_dst_w
-
p_fmt
->
i_visible_width
;
else
if
(
!
(
p_sys
->
i_pos
&
SUBPICTURE_ALIGN_LEFT
))
p_sys
->
i_pos_x
=
(
i_dst_w
-
p_fmt
->
i_visible_width
)
/
2
;
else
p_sys
->
i_pos_x
=
0
;
}
if
(
p_sys
->
i_pos
&
SUBPICTURE_ALIGN_RIGHT
)
{
p_sys
->
i_pos_x
=
i_dst_w
-
p_fmt
->
i_visible_width
;
}
else
if
(
!
(
p_sys
->
i_pos
&
SUBPICTURE_ALIGN_LEFT
)
)
{
p_sys
->
i_pos_x
=
(
i_dst_w
-
p_fmt
->
i_visible_width
)
/
2
;
}
else
{
p_sys
->
i_pos_x
=
0
;
}
}
/* */
const
int
i_alpha
=
p_BarGraph
->
i_alpha
;
if
(
filter_ConfigureBlend
(
p_sys
->
p_blend
,
i_dst_w
,
i_dst_h
,
p_fmt
)
||
filter_Blend
(
p_sys
->
p_blend
,
p_dst
,
p_sys
->
i_pos_x
,
p_sys
->
i_pos_y
,
p_pic
,
i_alpha
))
msg_Err
(
p_filter
,
"failed to blend a picture"
);
/* */
const
int
i_alpha
=
p_BarGraph
->
i_alpha
;
if
(
filter_ConfigureBlend
(
p_sys
->
p_blend
,
i_dst_w
,
i_dst_h
,
p_fmt
)
||
filter_Blend
(
p_sys
->
p_blend
,
p_dst
,
p_sys
->
i_pos_x
,
p_sys
->
i_pos_y
,
p_pic
,
i_alpha
)
)
{
msg_Err
(
p_filter
,
"failed to blend a picture"
);
}
}
vlc_mutex_unlock
(
&
p_sys
->
lock
);
out:
vlc_mutex_unlock
(
&
p_sys
->
lock
);
exit:
picture_Release
(
p_src
);
picture_Release
(
p_src
);
return
p_dst
;
}
/**
* Common open function
*/
static
int
OpenCommon
(
vlc_object_t
*
p_this
,
bool
b_sub
)
static
int
OpenCommon
(
vlc_object_t
*
p_this
,
bool
b_sub
)
{
filter_t
*
p_filter
=
(
filter_t
*
)
p_this
;
filter_sys_t
*
p_sys
;
/* */
if
(
!
b_sub
&&
!
es_format_IsSimilar
(
&
p_filter
->
fmt_in
,
&
p_filter
->
fmt_out
)
)
{
msg_Err
(
p_filter
,
"Input and output format does not match"
);
if
(
!
b_sub
&&
!
es_format_IsSimilar
(
&
p_filter
->
fmt_in
,
&
p_filter
->
fmt_out
))
{
msg_Err
(
p_filter
,
"Input and output format does not match"
);
return
VLC_EGENERIC
;
}
/* */
p_filter
->
p_sys
=
p_sys
=
malloc
(
sizeof
(
*
p_sys
)
);
if
(
!
p_sys
)
p_filter
->
p_sys
=
p_sys
=
malloc
(
sizeof
(
*
p_sys
)
);
if
(
!
p_sys
)
return
VLC_ENOMEM
;
/* */
p_sys
->
p_blend
=
NULL
;
if
(
!
b_sub
)
{
p_sys
->
p_blend
=
filter_NewBlend
(
VLC_OBJECT
(
p_filter
),
&
p_filter
->
fmt_in
.
video
);
if
(
!
p_sys
->
p_blend
)
{
free
(
p_sys
);
if
(
!
b_sub
)
{
p_sys
->
p_blend
=
filter_NewBlend
(
VLC_OBJECT
(
p_filter
),
&
p_filter
->
fmt_in
.
video
);
if
(
!
p_sys
->
p_blend
)
{
free
(
p_sys
);
return
VLC_EGENERIC
;
}
}
/* */
config_ChainParse
(
p_filter
,
CFG_PREFIX
,
ppsz_filter_options
,
p_filter
->
p_cfg
);
config_ChainParse
(
p_filter
,
CFG_PREFIX
,
ppsz_filter_options
,
p_filter
->
p_cfg
);
/* create and initialize variables */
p_sys
->
i_pos
=
var_CreateGetIntegerCommand
(
p_filter
,
"audiobargraph_v-position"
);
p_sys
->
i_pos_x
=
var_CreateGetIntegerCommand
(
p_filter
,
"audiobargraph_v-x"
);
p_sys
->
i_pos_y
=
var_CreateGetIntegerCommand
(
p_filter
,
"audiobargraph_v-y"
);
p_sys
->
i_pos
=
var_CreateGetIntegerCommand
(
p_filter
,
"audiobargraph_v-position"
);
p_sys
->
i_pos_x
=
var_CreateGetIntegerCommand
(
p_filter
,
"audiobargraph_v-x"
);
p_sys
->
i_pos_y
=
var_CreateGetIntegerCommand
(
p_filter
,
"audiobargraph_v-y"
);
BarGraph_t
*
p_BarGraph
=
&
p_sys
->
p_BarGraph
;
p_BarGraph
->
p_pic
=
NULL
;
p_BarGraph
->
i_alpha
=
var_CreateGetIntegerCommand
(
p_filter
,
"audiobargraph_v-transparency"
);
p_BarGraph
->
i_alpha
=
VLC_CLIP
(
p_BarGraph
->
i_alpha
,
0
,
255
);
p_BarGraph
->
i_alpha
=
var_CreateGetIntegerCommand
(
p_filter
,
"audiobargraph_v-transparency"
);
p_BarGraph
->
i_alpha
=
VLC_CLIP
(
p_BarGraph
->
i_alpha
,
0
,
255
);
parse_i_values
(
p_BarGraph
,
&
(
char
){
0
});
p_BarGraph
->
alarm
=
false
;
p_BarGraph
->
barWidth
=
var_CreateGetIntegerCommand
(
p_filter
,
"audiobargraph_v-barWidth"
);
p_BarGraph
->
barWidth
=
var_CreateGetIntegerCommand
(
p_filter
,
"audiobargraph_v-barWidth"
);
p_BarGraph
->
scale
=
400
;
/* Ignore aligment if a position is given for video filter */
if
(
!
b_sub
&&
p_sys
->
i_pos_x
>=
0
&&
p_sys
->
i_pos_y
>=
0
)
if
(
!
b_sub
&&
p_sys
->
i_pos_x
>=
0
&&
p_sys
->
i_pos_y
>=
0
)
p_sys
->
i_pos
=
0
;
vlc_mutex_init
(
&
p_sys
->
lock
);
vlc_mutex_init
(
&
p_sys
->
lock
);
var_Create
(
p_filter
->
p_libvlc
,
"audiobargraph_v-alarm"
,
VLC_VAR_BOOL
);
var_Create
(
p_filter
->
p_libvlc
,
"audiobargraph_v-i_values"
,
VLC_VAR_STRING
);
...
...
@@ -868,11 +823,11 @@ static int OpenCommon( vlc_object_t *p_this, bool b_sub )
var_TriggerCallback
(
p_filter
->
p_libvlc
,
"audiobargraph_v-alarm"
);
var_TriggerCallback
(
p_filter
->
p_libvlc
,
"audiobargraph_v-i_values"
);
for
(
int
i
=
0
;
ppsz_filter_callbacks
[
i
];
i
++
)
var_AddCallback
(
p_filter
,
ppsz_filter_callbacks
[
i
],
BarGraphCallback
,
p_sys
);
for
(
int
i
=
0
;
ppsz_filter_callbacks
[
i
];
i
++
)
var_AddCallback
(
p_filter
,
ppsz_filter_callbacks
[
i
],
BarGraphCallback
,
p_sys
);
if
(
b_sub
)
if
(
b_sub
)
p_filter
->
pf_sub_source
=
FilterSub
;
else
p_filter
->
pf_video_filter
=
FilterVideo
;
...
...
@@ -883,30 +838,30 @@ static int OpenCommon( vlc_object_t *p_this, bool b_sub )
/**
* Open the sub source
*/
static
int
OpenSub
(
vlc_object_t
*
p_this
)
static
int
OpenSub
(
vlc_object_t
*
p_this
)
{
return
OpenCommon
(
p_this
,
true
);
return
OpenCommon
(
p_this
,
true
);
}
/**
* Open the video filter
*/
static
int
OpenVideo
(
vlc_object_t
*
p_this
)
static
int
OpenVideo
(
vlc_object_t
*
p_this
)
{
return
OpenCommon
(
p_this
,
false
);
return
OpenCommon
(
p_this
,
false
);
}
/**
* Common close function
*/
static
void
Close
(
vlc_object_t
*
p_this
)
static
void
Close
(
vlc_object_t
*
p_this
)
{
filter_t
*
p_filter
=
(
filter_t
*
)
p_this
;
filter_sys_t
*
p_sys
=
p_filter
->
p_sys
;
for
(
int
i
=
0
;
ppsz_filter_callbacks
[
i
];
i
++
)
var_DelCallback
(
p_filter
,
ppsz_filter_callbacks
[
i
],
BarGraphCallback
,
p_sys
);
for
(
int
i
=
0
;
ppsz_filter_callbacks
[
i
];
i
++
)
var_DelCallback
(
p_filter
,
ppsz_filter_callbacks
[
i
],
BarGraphCallback
,
p_sys
);
var_DelCallback
(
p_filter
->
p_libvlc
,
"audiobargraph_v-i_values"
,
BarGraphCallback
,
p_sys
);
...
...
@@ -915,15 +870,15 @@ static void Close( vlc_object_t *p_this )
var_Destroy
(
p_filter
->
p_libvlc
,
"audiobargraph_v-i_values"
);
var_Destroy
(
p_filter
->
p_libvlc
,
"audiobargraph_v-alarm"
);
if
(
p_sys
->
p_blend
)
filter_DeleteBlend
(
p_sys
->
p_blend
);
if
(
p_sys
->
p_blend
)
filter_DeleteBlend
(
p_sys
->
p_blend
);
vlc_mutex_destroy
(
&
p_sys
->
lock
);
vlc_mutex_destroy
(
&
p_sys
->
lock
);
if
(
p_sys
->
p_BarGraph
.
p_pic
)
picture_Release
(
p_sys
->
p_BarGraph
.
p_pic
);
if
(
p_sys
->
p_BarGraph
.
p_pic
)
picture_Release
(
p_sys
->
p_BarGraph
.
p_pic
);
free
(
p_sys
->
p_BarGraph
.
i_values
);
free
(
p_sys
->
p_BarGraph
.
i_values
);
free
(
p_sys
);
free
(
p_sys
);
}
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