mirror of
https://gitlab.freedesktop.org/pulseaudio/pulseaudio.git
synced 2025-11-06 13:29:56 -05:00
implement device reservation scheme
This commit is contained in:
parent
3c73025bf5
commit
c341010304
10 changed files with 1102 additions and 2 deletions
68
src/modules/reserve.h
Normal file
68
src/modules/reserve.h
Normal file
|
|
@ -0,0 +1,68 @@
|
|||
#ifndef fooreservehfoo
|
||||
#define fooreservehfoo
|
||||
|
||||
/***
|
||||
Copyright 2009 Lennart Poettering
|
||||
|
||||
Permission is hereby granted, free of charge, to any person
|
||||
obtaining a copy of this software and associated documentation files
|
||||
(the "Software"), to deal in the Software without restriction,
|
||||
including without limitation the rights to use, copy, modify, merge,
|
||||
publish, distribute, sublicense, and/or sell copies of the Software,
|
||||
and to permit persons to whom the Software is furnished to do so,
|
||||
subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be
|
||||
included in all copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
||||
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
||||
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
|
||||
BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
|
||||
ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
|
||||
CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
SOFTWARE.
|
||||
***/
|
||||
|
||||
#include <dbus/dbus.h>
|
||||
#include <inttypes.h>
|
||||
|
||||
typedef struct rd_device rd_device;
|
||||
|
||||
/* Prototype for a function that is called whenever someone else wants
|
||||
* your app to release the device you having locked. A return value <=
|
||||
* 0 denies the request, a positive return value agrees to it. Before
|
||||
* returning your application should close the device in question
|
||||
* completely to make sure the new application may acceess it. */
|
||||
typedef int (*rd_request_cb_t)(
|
||||
rd_device *d,
|
||||
int forced); /* Non-zero if an application forcibly took the lock away without asking. If this is the case then the return value of this call is ignored. */
|
||||
|
||||
/* Try to lock the device. Returns 0 on success, a negative errno
|
||||
* style return value on error. The DBus error might be set as well if
|
||||
* the error was caused D-Bus. */
|
||||
int rd_acquire(
|
||||
rd_device **d, /* On success a pointer to the newly allocated rd_device object will be filled in here */
|
||||
DBusConnection *connection,
|
||||
const char *device_name, /* The device to lock, e.g. "Audio0" */
|
||||
const char *application_name, /* A human readable name of the application, e.g. "PulseAudio Sound Server" */
|
||||
int32_t priority, /* The priority for this application. If unsure use 0 */
|
||||
rd_request_cb_t request_cb, /* Will be called whenever someone asks that this device shall be released. May be NULL if priority is INT32_MAX */
|
||||
DBusError *error); /* If we fail due to a D-Bus related issue the error will be filled in here. May be NULL. */
|
||||
|
||||
/* Unlock (if needed) and destroy a rd_device object again */
|
||||
void rd_release(rd_device *d);
|
||||
|
||||
/* Set the application device name for a rd_device object Returns 0 on
|
||||
* success, a negative errno style return value on error. */
|
||||
int rd_set_application_device_name(rd_device *d, const char *name);
|
||||
|
||||
/* Attach a userdata pointer to a rd_device */
|
||||
void rd_set_userdata(rd_device *d, void *userdata);
|
||||
|
||||
/* Query the userdata pointer from a rd_device. Returns NULL if no
|
||||
* userdata was set. */
|
||||
void* rd_get_userdata(rd_device *d);
|
||||
|
||||
#endif
|
||||
Loading…
Add table
Add a link
Reference in a new issue