Example #1
0
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);
}