void upnp_control_init(struct upnp_device *device) { upnp_control_get_service(); // Set initial volume. float volume_fraction = 0; if (output_get_volume(&volume_fraction) == 0) { Log_info("control", "Output inital volume is %f; setting " "control variables accordingly.", volume_fraction); change_volume_decibel(20 * log(volume_fraction) / log(10)); } assert(control_service_.last_change == NULL); control_service_.last_change = UPnPLastChangeCollector_new(state_variables_, CONTROL_EVENT_XML_NS, device, CONTROL_SERVICE_ID); // According to UPnP-av-RenderingControl-v3-Service-20101231.pdf, 2.3.1 // page 51, the A_ARG_TYPE* variables are not evented. UPnPLastChangeCollector_add_ignore(control_service_.last_change, CONTROL_VAR_AAT_CHANNEL); UPnPLastChangeCollector_add_ignore(control_service_.last_change, CONTROL_VAR_AAT_INSTANCE_ID); UPnPLastChangeCollector_add_ignore(control_service_.last_change, CONTROL_VAR_AAT_PRESET_NAME); }
void upnp_transport_init(struct upnp_device *device) { assert(transport_service_.last_change == NULL); transport_service_.last_change = UPnPLastChangeCollector_new(state_variables_, TRANSPORT_EVENT_XML_NS, device, TRANSPORT_SERVICE_ID); // Times and counters should not be evented. We only change REL_TIME // right now anyway (AVTransport-v1 document, 2.3.1 Event Model) UPnPLastChangeCollector_add_ignore(transport_service_.last_change, TRANSPORT_VAR_REL_TIME_POS); UPnPLastChangeCollector_add_ignore(transport_service_.last_change, TRANSPORT_VAR_ABS_TIME_POS); UPnPLastChangeCollector_add_ignore(transport_service_.last_change, TRANSPORT_VAR_REL_CTR_POS); UPnPLastChangeCollector_add_ignore(transport_service_.last_change, TRANSPORT_VAR_ABS_CTR_POS); pthread_t thread; pthread_create(&thread, NULL, thread_update_track_time, NULL); //we auto play when device start , slave mode do not auto play if(g_device_play_mode != DEVICE_PLAY_MODE_SLAVE && !access(M3U_STREAMINGPLAYLIST_PATH, 0)){ if(!output_set_playlist(M3U_STREAMINGPLAYLIST_PATH)){ replace_var(TRANSPORT_VAR_AAT_PLAYLIST_STEP, "Reset"); if(!output_play(NULL)) change_transport_state(TRANSPORT_PLAYING); } //auto play end } }
void upnp_transport_init(struct upnp_device *device) { assert(transport_service_.last_change == NULL); transport_service_.last_change = UPnPLastChangeCollector_new(state_variables_, device, TRANSPORT_SERVICE_ID); // Times and counters should not be evented. We only change REL_TIME // right now anyway (AVTransport-v1 document, 2.3.1 Event Model) UPnPLastChangeCollector_add_ignore(transport_service_.last_change, TRANSPORT_VAR_REL_TIME_POS); UPnPLastChangeCollector_add_ignore(transport_service_.last_change, TRANSPORT_VAR_ABS_TIME_POS); UPnPLastChangeCollector_add_ignore(transport_service_.last_change, TRANSPORT_VAR_REL_CTR_POS); UPnPLastChangeCollector_add_ignore(transport_service_.last_change, TRANSPORT_VAR_ABS_CTR_POS); pthread_t thread; pthread_create(&thread, NULL, thread_update_track_time, NULL); }