pipewire/src/dbus/org.pulsevideo.xml
Wim Taymans 4bc308835a Implement negotiation
Use generic byte blobs for formats. We currently use them to store
gstreamer caps but we could also use them to exchange serialized
GVariants if we want.

Make properties a variant dictionary
2015-05-14 17:46:12 +02:00

193 lines
6.5 KiB
XML

<!DOCTYPE node PUBLIC
"-//freedesktop//DTD D-BUS Object Introspection 1.0//EN"
"http://www.freedesktop.org/standards/dbus/1.0/introspect.dtd" >
<node xmlns:doc="http://www.freedesktop.org/dbus/1.0/doc.dtd">
<!--
org.pulsevideo.Daemon1:
@short_description: Main interface for the pulsevideo daemon
Interface to get properties from the pulsevideo daemon and to
establish a client connection.
-->
<interface name='org.pulsevideo.Daemon1'>
<!-- UserName: Name of the user that started the daemon -->
<property name='UserName' type='s' access='read' />
<!-- HostName: Name of the machine the daemon is running on -->
<property name='HostName' type='s' access='read' />
<!-- Version: Version of the daemon -->
<property name='Version' type='s' access='read' />
<!-- Name: Name of the daemon -->
<property name='Name' type='s' access='read' />
<!-- Properties: Extra properties of the daemon -->
<property name='Properties' type='a{sv}' access='read' />
<!-- ConnectClient:
@properties: properties of the client
@client: a new client object
Register a client to the pulsevideo daemon. A new client object
will be generated that should be used to perform any other
action on the server.
-->
<method name='ConnectClient'>
<arg type='a{sv}' name='properties' direction='in'/>
<arg type='o' name='client' direction='out'/>
</method>
</interface>
<!--
org.pulsevideo.Client1:
@short_description: Main client interface
Interface obtained after connecting a client and allows for
obtaining an output object from a source.
-->
<interface name='org.pulsevideo.Client1'>
<!-- Name: Name of the client -->
<property name='Name' type='s' access='read' />
<!-- Name: Properties of the client -->
<property name='Properties' type='a{sv}' access='read' />
<!-- Disconnect:
Disconnect the client from the server.
-->
<method name='Disconnect'/>
<!-- CreateSourceOutput:
@source: the Source1 object path or / for default
@incaps: input capabilities
@output: the SourceOutput1 object path
Create a new output for @source with given @incaps
-->
<method name='CreateSourceOutput'>
<arg type='o' name='source' direction='in'/>
<arg type='s' name='accepted_formats' direction='in'/>
<arg type='o' name='output' direction='out'/>
</method>
<!-- CreateSourceInput:
@incaps: input capabilities
@input: the SourceInput1 object path
Create a new source and input object with given @incaps
-->
<method name='CreateSourceInput'>
<arg type='s' name='possible_formats' direction='in'/>
<arg type='o' name='input' direction='out'/>
</method>
</interface>
<!--
org.pulsevideo.Introspect:
@short_description: Main introspection interface
This interface allows one to introspect the object on the
server
-->
<interface name='org.pulsevideo.Introspect1'>
<!-- GetClients:
@clients: an array of client objects
Get a list of clients connected to this server
-->
<method name='GetClients'>
<arg type='ao' name='clients' direction='out'/>
</method>
<!-- GetSources:
@sources: an array of source objects
Get a list of sources available on this server
-->
<method name='GetSources'>
<arg type='ao' name='sources' direction='out'/>
</method>
</interface>
<!--
org.pulsevideo.Source1:
@short_description: Main source interface
A source is an object that can provide media content.
-->
<interface name='org.pulsevideo.Source1'>
<!-- Name: the name of the source -->
<property name='Name' type='s' access='read' />
<!-- Properties: extra source properties -->
<property name='Properties' type='a{sv}' access='read' />
<!-- state: state of the source
0 = the source is in error
1 = the source is initializing
2 = the source is suspended, this means the device is closed
3 = the source is idle, this means the device is opened but
no source-output is consuming the data
4 = the source is running
-->
<property name='State' type='u' access='read' />
<!-- Capabilities:
The capabilities of this source. This includes
supported data formats and transports.
-->
<property name='PossibleFormats' type='s' access='read' />
</interface>
<!--
org.pulsevideo.SourceOutput1:
@short_description: Interface for source output
This interface is used to control the output of a source and
start/stop the media transport.
-->
<interface name='org.pulsevideo.SourceOutput1'>
<!-- Client: the owner client of this source output -->
<property name='Client' type='o' access='read' />
<!-- Source: the source of this source output -->
<property name='Source' type='o' access='read' />
<!-- Capabilities: capabilities of the source output -->
<property name='PossibleFormats' type='s' access='read' />
<!-- Start:
@incaps: input capabilities
@fd: output file descriptor
@outcaps: output capabilities
Start the datatransfer of the source with @incaps.
The result is a file descriptor that can be used to get metadata
and media. @outcaps contains the final media format and transport
properties.
-->
<method name='Start'>
<arg type='s' name='requested_format' direction='in'/>
<arg type='h' name='fd' direction='out'/>
<arg type='s' name='format' direction='out'/>
</method>
<!-- Stop:
Stop data transport
-->
<method name='Stop'/>
<!-- Remove:
Remove the source output
-->
<method name='Remove'/>
<!-- This is a possible push based API. It would require a dbus call
for each media packet, which is probably not a good idea right now.
We would probably also want something more lightweight for sending
the properties with each fd.
<method name='Start'>
<arg type='a{sv}' name='props' direction='in'/>
<arg type='a{sv}' name='props' direction='out'/>
</method>
<method name='Stop'>
</method>
<signal name='NewData'>
<arg type='h' name='data' direction='out'/>
<arg type='a{sv}' name='props' direction='out'/>
</signal>
<method name='FreeData'>
<arg type='h' name='data' direction='in'/>
</method>
-->
</interface>
</node>