示例#1
0
static JSBool 
js_createInt(JSContext *cx, JSObject *obj, uintN argc, 
		jsval *argv, jsval *rval)
{
  js_setting_group_t *jsg = JS_GetPrivate(cx, obj);
  const char *id;
  const char *title;
  int def;
  int min;
  int max;
  int step;
  const char* unit;
  JSObject *func;
  JSBool persistent = JS_FALSE;

  if(!JS_ConvertArguments(cx, argc, argv, "ssiiiiso/b",
			  &id, &title, &def, &min, &max, &step, &unit, &func,
			  &persistent)){
    return JS_FALSE;
  }


  js_setting_t *jss = jss_create(cx, obj, id, rval, func, jsg, persistent);
  if(jss == NULL)
    return JS_FALSE;

  if(persistent && jsg->jsg_kv_url)
    def = kv_url_opt_get_int(jsg->jsg_kv_url, KVSTORE_DOMAIN_PLUGIN, 
			     id, def);
  jss->jss_s =
    setting_create(SETTING_INT, jsg->jsg_root,
                   SETTINGS_INITIAL_UPDATE | jsg->jsg_settings_flags,

                   SETTING_TITLE_CSTR(title),
                   SETTING_VALUE(def),
                   SETTING_RANGE(min, max),
                   SETTING_STEP(step),
                   SETTING_UNIT_CSTR(unit),
                   SETTING_COURIER(js_global_pc),
                   SETTING_CALLBACK(js_store_update_int, jss),
                   SETTING_HTSMSG_CUSTOM_SAVER(id, jsg->jsg_store,
                                               js_setting_group_save, jsg),
                   NULL);
  jss->jss_cx = NULL;

  return JS_TRUE;
}
示例#2
0
void
audio_init(void)
{
  htsmsg_t *store = htsmsg_store_load("audio2");
  if(store == NULL)
    store = htsmsg_create_map();

  prop_t *asettings =
    settings_add_dir(NULL, _p("Audio settings"), NULL, NULL,
                     _p("Setup audio output"),
                     "settings:audio");

  audio_mastervol_init();
  audio_class = audio_driver_init(asettings, store);

  settings_create_separator(asettings,
			    _p("Audio settings during video playback"));

  gconf.setting_av_volume =
    setting_create(SETTING_INT, asettings,
                   SETTINGS_INITIAL_UPDATE,
                   SETTING_TITLE(_p("Audio gain adjustment during video playback")),
                   SETTING_RANGE(-12, 12),
                   SETTING_UNIT_CSTR("dB"),
                   SETTING_HTSMSG("videovolume", store, "audio2"),
                   SETTING_VALUE_ORIGIN("global"),
                   NULL);

  gconf.setting_av_sync =
    setting_create(SETTING_INT, asettings,
                   SETTINGS_INITIAL_UPDATE,
                   SETTING_TITLE(_p("Audio delay")),
                   SETTING_RANGE(-5000, 5000),
                   SETTING_STEP(50),
                   SETTING_UNIT_CSTR("ms"),
                   SETTING_HTSMSG("avdelta", store, "audio2"),
                   SETTING_VALUE_ORIGIN("global"),
                   NULL);


#if CONFIG_AUDIOTEST
  audio_test_init(asettings);
#endif
}
示例#3
0
static void
init_autostandby(void)
{
  setting_create(SETTING_INT, gconf.settings_general, SETTINGS_INITIAL_UPDATE,
                 SETTING_TITLE(_p("Automatic standby")),
                 SETTING_STORE("runcontrol", "autostandby"),
                 SETTING_WRITE_INT(&standby_delay),
                 SETTING_RANGE(0, 60),
                 SETTING_STEP(5),
                 SETTING_UNIT_CSTR("min"),
                 SETTING_ZERO_TEXT(_p("Off")),
                 NULL);

  last_activity = arch_get_ts();

  prop_subscribe(0,
		 PROP_TAG_NAME("global", "media", "current", "playstatus"),
		 PROP_TAG_CALLBACK_STRING, current_media_playstatus, NULL,
		 NULL);

  callout_arm(&autostandby_timer, check_autostandby, NULL, 1);
}
示例#4
0
void
mp_settings_init(media_pipe_t *mp, const char *url, const char *dir_url,
                 const char *parent_title)
{
  setting_t *p;
  prop_t *c = mp->mp_prop_ctrl;
  char set_directory_title[256];
  char clr_directory_title[256];

  mp_settings_clear(mp);

  if(url == NULL || !(mp->mp_flags & MP_VIDEO))
    return;

  TRACE(TRACE_DEBUG, "media",
        "Settings initialized for URL %s in folder: %s [%s]",
        url, parent_title ?: "<unset>", dir_url ?: "<unset>");

  if(dir_url != NULL) {
    rstr_t *fmt;

    fmt = _("Save as defaults for folder '%s'");
    snprintf(set_directory_title, sizeof(set_directory_title), rstr_get(fmt),
             parent_title);
    rstr_release(fmt);

    fmt = _("Reset defaults for folder '%s'");
    snprintf(clr_directory_title, sizeof(clr_directory_title), rstr_get(fmt),
             parent_title);
    rstr_release(fmt);
  }

  // --- Video -------------------------------------------------

  p = make_dir_setting(SETTING_INT, "vzoom", &mp->mp_settings_video_dir,
                       dir_url, video_settings.vzoom_setting, mp);

  setting_create(SETTING_INT, mp->mp_setting_video_root,
                 SETTINGS_INITIAL_UPDATE,
                 SETTING_TITLE(_p("Video zoom")),
                 SETTING_RANGE(50, 200),
                 SETTING_UNIT_CSTR("%"),
                 SETTING_MUTEX(mp),
                 SETTING_LOCKMGR(mp_lockmgr),
                 SETTING_WRITE_PROP(prop_create(c, "vzoom")),
                 SETTING_KVSTORE(url, "vzoom"),
                 SETTING_GROUP(&mp->mp_settings_video),
                 SETTING_INHERIT(p),
                 NULL);

  p = make_dir_setting(SETTING_INT, "panhorizontal", &mp->mp_settings_video_dir,
                       dir_url, video_settings.pan_horizontal_setting, mp);

  setting_create(SETTING_INT, mp->mp_setting_video_root,
                 SETTINGS_INITIAL_UPDATE,
                 SETTING_TITLE(_p("Horizontal pan")),
                 SETTING_RANGE(-100, 100),
                 SETTING_UNIT_CSTR("%"),
                 SETTING_MUTEX(mp),
                 SETTING_LOCKMGR(mp_lockmgr),
                 SETTING_WRITE_PROP(prop_create(c, "panhorizontal")),
                 SETTING_KVSTORE(url, "panhorizontal"),
                 SETTING_GROUP(&mp->mp_settings_video),
                 SETTING_INHERIT(p),
                 NULL);

  p = make_dir_setting(SETTING_INT, "panvertical", &mp->mp_settings_video_dir,
                       dir_url, video_settings.pan_vertical_setting, mp);

  setting_create(SETTING_INT, mp->mp_setting_video_root,
                 SETTINGS_INITIAL_UPDATE,
                 SETTING_TITLE(_p("Vertical pan")),
                 SETTING_RANGE(-100, 100),
                 SETTING_UNIT_CSTR("%"),
                 SETTING_MUTEX(mp),
                 SETTING_LOCKMGR(mp_lockmgr),
                 SETTING_WRITE_PROP(prop_create(c, "panvertical")),
                 SETTING_KVSTORE(url, "panvertical"),
                 SETTING_GROUP(&mp->mp_settings_video),
                 SETTING_INHERIT(p),
                 NULL);

  p = make_dir_setting(SETTING_BOOL, "hstretch", &mp->mp_settings_video_dir,
                       dir_url, video_settings.stretch_horizontal_setting, mp);

  setting_create(SETTING_BOOL, mp->mp_setting_video_root,
                 SETTINGS_INITIAL_UPDATE,
                 SETTING_MUTEX(mp),
                 SETTING_LOCKMGR(mp_lockmgr),
                 SETTING_TITLE(_p("Stretch video to widescreen")),
                 SETTING_WRITE_PROP(prop_create(c, "hstretch")),
                 SETTING_KVSTORE(url, "hstretch"),
                 SETTING_GROUP(&mp->mp_settings_video),
                 SETTING_INHERIT(p),
                 NULL);

  p = make_dir_setting(SETTING_BOOL, "fstretch", &mp->mp_settings_video_dir,
                       dir_url, video_settings.stretch_fullscreen_setting, mp);

  setting_create(SETTING_BOOL, mp->mp_setting_video_root,
                 SETTINGS_INITIAL_UPDATE,
                 SETTING_MUTEX(mp),
                 SETTING_LOCKMGR(mp_lockmgr),
                 SETTING_TITLE(_p("Stretch video to fullscreen")),
                 SETTING_WRITE_PROP(prop_create(c, "fstretch")),
                 SETTING_KVSTORE(url, "fstretch"),
                 SETTING_GROUP(&mp->mp_settings_video),
                 SETTING_INHERIT(p),
                 NULL);

  if(video_settings.vinterpolate_setting != NULL) {
    p = make_dir_setting(SETTING_BOOL, "vinterpolate",
                         &mp->mp_settings_video_dir,
                         dir_url, video_settings.vinterpolate_setting, mp);

    setting_create(SETTING_BOOL, mp->mp_setting_video_root,
                   SETTINGS_INITIAL_UPDATE,
                   SETTING_MUTEX(mp),
                   SETTING_LOCKMGR(mp_lockmgr),
                   SETTING_TITLE(_p("Video frame interpolation")),
                   SETTING_WRITE_PROP(prop_create(c, "vinterpolate")),
                   SETTING_KVSTORE(url, "vinterpolate"),
                   SETTING_GROUP(&mp->mp_settings_video),
                   SETTING_INHERIT(p),
                   NULL);
  }

  setting_create(SETTING_SEPARATOR, mp->mp_setting_video_root, 0,
                 SETTING_GROUP(&mp->mp_settings_video),
                 NULL);

  setting_create(SETTING_ACTION, mp->mp_setting_video_root, 0,
                 SETTING_TITLE(_p("Save as global default")),
                 SETTING_MUTEX(mp),
                 SETTING_LOCKMGR(mp_lockmgr),
                 SETTING_CALLBACK(set_video_global_defaults, mp),
                 SETTING_GROUP(&mp->mp_settings_video),
                 NULL);

  if(dir_url != NULL) {
    setting_create(SETTING_ACTION, mp->mp_setting_video_root, 0,
                   SETTING_TITLE_CSTR(set_directory_title),
                   SETTING_MUTEX(mp),
                   SETTING_LOCKMGR(mp_lockmgr),
                   SETTING_CALLBACK(set_video_directory_defaults, mp),
                   SETTING_GROUP(&mp->mp_settings_video),
                   NULL);

    setting_create(SETTING_ACTION, mp->mp_setting_video_root, 0,
                   SETTING_TITLE_CSTR(clr_directory_title),
                   SETTING_MUTEX(mp),
                   SETTING_LOCKMGR(mp_lockmgr),
                   SETTING_CALLBACK(clr_video_directory_defaults, mp),
                   SETTING_GROUP(&mp->mp_settings_video),
                   NULL);
  }

  // --- Audio ---------------------------------------------


  p = make_dir_setting(SETTING_INT, "audiovolume", &mp->mp_settings_audio_dir,
                       dir_url, gconf.setting_av_volume, mp);

  mp->mp_vol_setting =
  setting_create(SETTING_INT, mp->mp_setting_audio_root,
                 SETTINGS_INITIAL_UPDATE,
                 SETTING_MUTEX(mp),
                 SETTING_LOCKMGR(mp_lockmgr),
                 SETTING_TITLE(_p("Audio volume")),
                 SETTING_RANGE(-12, MAX_USER_AUDIO_GAIN),
                 SETTING_UNIT_CSTR("dB"),
                 SETTING_CALLBACK(update_audio_volume_user, mp),
                 SETTING_WRITE_PROP(prop_create(c, "audiovolume")),
                 SETTING_KVSTORE(url, "audiovolume"),
                 SETTING_PROP_ENABLER(prop_create(c, "canAdjustVolume")),
                 SETTING_GROUP(&mp->mp_settings_audio),
                 SETTING_INHERIT(p),
                 NULL);

  p = make_dir_setting(SETTING_INT, "avdelta", &mp->mp_settings_audio_dir,
                       dir_url, gconf.setting_av_sync, mp);

  setting_create(SETTING_INT, mp->mp_setting_audio_root,
                 SETTINGS_INITIAL_UPDATE,
                 SETTING_MUTEX(mp),
                 SETTING_LOCKMGR(mp_lockmgr),
                 SETTING_TITLE(_p("Audio delay")),
                 SETTING_RANGE(-5000, 5000),
                 SETTING_STEP(50),
                 SETTING_UNIT_CSTR("ms"),
                 SETTING_CALLBACK(update_av_delta, mp),
                 SETTING_WRITE_PROP(prop_create(c, "avdelta")),
                 SETTING_KVSTORE(url, "avdelta"),
                 SETTING_GROUP(&mp->mp_settings_audio),
                 SETTING_INHERIT(p),
                 NULL);

  setting_create(SETTING_SEPARATOR, mp->mp_setting_audio_root, 0,
                 SETTING_GROUP(&mp->mp_settings_audio),
                 NULL);

  setting_create(SETTING_ACTION, mp->mp_setting_audio_root, 0,
                 SETTING_TITLE(_p("Save as global default")),
                 SETTING_MUTEX(mp),
                 SETTING_LOCKMGR(mp_lockmgr),
                 SETTING_CALLBACK(set_audio_global_defaults, mp),
                 SETTING_GROUP(&mp->mp_settings_audio),
                 NULL);

  if(dir_url != NULL) {
    setting_create(SETTING_ACTION, mp->mp_setting_audio_root, 0,
                   SETTING_TITLE_CSTR(set_directory_title),
                   SETTING_MUTEX(mp),
                   SETTING_LOCKMGR(mp_lockmgr),
                   SETTING_CALLBACK(set_audio_directory_defaults, mp),
                   SETTING_GROUP(&mp->mp_settings_audio),
                   NULL);

    setting_create(SETTING_ACTION, mp->mp_setting_audio_root, 0,
                   SETTING_TITLE_CSTR(clr_directory_title),
                   SETTING_MUTEX(mp),
                   SETTING_LOCKMGR(mp_lockmgr),
                   SETTING_CALLBACK(clr_audio_directory_defaults, mp),
                   SETTING_GROUP(&mp->mp_settings_audio),
                   NULL);
  }


  // --- Subtitle ------------------------------------------

  setting_create(SETTING_INT, mp->mp_setting_subtitle_root,
                 SETTINGS_INITIAL_UPDATE,
                 SETTING_MUTEX(mp),
                 SETTING_LOCKMGR(mp_lockmgr),
                 SETTING_TITLE(_p("Subtitle delay")),
                 SETTING_RANGE(-600000, 600000),
                 SETTING_STEP(500),
                 SETTING_UNIT_CSTR("ms"),
                 SETTING_CALLBACK(update_sv_delta, mp),
                 SETTING_WRITE_PROP(prop_create(c, "svdelta")),
                 SETTING_KVSTORE(url, "svdelta"),
                 SETTING_GROUP(&mp->mp_settings_subtitle),
                 NULL);

  p = make_dir_setting(SETTING_INT, "subscale", &mp->mp_settings_subtitle_dir,
                       dir_url, subtitle_settings.scaling_setting, mp);

  setting_create(SETTING_INT, mp->mp_setting_subtitle_root,
                 SETTINGS_INITIAL_UPDATE,
                 SETTING_MUTEX(mp),
                 SETTING_LOCKMGR(mp_lockmgr),
                 SETTING_TITLE(_p("Subtitle scaling")),
                 SETTING_RANGE(30, 500),
                 SETTING_STEP(5),
                 SETTING_UNIT_CSTR("%"),
                 SETTING_WRITE_PROP(prop_create(c, "subscale")),
                 SETTING_KVSTORE(url, "subscale"),
                 SETTING_GROUP(&mp->mp_settings_subtitle),
                 SETTING_INHERIT(p),
                 NULL);

  p = make_dir_setting(SETTING_BOOL, "subalign", &mp->mp_settings_subtitle_dir,
                       dir_url, subtitle_settings.align_on_video_setting, mp);

  setting_create(SETTING_BOOL, mp->mp_setting_subtitle_root,
                 SETTINGS_INITIAL_UPDATE,
                 SETTING_MUTEX(mp),
                 SETTING_LOCKMGR(mp_lockmgr),
                 SETTING_TITLE(_p("Align subtitles on video frame")),
                 SETTING_WRITE_PROP(prop_create(c, "subalign")),
                 SETTING_KVSTORE(url, "subalign"),
                 SETTING_GROUP(&mp->mp_settings_subtitle),
                 SETTING_INHERIT(p),
                 NULL);

  p = make_dir_setting(SETTING_INT, "subvdisplace",
                       &mp->mp_settings_subtitle_dir,
                       dir_url, subtitle_settings.vertical_displacement_setting,
                       mp);

  setting_create(SETTING_INT, mp->mp_setting_subtitle_root,
                 SETTINGS_INITIAL_UPDATE,
                 SETTING_MUTEX(mp),
                 SETTING_LOCKMGR(mp_lockmgr),
                 SETTING_RANGE(-300, 300),
                 SETTING_STEP(5),
                 SETTING_UNIT_CSTR("px"),
                 SETTING_TITLE(_p("Subtitle vertical displacement")),
                 SETTING_WRITE_PROP(prop_create(c, "subvdisplace")),
                 SETTING_KVSTORE(url, "subvdisplace"),
                 SETTING_GROUP(&mp->mp_settings_subtitle),
                 SETTING_INHERIT(p),
                 NULL);

  p = make_dir_setting(SETTING_INT, "subhdisplace", 
                       &mp->mp_settings_subtitle_dir,
                       dir_url,
                       subtitle_settings.horizontal_displacement_setting,
                       mp);

  setting_create(SETTING_INT, mp->mp_setting_subtitle_root,
                 SETTINGS_INITIAL_UPDATE,
                 SETTING_MUTEX(mp),
                 SETTING_LOCKMGR(mp_lockmgr),
                 SETTING_RANGE(-300, 300),
                 SETTING_STEP(5),
                 SETTING_UNIT_CSTR("px"),
                 SETTING_TITLE(_p("Subtitle horizontal displacement")),
                 SETTING_WRITE_PROP(prop_create(c, "subhdisplace")),
                 SETTING_KVSTORE(url, "subhdisplace"),
                 SETTING_GROUP(&mp->mp_settings_subtitle),
                 SETTING_INHERIT(p),
                 NULL);

  setting_create(SETTING_SEPARATOR, mp->mp_setting_subtitle_root, 0,
                 SETTING_GROUP(&mp->mp_settings_subtitle),
                 NULL);

  setting_create(SETTING_ACTION, mp->mp_setting_subtitle_root, 0,
                 SETTING_TITLE(_p("Save as global default")),
                 SETTING_MUTEX(mp),
                 SETTING_LOCKMGR(mp_lockmgr),
                 SETTING_CALLBACK(set_subtitle_global_defaults, mp),
                 SETTING_GROUP(&mp->mp_settings_subtitle),
                 NULL);

  if(dir_url != NULL) {
    setting_create(SETTING_ACTION, mp->mp_setting_subtitle_root, 0,
                   SETTING_TITLE_CSTR(set_directory_title),
                   SETTING_MUTEX(mp),
                   SETTING_LOCKMGR(mp_lockmgr),
                   SETTING_CALLBACK(set_subtitle_directory_defaults, mp),
                   SETTING_GROUP(&mp->mp_settings_subtitle),
                   NULL);

    setting_create(SETTING_ACTION, mp->mp_setting_subtitle_root, 0,
                   SETTING_TITLE_CSTR(clr_directory_title),
                   SETTING_MUTEX(mp),
                   SETTING_LOCKMGR(mp_lockmgr),
                   SETTING_CALLBACK(clr_subtitle_directory_defaults, mp),
                   SETTING_GROUP(&mp->mp_settings_subtitle),
                   NULL);
  }

  // ----------------------------------------------------------------


  if(gconf.can_standby) {
      setting_create(SETTING_BOOL, mp->mp_setting_root,
                     SETTINGS_INITIAL_UPDATE,
                     SETTING_MUTEX(mp),
                     SETTING_LOCKMGR(mp_lockmgr),
                     SETTING_WRITE_INT(&mp->mp_auto_standby),
                     SETTING_TITLE(_p("Go to standby after video ends")),
                     SETTING_GROUP(&mp->mp_settings_other),
                     NULL);
  }
}