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
6c464c3c
Commit
6c464c3c
authored
Dec 06, 2006
by
Rafaël Carré
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Simplification of one-instance mode
It now checks if a capable "Media Player" is running, not only VLC.
parent
9dc29b4f
Changes
3
Show whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
110 additions
and
177 deletions
+110
-177
extras/dbus-vlc.py
extras/dbus-vlc.py
+7
-0
modules/control/dbus.c
modules/control/dbus.c
+0
-3
src/libvlc-common.c
src/libvlc-common.c
+103
-174
No files found.
extras/dbus-vlc.py
View file @
6c464c3c
...
@@ -20,6 +20,13 @@
...
@@ -20,6 +20,13 @@
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA.
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA.
#
#
#
# NOTE: this controller is a SAMPLE, and thus doesn't implement all the D-Bus Media Player specification. http://wiki.videolan.org/index.php/DBus-spec
# This is an unfinished document (on the 12/06/2006) and has been designed to be as general as possible.
# So don't expect that much from this, but basic capabilities should work out of the box (Play/Pause/Next/Add)
#
# Also notice it has been designed first for a previous specificaiton, and thus some code may not work/be disabled
#
import
dbus
import
dbus
import
dbus.glib
import
dbus.glib
import
gtk
import
gtk
...
...
modules/control/dbus.c
View file @
6c464c3c
...
@@ -573,9 +573,6 @@ static int Open( vlc_object_t *p_this )
...
@@ -573,9 +573,6 @@ static int Open( vlc_object_t *p_this )
return
VLC_EGENERIC
;
return
VLC_EGENERIC
;
}
}
/* we unregister the object /, registered by libvlc */
dbus_connection_unregister_object_path
(
p_conn
,
"/"
);
/* we register the objects */
/* we register the objects */
dbus_connection_register_object_path
(
p_conn
,
VLC_DBUS_ROOT_PATH
,
dbus_connection_register_object_path
(
p_conn
,
VLC_DBUS_ROOT_PATH
,
&
vlc_dbus_root_vtable
,
p_this
);
&
vlc_dbus_root_vtable
,
p_this
);
...
...
src/libvlc-common.c
View file @
6c464c3c
...
@@ -218,40 +218,6 @@ libvlc_int_t * libvlc_InternalCreate( void )
...
@@ -218,40 +218,6 @@ libvlc_int_t * libvlc_InternalCreate( void )
return
p_libvlc
;
return
p_libvlc
;
}
}
/*
* D-Bus callback needed in libvlc_InternalInit()
*/
#ifdef HAVE_DBUS_3
/* Handling of messages received on / object */
static
DBusHandlerResult
handle_root
(
DBusConnection
*
p_conn
,
DBusMessage
*
p_from
,
void
*
p_data
)
{
DBusMessage
*
p_msg
=
dbus_message_new_method_return
(
p_from
);
if
(
!
p_msg
)
return
DBUS_HANDLER_RESULT_NEED_MEMORY
;
DBusMessageIter
args
;
dbus_message_iter_init_append
(
p_msg
,
&
args
);
char
*
p_root
=
malloc
(
strlen
(
"<node name='/'></node>"
)
);
if
(
!
p_root
)
return
DBUS_HANDLER_RESULT_NEED_MEMORY
;
sprintf
(
p_root
,
"<node name='/'></node>"
);
if
(
!
dbus_message_iter_append_basic
(
&
args
,
DBUS_TYPE_STRING
,
&
p_root
)
)
return
DBUS_HANDLER_RESULT_NEED_MEMORY
;
if
(
!
dbus_connection_send
(
p_conn
,
p_msg
,
NULL
)
)
return
DBUS_HANDLER_RESULT_NEED_MEMORY
;
dbus_connection_flush
(
p_conn
);
dbus_message_unref
(
p_msg
);
return
DBUS_HANDLER_RESULT_HANDLED
;
}
/* vtable passed to dbus_connection_register_object_path() */
static
DBusObjectPathVTable
vlc_dbus_root_vtable
=
{
NULL
,
handle_root
,
NULL
,
NULL
,
NULL
,
NULL
};
#endif
/**
/**
* Initialize a libvlc instance
* Initialize a libvlc instance
* This function initializes a previously allocated libvlc instance:
* This function initializes a previously allocated libvlc instance:
...
@@ -608,6 +574,8 @@ int libvlc_InternalInit( libvlc_int_t *p_libvlc, int i_argc, char *ppsz_argv[] )
...
@@ -608,6 +574,8 @@ int libvlc_InternalInit( libvlc_int_t *p_libvlc, int i_argc, char *ppsz_argv[] )
/* FIXME: could be replaced by using Unix sockets */
/* FIXME: could be replaced by using Unix sockets */
#ifdef HAVE_DBUS_3
#ifdef HAVE_DBUS_3
if
(
config_GetInt
(
p_libvlc
,
"one-instance"
)
)
{
/* Initialise D-Bus interface, check for other instances */
/* Initialise D-Bus interface, check for other instances */
DBusConnection
*
p_conn
;
DBusConnection
*
p_conn
;
DBusError
dbus_error
;
DBusError
dbus_error
;
...
@@ -620,26 +588,11 @@ int libvlc_InternalInit( libvlc_int_t *p_libvlc, int i_argc, char *ppsz_argv[] )
...
@@ -620,26 +588,11 @@ int libvlc_InternalInit( libvlc_int_t *p_libvlc, int i_argc, char *ppsz_argv[] )
p_conn
=
dbus_bus_get
(
DBUS_BUS_SESSION
,
&
dbus_error
);
p_conn
=
dbus_bus_get
(
DBUS_BUS_SESSION
,
&
dbus_error
);
if
(
!
p_conn
)
if
(
!
p_conn
)
{
{
msg_Err
(
p_libvlc
,
"Failed to connect to the
D-Bus session daemon: %s"
,
msg_Err
(
p_libvlc
,
"Failed to connect to
D-Bus session daemon: %s"
,
dbus_error
.
message
);
dbus_error
.
message
);
dbus_error_free
(
&
dbus_error
);
dbus_error_free
(
&
dbus_error
);
}
}
else
else
{
/* we request the service org.videolan.vlc */
i_dbus_service
=
dbus_bus_request_name
(
p_conn
,
"org.videolan.vlc"
,
0
,
&
dbus_error
);
if
(
dbus_error_is_set
(
&
dbus_error
)
)
{
msg_Err
(
p_libvlc
,
"Error requesting org.videolan.vlc service: "
"%s
\n
"
,
dbus_error
.
message
);
dbus_error_free
(
&
dbus_error
);
}
else
{
if
(
i_dbus_service
!=
DBUS_REQUEST_NAME_REPLY_PRIMARY_OWNER
)
{
/* the name is already registered by another instance of vlc */
if
(
config_GetInt
(
p_libvlc
,
"one-instance"
)
)
{
{
/* check if a Media Player is available
/* check if a Media Player is available
* if not: D-Bus control is not enabled on the other
* if not: D-Bus control is not enabled on the other
...
@@ -655,16 +608,13 @@ int libvlc_InternalInit( libvlc_int_t *p_libvlc, int i_argc, char *ppsz_argv[] )
...
@@ -655,16 +608,13 @@ int libvlc_InternalInit( libvlc_int_t *p_libvlc, int i_argc, char *ppsz_argv[] )
if
(
p_test_reply
==
NULL
)
if
(
p_test_reply
==
NULL
)
{
{
dbus_error_free
(
&
dbus_error
);
dbus_error_free
(
&
dbus_error
);
msg_Err
(
p_libvlc
,
"one instance mode has been "
msg_Dbg
(
p_libvlc
,
"No Media Player is running. "
"set but D-Bus control interface is not "
"Continuing normally."
);
"enabled. Enable it and restart vlc, or "
"disable one instance mode."
);
}
}
else
else
{
{
dbus_message_unref
(
p_test_reply
);
dbus_message_unref
(
p_test_reply
);
msg_Warn
(
p_libvlc
,
msg_Warn
(
p_libvlc
,
"Another Media Player is running. Exiting"
);
"Another vlc instance exists: will now exit"
);
int
i_input
;
int
i_input
;
DBusMessage
*
p_dbus_msg
;
DBusMessage
*
p_dbus_msg
;
...
@@ -674,7 +624,7 @@ int libvlc_InternalInit( libvlc_int_t *p_libvlc, int i_argc, char *ppsz_argv[] )
...
@@ -674,7 +624,7 @@ int libvlc_InternalInit( libvlc_int_t *p_libvlc, int i_argc, char *ppsz_argv[] )
for
(
i_input
=
optind
;
i_input
<
i_argc
;
i_input
++
)
for
(
i_input
=
optind
;
i_input
<
i_argc
;
i_input
++
)
{
{
msg_Dbg
(
p_libvlc
,
"Give %s to other vlc
\n
"
,
msg_Dbg
(
p_libvlc
,
"Adds %s to the running Media Player
"
,
ppsz_argv
[
i_input
]
);
ppsz_argv
[
i_input
]
);
p_dbus_msg
=
dbus_message_new_method_call
(
p_dbus_msg
=
dbus_message_new_method_call
(
...
@@ -685,20 +635,18 @@ int libvlc_InternalInit( libvlc_int_t *p_libvlc, int i_argc, char *ppsz_argv[] )
...
@@ -685,20 +635,18 @@ int libvlc_InternalInit( libvlc_int_t *p_libvlc, int i_argc, char *ppsz_argv[] )
{
{
msg_Err
(
p_libvlc
,
"D-Bus problem"
);
msg_Err
(
p_libvlc
,
"D-Bus problem"
);
system_End
(
p_libvlc
);
system_End
(
p_libvlc
);
exit
(
0
);
exit
(
VLC_ETIMEOUT
);
}
}
/* append MRLs */
/* append MRLs */
dbus_message_iter_init_append
(
p_dbus_msg
,
dbus_message_iter_init_append
(
p_dbus_msg
,
&
dbus_args
);
&
dbus_args
);
if
(
!
dbus_message_iter_append_basic
(
&
dbus_args
,
if
(
!
dbus_message_iter_append_basic
(
&
dbus_args
,
DBUS_TYPE_STRING
,
DBUS_TYPE_STRING
,
&
ppsz_argv
[
i_input
]
)
)
&
ppsz_argv
[
i_input
]
)
)
{
{
msg_Err
(
p_libvlc
,
"Out of memory"
);
msg_Err
(
p_libvlc
,
"Out of memory"
);
dbus_message_unref
(
p_dbus_msg
);
dbus_message_unref
(
p_dbus_msg
);
system_End
(
p_libvlc
);
system_End
(
p_libvlc
);
exit
(
0
);
exit
(
VLC_ENOMEM
);
}
}
b_play
=
TRUE
;
b_play
=
TRUE
;
if
(
config_GetInt
(
p_libvlc
,
"playlist-enqueue"
)
)
if
(
config_GetInt
(
p_libvlc
,
"playlist-enqueue"
)
)
...
@@ -709,7 +657,7 @@ int libvlc_InternalInit( libvlc_int_t *p_libvlc, int i_argc, char *ppsz_argv[] )
...
@@ -709,7 +657,7 @@ int libvlc_InternalInit( libvlc_int_t *p_libvlc, int i_argc, char *ppsz_argv[] )
msg_Err
(
p_libvlc
,
"Out of memory"
);
msg_Err
(
p_libvlc
,
"Out of memory"
);
dbus_message_unref
(
p_dbus_msg
);
dbus_message_unref
(
p_dbus_msg
);
system_End
(
p_libvlc
);
system_End
(
p_libvlc
);
exit
(
0
);
exit
(
VLC_ENOMEM
);
}
}
/* send message and get a handle for a reply */
/* send message and get a handle for a reply */
...
@@ -719,7 +667,7 @@ int libvlc_InternalInit( libvlc_int_t *p_libvlc, int i_argc, char *ppsz_argv[] )
...
@@ -719,7 +667,7 @@ int libvlc_InternalInit( libvlc_int_t *p_libvlc, int i_argc, char *ppsz_argv[] )
msg_Err
(
p_libvlc
,
"D-Bus problem"
);
msg_Err
(
p_libvlc
,
"D-Bus problem"
);
dbus_message_unref
(
p_dbus_msg
);
dbus_message_unref
(
p_dbus_msg
);
system_End
(
p_libvlc
);
system_End
(
p_libvlc
);
exit
(
0
);
exit
(
VLC_ETIMEOUT
);
}
}
if
(
NULL
==
p_dbus_pending
)
if
(
NULL
==
p_dbus_pending
)
...
@@ -727,7 +675,7 @@ int libvlc_InternalInit( libvlc_int_t *p_libvlc, int i_argc, char *ppsz_argv[] )
...
@@ -727,7 +675,7 @@ int libvlc_InternalInit( libvlc_int_t *p_libvlc, int i_argc, char *ppsz_argv[] )
msg_Err
(
p_libvlc
,
"D-Bus problem"
);
msg_Err
(
p_libvlc
,
"D-Bus problem"
);
dbus_message_unref
(
p_dbus_msg
);
dbus_message_unref
(
p_dbus_msg
);
system_End
(
p_libvlc
);
system_End
(
p_libvlc
);
exit
(
0
);
exit
(
VLC_ETIMEOUT
);
}
}
dbus_connection_flush
(
p_conn
);
dbus_connection_flush
(
p_conn
);
dbus_message_unref
(
p_dbus_msg
);
dbus_message_unref
(
p_dbus_msg
);
...
@@ -738,31 +686,12 @@ int libvlc_InternalInit( libvlc_int_t *p_libvlc, int i_argc, char *ppsz_argv[] )
...
@@ -738,31 +686,12 @@ int libvlc_InternalInit( libvlc_int_t *p_libvlc, int i_argc, char *ppsz_argv[] )
/* bye bye */
/* bye bye */
system_End
(
p_libvlc
);
system_End
(
p_libvlc
);
exit
(
0
);
exit
(
VLC_SUCCESS
);
}
}
}
/* we're not in one-instance mode */
else
{
msg_Dbg
(
p_libvlc
,
"org.videolan.vlc is already registered "
"on the session bus
\n
"
);
}
}
}
/* the named is owned by something else */
else
{
/* register "/" object */
if
(
!
dbus_connection_register_object_path
(
p_conn
,
"/"
,
&
vlc_dbus_root_vtable
,
NULL
)
)
{
msg_Err
(
p_libvlc
,
"Out of memory"
);
}
msg_Dbg
(
p_libvlc
,
"We are the primary owner of org.videolan.vlc on the "
" session bus"
);
}
}
/* no error when requesting the name on the bus */
/* we unreference the connection when we've finished with it */
/* we unreference the connection when we've finished with it */
dbus_connection_unref
(
p_conn
);
dbus_connection_unref
(
p_conn
);
}
/* ( p_conn != NULL ) */
}
#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