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
cccd154d
Commit
cccd154d
authored
Mar 21, 2009
by
Rémi Duraffort
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
dbus: fix another locking problem.
parent
f1238847
Changes
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
34 additions
and
18 deletions
+34
-18
modules/control/dbus.c
modules/control/dbus.c
+34
-18
No files found.
modules/control/dbus.c
View file @
cccd154d
...
...
@@ -65,9 +65,7 @@ static int Open ( vlc_object_t * );
static
void
Close
(
vlc_object_t
*
);
static
void
Run
(
intf_thread_t
*
);
static
int
StateChange
(
vlc_object_t
*
,
const
char
*
,
vlc_value_t
,
vlc_value_t
,
void
*
);
static
int
StateChange
(
intf_thread_t
*
,
int
);
static
int
TrackChange
(
intf_thread_t
*
);
static
int
StatusChangeEmit
(
intf_thread_t
*
);
static
int
TrackListChangeEmit
(
intf_thread_t
*
,
int
,
int
);
...
...
@@ -118,6 +116,7 @@ typedef struct
{
int
signal
;
int
i_node
;
int
i_input_state
;
}
callback_info_t
;
...
...
@@ -808,7 +807,7 @@ static void Close ( vlc_object_t *p_this )
p_input
=
playlist_CurrentInput
(
p_playlist
);
if
(
p_input
)
{
var_DelCallback
(
p_input
,
"state"
,
StateChange
,
p_intf
);
var_DelCallback
(
p_input
,
"state"
,
AllCallback
,
p_intf
);
vlc_object_release
(
p_input
);
}
...
...
@@ -853,6 +852,9 @@ static void Run ( intf_thread_t *p_intf )
case
SIGNAL_LOOP
:
StatusChangeEmit
(
p_intf
);
break
;
case
SIGNAL_STATE
:
StateChange
(
p_intf
,
info
->
i_input_state
);
break
;
default:
assert
(
0
);
}
...
...
@@ -895,6 +897,11 @@ static int AllCallback( vlc_object_t *p_this, const char *psz_var,
info
->
signal
=
SIGNAL_REPEAT
;
else
if
(
!
strcmp
(
"loop"
,
psz_var
)
)
info
->
signal
=
SIGNAL_LOOP
;
else
if
(
!
strcmp
(
"state"
,
psz_var
)
)
{
info
->
signal
=
SIGNAL_STATE
;
info
->
i_input_state
=
newval
.
i_int
;
}
else
assert
(
0
);
...
...
@@ -1000,32 +1007,41 @@ DBUS_SIGNAL( StatusChangeSignal )
/*****************************************************************************
* StateChange: callback on input "state"
*****************************************************************************/
static
int
StateChange
(
vlc_object_t
*
p_this
,
const
char
*
psz_var
,
vlc_value_t
oldval
,
vlc_value_t
newval
,
void
*
p_data
)
//static int StateChange( vlc_object_t *p_this, const char* psz_var,
// vlc_value_t oldval, vlc_value_t newval, void *p_data )
static
int
StateChange
(
intf_thread_t
*
p_intf
,
int
i_input_state
)
{
VLC_UNUSED
(
psz_var
);
VLC_UNUSED
(
oldval
);
intf_thread_t
*
p_intf
=
(
intf_thread_t
*
)
p_data
;
intf_sys_t
*
p_sys
=
p_intf
->
p_sys
;
playlist_t
*
p_playlist
;
input_thread_t
*
p_input
;
input_item_t
*
p_item
;
if
(
p_intf
->
p_sys
->
b_dead
)
return
VLC_SUCCESS
;
UpdateCaps
(
p_intf
,
true
);
UpdateCaps
(
p_intf
,
pl_Unlocked
);
if
(
!
p_sys
->
b_meta_read
&&
newval
.
i_int
==
PLAYING_S
)
if
(
!
p_sys
->
b_meta_read
&&
i_input_state
==
PLAYING_S
)
{
input_item_t
*
p_item
=
input_GetItem
(
(
input_thread_t
*
)
p_this
);
if
(
p_item
)
p_playlist
=
pl_Hold
(
p_intf
);
p_input
=
playlist_CurrentInput
(
p_playlist
);
if
(
p_input
)
{
p_sys
->
b_meta_read
=
true
;
TrackChangeSignal
(
p_sys
->
p_conn
,
p_item
);
p_item
=
input_GetItem
(
p_input
);
if
(
p_item
)
{
p_sys
->
b_meta_read
=
true
;
TrackChangeSignal
(
p_sys
->
p_conn
,
p_item
);
}
vlc_object_release
(
p_input
);
}
pl_Release
(
p_intf
);
}
if
(
newval
.
i_int
==
PLAYING_S
||
newval
.
i_int
==
PAUSE_S
||
newval
.
i_int
==
END_S
)
if
(
i_input_state
==
PLAYING_S
||
i_input_state
==
PAUSE_S
||
i_input_state
==
END_S
)
{
StatusChangeSignal
(
p_sys
->
p_conn
,
(
void
*
)
p_intf
);
StatusChangeSignal
(
p_sys
->
p_conn
,
p_intf
);
}
return
VLC_SUCCESS
;
...
...
@@ -1082,7 +1098,7 @@ static int TrackChange( intf_thread_t *p_intf )
TrackChangeSignal
(
p_sys
->
p_conn
,
p_item
);
}
var_AddCallback
(
p_input
,
"state"
,
StateChange
,
p_intf
);
var_AddCallback
(
p_input
,
"state"
,
AllCallback
,
p_intf
);
vlc_object_release
(
p_input
);
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