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