+ vlc_object_attach (mp, mp->p_libvlc);
+
+ /* Input */
+ var_Create (mp, "rate", VLC_VAR_FLOAT|VLC_VAR_DOINHERIT);
+
+ /* Video */
+ var_Create (mp, "vout", VLC_VAR_STRING|VLC_VAR_DOINHERIT);
+ var_Create (mp, "window", VLC_VAR_STRING);
+ var_Create (mp, "vmem-lock", VLC_VAR_ADDRESS);
+ var_Create (mp, "vmem-unlock", VLC_VAR_ADDRESS);
+ var_Create (mp, "vmem-display", VLC_VAR_ADDRESS);
+ var_Create (mp, "vmem-data", VLC_VAR_ADDRESS);
+ var_Create (mp, "vmem-chroma", VLC_VAR_STRING | VLC_VAR_DOINHERIT);
+ var_Create (mp, "vmem-width", VLC_VAR_INTEGER | VLC_VAR_DOINHERIT);
+ var_Create (mp, "vmem-height", VLC_VAR_INTEGER | VLC_VAR_DOINHERIT);
+ var_Create (mp, "vmem-pitch", VLC_VAR_INTEGER | VLC_VAR_DOINHERIT);
+ var_Create (mp, "drawable-xid", VLC_VAR_INTEGER);
+#ifdef WIN32
+ var_Create (mp, "drawable-hwnd", VLC_VAR_ADDRESS);
+#endif
+#ifdef __APPLE__
+ var_Create (mp, "drawable-agl", VLC_VAR_INTEGER);
+ var_Create (mp, "drawable-nsobject", VLC_VAR_ADDRESS);
+#endif
+
+ var_Create (mp, "keyboard-events", VLC_VAR_BOOL);
+ var_SetBool (mp, "keyboard-events", true);
+ var_Create (mp, "mouse-events", VLC_VAR_BOOL);
+ var_SetBool (mp, "mouse-events", true);
+
+ var_Create (mp, "fullscreen", VLC_VAR_BOOL);
+ var_Create (mp, "autoscale", VLC_VAR_BOOL);
+ var_SetBool (mp, "autoscale", true);
+ var_Create (mp, "scale", VLC_VAR_FLOAT);
+ var_SetFloat (mp, "scale", 1.);
+ var_Create (mp, "aspect-ratio", VLC_VAR_STRING);
+ var_Create (mp, "crop", VLC_VAR_STRING);
+ var_Create (mp, "deinterlace", VLC_VAR_INTEGER);
+ var_Create (mp, "deinterlace-mode", VLC_VAR_STRING);
+
+ var_Create (mp, "vbi-page", VLC_VAR_INTEGER);
+
+ var_Create (mp, "marq-marquee", VLC_VAR_STRING);
+ var_Create (mp, "marq-color", VLC_VAR_INTEGER | VLC_VAR_DOINHERIT);
+ var_Create (mp, "marq-opacity", VLC_VAR_INTEGER | VLC_VAR_DOINHERIT);
+ var_Create (mp, "marq-position", VLC_VAR_INTEGER | VLC_VAR_DOINHERIT);
+ var_Create (mp, "marq-refresh", VLC_VAR_INTEGER | VLC_VAR_DOINHERIT);
+ var_Create (mp, "marq-size", VLC_VAR_INTEGER | VLC_VAR_DOINHERIT);
+ var_Create (mp, "marq-timeout", VLC_VAR_INTEGER | VLC_VAR_DOINHERIT);
+ var_Create (mp, "marq-x", VLC_VAR_INTEGER | VLC_VAR_DOINHERIT);
+ var_Create (mp, "marq-y", VLC_VAR_INTEGER | VLC_VAR_DOINHERIT);
+
+ var_Create (mp, "logo-file", VLC_VAR_STRING);
+ var_Create (mp, "logo-x", VLC_VAR_INTEGER | VLC_VAR_DOINHERIT);
+ var_Create (mp, "logo-y", VLC_VAR_INTEGER | VLC_VAR_DOINHERIT);
+ var_Create (mp, "logo-delay", VLC_VAR_INTEGER | VLC_VAR_DOINHERIT);
+ var_Create (mp, "logo-repeat", VLC_VAR_INTEGER | VLC_VAR_DOINHERIT);
+ var_Create (mp, "logo-opacity", VLC_VAR_INTEGER | VLC_VAR_DOINHERIT);
+ var_Create (mp, "logo-position", VLC_VAR_INTEGER | VLC_VAR_DOINHERIT);
+
+ var_Create (mp, "contrast", VLC_VAR_FLOAT | VLC_VAR_DOINHERIT);
+ var_Create (mp, "brightness", VLC_VAR_FLOAT | VLC_VAR_DOINHERIT);
+ var_Create (mp, "hue", VLC_VAR_INTEGER | VLC_VAR_DOINHERIT);
+ var_Create (mp, "saturation", VLC_VAR_FLOAT | VLC_VAR_DOINHERIT);
+ var_Create (mp, "gamma", VLC_VAR_FLOAT | VLC_VAR_DOINHERIT);
+
+ /* Audio */
+ var_Create (mp, "aout", VLC_VAR_STRING | VLC_VAR_DOINHERIT);
+ var_Create (mp, "volume-muted", VLC_VAR_BOOL);
+ var_Create (mp, "saved-volume", VLC_VAR_INTEGER);
+ var_Create (mp, "volume-change", VLC_VAR_VOID);
+ var_Create (mp, "find-input-callback", VLC_VAR_ADDRESS);
+ var_SetAddress (mp, "find-input-callback", find_input);
+
+ mp->p_md = NULL;
+ mp->state = libvlc_NothingSpecial;
+ mp->p_libvlc_instance = instance;
+ mp->input.p_thread = NULL;
+ mp->input.p_resource = NULL;
+ vlc_mutex_init (&mp->input.lock);
+ mp->i_refcount = 1;
+ mp->p_event_manager = libvlc_event_manager_new(mp, instance);
+ if (unlikely(mp->p_event_manager == NULL))