Esempio n. 1
0
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);
}
Esempio n. 2
0
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);
  }
}
Esempio n. 3
0
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");
}
Esempio n. 4
0
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;
}
Esempio n. 5
0
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");
}
Esempio n. 6
0
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)));
  }
}