void mp_set_playstatus_by_hold_locked(media_pipe_t *mp, const char *msg) { int hold = !!mp->mp_hold_flags; if(hold == mp->mp_hold_gate) return; mp->mp_hold_gate = hold; int cmd = hold ? MB_CTRL_PAUSE : MB_CTRL_PLAY; if(mp->mp_flags & MP_VIDEO) mp_send_cmd_locked(mp, &mp->mp_video, cmd); mp_send_cmd_locked(mp, &mp->mp_audio, cmd); if(!hold) prop_set_void(mp->mp_prop_pausereason); else prop_set_string(mp->mp_prop_pausereason, msg ?: "Paused by user"); prop_set_string(mp->mp_prop_playstatus, hold ? "pause" : "play"); mp_event_dispatch(mp, event_create_int(EVENT_HOLD, hold)); if(mp->mp_flags & MP_FLUSH_ON_HOLD) mp_flush_locked(mp, 0); if(mp->mp_hold_changed != NULL) mp->mp_hold_changed(mp); }
void js_prop_set_from_jsval(JSContext *cx, prop_t *p, jsval value) { JSBool b; if(JSVAL_IS_INT(value)) { prop_set_int(p, JSVAL_TO_INT(value)); } else if(JSVAL_IS_BOOLEAN(value)) { prop_set_int(p, JSVAL_TO_BOOLEAN(value)); } else if(JSVAL_IS_NULL(value) || JSVAL_IS_VOID(value)) { prop_set_void(p); } else if(JSVAL_IS_DOUBLE(value)) { double d; if(JS_ValueToNumber(cx, value, &d)) prop_set_float(p, d); } else if(JS_HasInstance(cx, RichText, value, &b) && b) { JSObject *o = JSVAL_TO_OBJECT(value); jsval v2; if(!JS_EnterLocalRootScope(cx)) return; if(!JS_GetProperty(cx, o, "text", &v2)) { JS_LeaveLocalRootScope(cx); return; } prop_set_string_ex(p, NULL, JS_GetStringBytes(JS_ValueToString(cx, v2)), PROP_STR_RICH); JS_LeaveLocalRootScope(cx); } else if(JSVAL_IS_STRING(value)) { js_prop_from_str(cx, p, value); } else if(JSVAL_IS_OBJECT(value)) { JSObject *obj = JSVAL_TO_OBJECT(value); JSClass *c = JS_GetClass(cx, obj); if(!strcmp(c->name, "XML")) // Treat some classes special js_prop_from_str(cx, p, value); else js_prop_from_object(cx, obj, p); } else { prop_set_void(p); } }
void mp_reset(media_pipe_t *mp) { cancellable_reset(mp->mp_cancellable); prop_set(mp->mp_prop_io, "bitrate", PROP_SET_VOID); prop_set(mp->mp_prop_io, "bitrateValid", PROP_SET_VOID); prop_destroy_childs(mp->mp_prop_audio_tracks); prop_destroy_childs(mp->mp_prop_subtitle_tracks); prop_set_void(mp->mp_prop_audio_track_current); mp_add_track_off(mp->mp_prop_subtitle_tracks, "sub:off"); prop_set_string(mp->mp_prop_subtitle_track_current, "sub:off"); }
static void * video_player_idle(void *aux) { video_playback_t *vp = aux; int run = 1; event_t *e = NULL, *next; media_pipe_t *mp = vp->vp_mp; char errbuf[256]; prop_t *errprop = prop_ref_inc(prop_create(mp->mp_prop_root, "error")); while(run) { if(e == NULL) e = mp_dequeue_event(mp); if(event_is_type(e, EVENT_PLAY_URL)) { prop_set_void(errprop); event_playurl_t *ep = (event_playurl_t *)e; int flags = 0; if(ep->primary) flags |= BACKEND_VIDEO_PRIMARY; if(ep->no_audio) flags |= BACKEND_VIDEO_NO_AUDIO; next = backend_play_video(ep->url, mp, flags, ep->priority, errbuf, sizeof(errbuf)); if(next == NULL) { notify_add(NOTIFY_ERROR, NULL, 5, "URL: %s\nError: %s", ep->url, errbuf); prop_set_string(errprop, errbuf); } event_release(e); e = next; continue; } else if(event_is_type(e, EVENT_EXIT)) { event_release(e); break; } event_release(e); e = NULL; } prop_ref_dec(errprop); return NULL; }
void mp_reset(media_pipe_t *mp) { mp_unhold(mp, MP_HOLD_PRE_BUFFERING | MP_HOLD_STREAM | MP_HOLD_SYNC); cancellable_reset(mp->mp_cancellable); prop_set(mp->mp_prop_io, "bitrate", PROP_SET_VOID); prop_set(mp->mp_prop_io, "bitrateValid", PROP_SET_VOID); prop_t *p = prop_create(mp->mp_prop_io, "infoNodes"); prop_destroy_childs(p); prop_destroy_childs(mp->mp_prop_audio_tracks); prop_destroy_childs(mp->mp_prop_subtitle_tracks); prop_set_void(mp->mp_prop_audio_track_current); mp_add_track_off(mp->mp_prop_subtitle_tracks, "sub:off"); prop_set_string(mp->mp_prop_subtitle_track_current, "sub:off"); }
void js_prop_set_from_jsval(JSContext *cx, prop_t *p, jsval value, int recurse) { JSBool b; if(JSVAL_IS_INT(value)) { prop_set_int(p, JSVAL_TO_INT(value)); } else if(JSVAL_IS_BOOLEAN(value)) { prop_set_int(p, JSVAL_TO_BOOLEAN(value)); } else if(JSVAL_IS_DOUBLE(value)) { double d; if(JS_ValueToNumber(cx, value, &d)) prop_set_float(p, d); } else if(JS_HasInstance(cx, RichText, value, &b) && b) { JSObject *o = JSVAL_TO_OBJECT(value); jsval v2; if(!JS_EnterLocalRootScope(cx)) return; if(!JS_GetProperty(cx, o, "text", &v2)) { JS_LeaveLocalRootScope(cx); return; } prop_set_string_ex(p, NULL, JS_GetStringBytes(JS_ValueToString(cx, v2)), PROP_STR_RICH); JS_LeaveLocalRootScope(cx); } else if(JSVAL_IS_VOID(value) || JSVAL_IS_NULL(value)) { prop_set_void(p); } else if(recurse && JSVAL_IS_OBJECT(value)) { js_prop_from_object(cx, JSVAL_TO_OBJECT(value), p, recurse); } else { prop_set_string(p, JS_GetStringBytes(JS_ValueToString(cx, value))); } }