static int set_avtransport_uri(struct action_event *event) { int rc = 0; ENTER(); if (obtain_instanceid(event, NULL)) { LEAVE(); return -1; } char *uri = upnp_get_string(event, "CurrentURI"); if (uri == NULL) { LEAVE(); return -1; } service_lock(); char *meta = upnp_get_string(event, "CurrentURIMetaData"); int requires_meta_update = replace_transport_uri_and_meta(uri, meta); output_set_uri(uri, (requires_meta_update ? update_meta_from_stream : NULL)); notify_changed_uris(); service_unlock(); free(uri); free(meta); LEAVE(); return rc; }
static int set_avtransport_uri(struct action_event *event) { if (obtain_instanceid(event, NULL) < 0) { return -1; } char *uri = upnp_get_string(event, "CurrentURI"); if (uri == NULL) { return -1; } service_lock(); char *meta = upnp_get_string(event, "CurrentURIMetaData"); // Transport URI/Meta set now, current URI/Meta when it starts playing. int requires_meta_update = replace_transport_uri_and_meta(uri, meta); if (transport_state_ == TRANSPORT_PLAYING) { // Uh, wrong state. // Usually, this should not be called while we are PLAYING, only // STOPPED or PAUSED. But if actually some controller sets this // while playing, probably the best is to update the current // current URI/Meta as well to reflect the state best. replace_current_uri_and_meta(uri, meta); } output_set_uri(uri, (requires_meta_update ? update_meta_from_stream : NULL)); service_unlock(); free(uri); free(meta); return 0; }
static void inform_done_playing(enum PlayFeedback fb) { printf("---------------------------------- Done playing....%d\n", fb); service_lock(); switch (fb) { case PLAY_STOPPED: replace_transport_uri_and_meta("", ""); change_and_notify_transport(TRANSPORT_STOPPED); notify_changed_uris(); break; case PLAY_STARTED_NEXT_STREAM: replace_transport_uri_and_meta( transport_values[TRANSPORT_VAR_NEXT_AV_URI], transport_values[TRANSPORT_VAR_NEXT_AV_URI_META]); replace_var(TRANSPORT_VAR_NEXT_AV_URI, ""); replace_var(TRANSPORT_VAR_NEXT_AV_URI_META, ""); notify_changed_uris(); break; } service_unlock(); }
static void inform_play_transition_from_output(enum PlayFeedback fb) { service_lock(); switch (fb) { case PLAY_STOPPED: replace_transport_uri_and_meta("", ""); replace_current_uri_and_meta("", ""); change_transport_state(TRANSPORT_STOPPED); break; case PLAY_STARTED_NEXT_STREAM: { const char *av_uri = get_var(TRANSPORT_VAR_NEXT_AV_URI); const char *av_meta = get_var(TRANSPORT_VAR_NEXT_AV_URI_META); replace_transport_uri_and_meta(av_uri, av_meta); replace_current_uri_and_meta(av_uri, av_meta); replace_var(TRANSPORT_VAR_NEXT_AV_URI, ""); replace_var(TRANSPORT_VAR_NEXT_AV_URI_META, ""); break; } } service_unlock(); }