static ffmpeg() { var loadedLibraries = new Dictionary <string, IntPtr>(); GetOrLoadLibrary = (name, version) => { var key = $"{name}{version}"; if (loadedLibraries.TryGetValue(key, out var ptr)) { return(ptr); } ptr = LibraryLoader.LoadNativeLibraryUsingPlatformNamingConvention(abs_path, name, version); loadedLibraries.Add(key, ptr); return(ptr); }; CloseLibrary = (name, version) => { var key = $"{name}{version}"; bool ret = false; if (loadedLibraries.TryGetValue(key, out var ptr)) { ret = LibraryLoader.UnloadLibrary(ptr); loadedLibraries.Remove(key); } return(ret); }; }
static ffmpeg() { var loadedLibraries = new Dictionary <string, IntPtr>(); GetOrLoadLibrary = (name, version) => { var key = $"{name}{version}"; if (loadedLibraries.TryGetValue(key, out var ptr)) { return(ptr); } lock (SyncRoot) { if (loadedLibraries.TryGetValue(key, out ptr)) { return(ptr); } ptr = LibraryLoader.LoadNativeLibraryUsingPlatformNamingConvention(RootPath, name, version); loadedLibraries.Add(key, ptr); } return(ptr); }; }
static ffmpeg() { var loadedLibraries = new Dictionary <string, IntPtr>(); GetOrLoadLibrary = (name, version) => { var key = $"{name}{version}"; if (loadedLibraries.TryGetValue(key, out var ptr)) { return(ptr); } lock (SyncRoot) { if (loadedLibraries.TryGetValue(key, out ptr)) { return(ptr); } ptr = LibraryLoader.LoadNativeLibraryUsingPlatformNamingConvention(RootPath, name, version); if (ptr == IntPtr.Zero) { throw new DllNotFoundException($"Unable to load DLL '{name}.{version}': The specified module could not be found."); } loadedLibraries.Add(key, ptr); } return(ptr); }; }
/// <summary> /// Loads the library from the specified path. /// </summary> /// <param name="basePath">The base path.</param> /// <returns>True if the registration was successful</returns> /// <exception cref="InvalidOperationException">When library has already been loaded.</exception> public bool Load(string basePath) { lock (LoadLock) { if (Reference != IntPtr.Zero) { throw new InvalidOperationException($"Library {Name} was already loaded."); } var result = LibraryLoader.LoadNativeLibraryUsingPlatformNamingConvention(basePath, Name, Version); if (result != IntPtr.Zero) { Reference = result; BasePath = basePath; LoadErrorCode = 0; return(true); } return(false); } }