From: Mikel Astiz <mikel.astiz@xxxxxxxxxxxx> This flag represents whether the transport is actually streaming, which is mapped trivially after the state changes in gateway, headset and A2DP sink or sources. --- audio/media.c | 29 ++++++++++++++++++++++++++--- audio/transport.c | 7 +++++++ audio/transport.h | 2 ++ 3 files changed, 35 insertions(+), 3 deletions(-) diff --git a/audio/media.c b/audio/media.c index 505a490..8eee149 100644 --- a/audio/media.c +++ b/audio/media.c @@ -494,12 +494,12 @@ static void headset_state_changed(struct audio_device *dev, switch (new_state) { case HEADSET_STATE_DISCONNECTED: transport = find_device_transport(endpoint, dev); - if (transport != NULL) { DBG("Clear endpoint %p", endpoint); + media_transport_set_playing(transport, FALSE); clear_configuration(endpoint, transport); } - break; + return; case HEADSET_STATE_CONNECTING: set_configuration(endpoint, dev, NULL, 0, headset_setconf_cb, dev, NULL); @@ -511,6 +511,12 @@ static void headset_state_changed(struct audio_device *dev, case HEADSET_STATE_PLAYING: break; } + + transport = find_device_transport(endpoint, dev); + if (new_state == HEADSET_STATE_PLAYING) + media_transport_set_playing(transport, TRUE); + else + media_transport_set_playing(transport, FALSE); } static const char *get_name(struct a2dp_sep *sep, void *user_data) @@ -660,9 +666,10 @@ static void gateway_state_changed(struct audio_device *dev, transport = find_device_transport(endpoint, dev); if (transport != NULL) { DBG("Clear endpoint %p", endpoint); + media_transport_set_playing(transport, FALSE); clear_configuration(endpoint, transport); } - break; + return; case GATEWAY_STATE_CONNECTING: set_configuration(endpoint, dev, NULL, 0, gateway_setconf_cb, dev, NULL); @@ -672,6 +679,12 @@ static void gateway_state_changed(struct audio_device *dev, case GATEWAY_STATE_PLAYING: break; } + + transport = find_device_transport(endpoint, dev); + if (new_state == GATEWAY_STATE_PLAYING) + media_transport_set_playing(transport, TRUE); + else + media_transport_set_playing(transport, FALSE); } static void a2dp_source_state_changed(struct audio_device *dev, @@ -687,6 +700,11 @@ static void a2dp_source_state_changed(struct audio_device *dev, transport = find_device_transport(endpoint, dev); if (transport == NULL) return; + + if (new_state == SOURCE_STATE_PLAYING) + media_transport_set_playing(transport, TRUE); + else + media_transport_set_playing(transport, FALSE); } static gboolean endpoint_init_a2dp_source(struct media_endpoint *endpoint, @@ -719,6 +737,11 @@ static void a2dp_sink_state_changed(struct audio_device *dev, transport = find_device_transport(endpoint, dev); if (transport == NULL) return; + + if (new_state == SINK_STATE_PLAYING) + media_transport_set_playing(transport, TRUE); + else + media_transport_set_playing(transport, FALSE); } static gboolean endpoint_init_a2dp_sink(struct media_endpoint *endpoint, diff --git a/audio/transport.c b/audio/transport.c index 832ad2a..f988d48 100644 --- a/audio/transport.c +++ b/audio/transport.c @@ -86,6 +86,7 @@ struct media_transport { uint16_t omtu; /* Transport output mtu */ gboolean read_lock; gboolean write_lock; + gboolean playing; gboolean in_use; guint (*resume) (struct media_transport *transport, struct media_owner *owner); @@ -898,6 +899,12 @@ static void get_properties_gateway(struct media_transport *transport, /* None */ } +void media_transport_set_playing(struct media_transport *transport, + gboolean playing) +{ + transport->playing = playing; +} + void transport_get_properties(struct media_transport *transport, DBusMessageIter *iter) { diff --git a/audio/transport.h b/audio/transport.h index d20c327..78323b2 100644 --- a/audio/transport.h +++ b/audio/transport.h @@ -37,5 +37,7 @@ void media_transport_update_delay(struct media_transport *transport, uint16_t delay); void media_transport_update_volume(struct media_transport *transport, uint8_t volume); +void media_transport_set_playing(struct media_transport *transport, + gboolean playing); void transport_get_properties(struct media_transport *transport, DBusMessageIter *iter); -- 1.7.7.6 -- To unsubscribe from this list: send the line "unsubscribe linux-bluetooth" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html