TAG:
{ if(IntPtr.Zero == vlc.SubObject) { return VlcError.NoObj; } IntPtr p_item = config_FindConfig(vlc.SubObject, name); if(IntPtr.Zero == p_item) { return VlcError.NoVar; } try { module_config_t mod = (module_config_t)Marshal.PtrToStructure(p_item, typeof(module_config_t)); switch(mod.i_type) { case CONFIG_ITEM.CONFIG_ITEM_BOOL: { bool result = (__config_GetInt(vlc.SubObject, name) == 0); value = result.ToString(); } break; case CONFIG_ITEM.CONFIG_ITEM_INTEGER: { int intResult = __config_GetInt(vlc.SubObject, name); value = intResult.ToString(); } break; case CONFIG_ITEM.CONFIG_ITEM_FLOAT: { float floatResult = __config_GetFloat(vlc.SubObject, name); value = floatResult.ToString(); } break; case CONFIG_ITEM.CONFIG_ITEM_STRING: value = __config_GetPsz(vlc.SubObject, name); break; default: return VlcError.BadVar; } } catch(Exception e) { this.lastErrorMessage = e.Message; return VlcError.Exception; } } return VlcError.Success; } public VlcError SetConfigVariable(String name, String value) { using(VlcObject vlc = new VlcObject(this.vlcHandle, ObjectType.VLC_OBJECT_VLC)) { if(IntPtr.Zero == vlc.SubObject) { return VlcError.NoObj; } IntPtr p_item = config_FindConfig(vlc.SubObject, name); if(IntPtr.Zero == p_item) { return VlcError.NoVar; } try { module_config_t mod = (module_config_t)Marshal.PtrToStructure(p_item, typeof(module_config_t)); switch(mod.i_type) { case CONFIG_ITEM.CONFIG_ITEM_BOOL: { bool boolResult; if(Boolean.TryParse(value, out boolResult)) { __config_PutInt(vlc.SubObject, name, boolResult ? 1 : 0); } else { return VlcError.BadVar; } } break; case CONFIG_ITEM.CONFIG_ITEM_INTEGER: { int intResult; if(Int32.TryParse(value, out intResult)) { __config_PutInt(vlc.SubObject, name, intResult); } else { return VlcError.BadVar; } } break; case CONFIG_ITEM.CONFIG_ITEM_FLOAT: { float floatResult; if(Single.TryParse(value, out floatResult)) { __config_PutFloat(vlc.SubObject, name, floatResult); } else { return VlcError.BadVar; } } break; case CONFIG_ITEM.CONFIG_ITEM_STRING: __config_PutPsz(vlc.SubObject, name, value); break; default: return VlcError.BadVar; } } catch(Exception e) { this.lastErrorMessage = e.Message; return VlcError.Exception; } } return VlcError.Success; } #endregion #region private members, properties and methods private static string vlcInstallDirectory = ""; private int vlcHandle = -1; private Control outputWindow = null; private string lastErrorMessage = ""; private int artificialLength; private double timeScaling; private GCHandle gch; private VarChangedCallback currentTrackCallback; private string previousNowPlaying = String.Empty; /// ------------------------------------------------------------------- /// <summary> /// Method name : QueryVlcInstallPath /// Author : Odysee /// Date : 10.11.2006 /// </summary> /// ------------------------------------------------------------------- private static string QueryVlcInstallPath() { // open registry RegistryKey regkeyVlcInstallPathKey = Registry.LocalMachine.OpenSubKey(@"SOFTWARE/VideoLAN/VLC"); if(regkeyVlcInstallPathKey == null) return ""; return (string)regkeyVlcInstallPathKey.GetValue("InstallDir",""); } private void HookPlaylistChanges() { using(VlcObject vlc = new VlcObject(this.vlcHandle, ObjectType.VLC_OBJECT_PLAYLIST)) { if(vlc.SubObject != IntPtr.Zero) { this.gch = GCHandle.Alloc(this); this.currentTrackCallback = new VarChangedCallback(CurrentTrackChanged); int isSet = __var_AddCallback(vlc.SubObject, Playlist_Current, this.currentTrackCallback, (IntPtr)this.gch); //Debug.WriteLine("__var_AddCallback playlistObject = " + isSet.ToString()); } } } private void UnhookPlaylistChanges() { using(VlcObject vlc = new VlcObject(this.vlcHandle, ObjectType.VLC_OBJECT_PLAYLIST)) { if(vlc.SubObject != IntPtr.Zero) { __var_DelCallback(vlc.SubObject, Playlist_Current, this.currentTrackCallback, (IntPtr)this.gch); } } this.gch.Free(); } private static int CurrentTrackChanged(IntPtr vlc, String variable, vlc_value_t old_val, vlc_value_t new_val, IntPtr param) { //Debug.WriteLine("CurrentTrackChanged: " + new_val.i_int.ToString()); GCHandle gch = (GCHandle)param; NativeLibVlc thisVlc = (NativeLibVlc)gch.Target; try { using(VlcObject vobj = new VlcObject(thisVlc.vlcHandle, ObjectType.VLC_OBJECT_INPUT)) { if(vobj.SubObject != IntPtr.Zero) { IntPtr resultString = IntPtr.Zero; input_Control(vobj.SubObject, input_query_e.INPUT_GET_INFO, Meta_information, Now_Playing, ref resultString); String nowPlaying = Marshal.PtrToStringAnsi(resultString); if(nowPlaying != thisVlc.previousNowPlaying) { thisVlc.previousNowPlaying = nowPlaying; Debug.WriteLine(String.Format("nowPlaying: {0}", nowPlaying)); thisVlc.VlcNowPlayingChanged(nowPlaying); } } } } catch(Exception ex) { thisVlc.lastErrorMessage = ex.Message; } return (int)VlcError.Success; } #endregion } /* future features add_bool( "brightness-threshold", 0, NULL, THRES_TEXT, THRES_LONGTEXT, VLC_FALSE ); */ } (Chris Meadowcroft) |