Merge branch 'spa_bluez_follow_MediaPlayer1' into 'master'

Draft: RFC: spa: bluez: follow MediaPlayer1 objects and set media.* keys in a2dp-source

See merge request pipewire/pipewire!802
This commit is contained in:
Barnabás Pőcze 2021-08-20 09:02:01 +00:00
commit 3b79ecad7a
4 changed files with 498 additions and 14 deletions

View file

@ -50,6 +50,7 @@ extern "C" {
#define BLUEZ_MEDIA_INTERFACE BLUEZ_SERVICE ".Media1"
#define BLUEZ_MEDIA_ENDPOINT_INTERFACE BLUEZ_SERVICE ".MediaEndpoint1"
#define BLUEZ_MEDIA_TRANSPORT_INTERFACE BLUEZ_SERVICE ".MediaTransport1"
#define BLUEZ_MEDIA_PLAYER_INTERFACE BLUEZ_SERVICE ".MediaPlayer1"
#define BLUEZ_INTERFACE_BATTERY_PROVIDER BLUEZ_SERVICE ".BatteryProvider1"
#define BLUEZ_INTERFACE_BATTERY_PROVIDER_MANAGER BLUEZ_SERVICE ".BatteryProviderManager1"
@ -411,6 +412,7 @@ static inline enum spa_bt_form_factor spa_bt_form_factor_from_class(uint32_t blu
struct spa_bt_a2dp_codec_switch;
struct spa_bt_transport;
struct spa_bt_player;
struct spa_bt_device_events {
#define SPA_VERSION_BT_DEVICE_EVENTS 0
@ -427,6 +429,12 @@ struct spa_bt_device_events {
/** Device freed */
void (*destroy) (void *data);
void (*player_added) (void *data, struct spa_bt_player *player);
void (*player_changed) (void *data, struct spa_bt_player *player);
void (*player_removed) (void *data, struct spa_bt_player *player);
};
struct spa_bt_device {
@ -460,6 +468,7 @@ struct spa_bt_device {
struct spa_list remote_endpoint_list;
struct spa_list transport_list;
struct spa_list codec_switch_list;
struct spa_list player_list;
uint8_t battery;
int has_battery;
@ -644,6 +653,48 @@ static inline enum spa_bt_transport_state spa_bt_transport_state_from_string(con
return SPA_BT_TRANSPORT_STATE_IDLE;
}
enum spa_bt_player_state {
SPA_BT_PLAYER_STATE_UNKNOWN,
SPA_BT_PLAYER_STATE_PLAYING,
SPA_BT_PLAYER_STATE_STOPPED,
SPA_BT_PLAYER_STATE_PAUSED,
SPA_BT_PLAYER_STATE_FORWARD_SEEK,
SPA_BT_PLAYER_STATE_ERROR,
};
enum spa_bt_player_type {
SPA_BT_PLAYER_TYPE_UNKNOWN,
SPA_BT_PLAYER_TYPE_AUDIO,
SPA_BT_PLAYER_TYPE_VIDEO,
SPA_BT_PLAYER_TYPE_AUDIO_BROADCASTING,
SPA_BT_PLAYER_TYPE_VIDEO_BROADCASTING,
};
struct spa_bt_player {
struct spa_list link;
struct spa_bt_monitor *monitor;
struct spa_bt_device *device;
struct spa_list device_link;
char *name;
char *path;
struct {
uint32_t number;
uint64_t duration;
char *title;
char *artist;
char *album;
char *genre;
} track;
enum spa_bt_player_state status;
enum spa_bt_player_type type;
};
#define DEFAULT_AG_VOLUME 1.0f
#define DEFAULT_RX_VOLUME 1.0f
#define DEFAULT_TX_VOLUME 0.064f /* spa_bt_volume_hw_to_linear(40, 100) */