void mp_become_primary(struct media_pipe *mp) { mp_init_audio(mp); if(media_primary == mp) return; hts_mutex_lock(&media_mutex); assert(mp->mp_flags & MP_PRIMABLE); if(media_primary != NULL) { prop_set_int(media_primary->mp_prop_primary, 0); event_t *e = event_create_action(ACTION_STOP); mp_enqueue_event(media_primary, e); event_release(e); } media_primary = mp_retain(mp); prop_select(mp->mp_prop_root); prop_link(mp->mp_prop_root, media_prop_current); prop_set_int(mp->mp_prop_primary, 1); hts_mutex_unlock(&media_mutex); }
static prop_t * settings_multiopt_add(setting_t *s, const char *id, prop_t *o, int selected) { if(selected) { if(s->s_sub != NULL) prop_select(o); else mystrset(&s->s_initial_value, id); } if(s->s_first == NULL) s->s_first = strdup(id); return o; }
void settings_multiopt_initiate(setting_t *s, prop_callback_string_t *cb, void *opaque, prop_courier_t *pc, htsmsg_t *store, settings_saver_t *saver, void *saver_opaque) { const char *str = store ? htsmsg_get_str(store, s->s_id) : NULL; prop_t *o = str ? prop_find(s->s_val, str, NULL) : NULL; if(o == NULL && s->s_initial_value != NULL) o = prop_find(s->s_val, s->s_initial_value, NULL); if(o == NULL && s->s_first != NULL) o = prop_find(s->s_val, s->s_first, NULL); if(o != NULL) { prop_select(o); rstr_t *name = prop_get_name(o); cb(opaque, rstr_get(name)); rstr_release(name); prop_ref_dec(o); } s->s_callback = cb; s->s_opaque = opaque; mystrset(&s->s_initial_value, NULL); s->s_sub = prop_subscribe(PROP_SUB_NO_INITIAL_UPDATE, PROP_TAG_CALLBACK, callback_opt, s, PROP_TAG_ROOT, s->s_val, PROP_TAG_COURIER, pc, NULL); s->s_store = store; s->s_saver = saver; s->s_saver_opaque = saver_opaque; }