@@ -51,6 +51,10 @@
typedef enum {
TRANSPORT_STATE_IDLE, /* Not acquired and suspended */
TRANSPORT_STATE_PENDING, /* Playing but not acquired */
+ /* Playing but not acquired, applicable only for transports
+ * created by a broadcast sink
+ */
+ TRANSPORT_STATE_BROADCASTING,
TRANSPORT_STATE_REQUESTING, /* Acquire in progress */
TRANSPORT_STATE_ACTIVE, /* Acquired and playing */
TRANSPORT_STATE_SUSPENDING, /* Release in progress */
@@ -59,6 +63,7 @@ typedef enum {
static const char *str_state[] = {
"TRANSPORT_STATE_IDLE",
"TRANSPORT_STATE_PENDING",
+ "TRANSPORT_STATE_BROADCASTING",
"TRANSPORT_STATE_REQUESTING",
"TRANSPORT_STATE_ACTIVE",
"TRANSPORT_STATE_SUSPENDING",
@@ -139,6 +144,8 @@ static const char *state2str(transport_state_t state)
return "idle";
case TRANSPORT_STATE_PENDING:
return "pending";
+ case TRANSPORT_STATE_BROADCASTING:
+ return "broadcasting";
case TRANSPORT_STATE_ACTIVE:
case TRANSPORT_STATE_SUSPENDING:
return "active";
@@ -152,6 +159,7 @@ static gboolean state_in_use(transport_state_t state)
switch (state) {
case TRANSPORT_STATE_IDLE:
case TRANSPORT_STATE_PENDING:
+ case TRANSPORT_STATE_BROADCASTING:
return FALSE;
case TRANSPORT_STATE_REQUESTING:
case TRANSPORT_STATE_ACTIVE:
@@ -679,7 +687,8 @@ static DBusMessage *try_acquire(DBusConnection *conn, DBusMessage *msg,
if (transport->state >= TRANSPORT_STATE_REQUESTING)
return btd_error_not_authorized(msg);
- if (transport->state != TRANSPORT_STATE_PENDING)
+ if ((transport->state != TRANSPORT_STATE_PENDING) &&
+ (transport->state != TRANSPORT_STATE_BROADCASTING))
return btd_error_not_available(msg);
owner = media_owner_create(msg);
@@ -1281,7 +1290,8 @@ static void transport_update_playing(struct media_transport *transport,
str_state[transport->state], playing);
if (playing == FALSE) {
- if (transport->state == TRANSPORT_STATE_PENDING)
+ if ((transport->state == TRANSPORT_STATE_PENDING) ||
+ (transport->state == TRANSPORT_STATE_BROADCASTING))
transport_set_state(transport, TRANSPORT_STATE_IDLE);
else if (transport->state == TRANSPORT_STATE_ACTIVE) {
/* Remove owner */