mirror of
https://github.com/facefusion/facefusion.git
synced 2026-05-12 10:31:33 +02:00
8bbb6e7062
* use find_library from cytypes, enable rtc tests again * install libvpx and libopus for unix on CI * bug found when sending audio first * no need for source path guard * add more tests for libraries * add more tests for libraries * fix testing * disable tests to see what happens * disable tests to see what happens * debug ci * debug ci * debug ci * debug ci * debug ci * debug ci * debug ci * debug ci * debug ci * debug ci * debug ci * hope to solve everything via ENV * hope to solve everything via ENV * hope to solve everything via ENV * hope to solve everything via ENV * hope to solve everything via ENV * hope to solve everything via ENV * hope to solve everything via ENV * hope to solve everything via ENV * fix testing * fix testing * fix testing * fix testing * fix testing * fix testing * switch to self hosted libraries * fixes for macos * switch to self hosted libraries * switch to self hosted libraries * switch to self hosted libraries * switch to self hosted libraries * switch to self hosted libraries * switch to self hosted libraries * switch to self hosted libraries * switch to self hosted libraries
81 lines
2.4 KiB
Python
81 lines
2.4 KiB
Python
import ctypes
|
|
import os
|
|
from functools import lru_cache
|
|
from typing import Dict, Optional, Tuple
|
|
|
|
from facefusion.common_helper import is_linux, is_macos, is_windows
|
|
from facefusion.download import conditional_download_hashes, conditional_download_sources, resolve_download_url_by_provider
|
|
from facefusion.filesystem import resolve_relative_path
|
|
from facefusion.types import DownloadSet
|
|
|
|
|
|
def resolve_library_paths() -> Optional[Tuple[str, str]]:
|
|
if is_linux():
|
|
return 'linux/libopus.hash', 'linux/libopus.so'
|
|
if is_macos():
|
|
return 'macos/libopus.hash', 'macos/libopus.dylib'
|
|
if is_windows():
|
|
return 'windows/opus.hash', 'windows/opus.dll'
|
|
return None
|
|
|
|
|
|
@lru_cache
|
|
def create_static_library_set() -> Dict[str, DownloadSet]:
|
|
library_hash_path, library_source_path = resolve_library_paths()
|
|
|
|
return\
|
|
{
|
|
'hashes':
|
|
{
|
|
'opus':
|
|
{
|
|
'url': resolve_download_url_by_provider('huggingface', 'libraries-4.0.0', library_hash_path),
|
|
'path': resolve_relative_path('../.libraries/' + os.path.basename(library_hash_path))
|
|
}
|
|
},
|
|
'sources':
|
|
{
|
|
'opus':
|
|
{
|
|
'url': resolve_download_url_by_provider('huggingface', 'libraries-4.0.0', library_source_path),
|
|
'path': resolve_relative_path('../.libraries/' + os.path.basename(library_source_path))
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
def pre_check() -> bool:
|
|
library_hash_set = create_static_library_set().get('hashes')
|
|
library_source_set = create_static_library_set().get('sources')
|
|
|
|
return conditional_download_hashes(library_hash_set) and conditional_download_sources(library_source_set)
|
|
|
|
|
|
@lru_cache
|
|
def create_static_library() -> Optional[ctypes.CDLL]:
|
|
library_path = create_static_library_set().get('sources').get('opus').get('path')
|
|
|
|
if library_path:
|
|
if is_windows():
|
|
library = ctypes.CDLL(library_path, winmode = 0)
|
|
else:
|
|
library = ctypes.CDLL(library_path)
|
|
|
|
if library:
|
|
return init_ctypes(library)
|
|
|
|
return None
|
|
|
|
|
|
def init_ctypes(library : ctypes.CDLL) -> ctypes.CDLL:
|
|
library.opus_encoder_create.argtypes = [ ctypes.c_int, ctypes.c_int, ctypes.c_int, ctypes.POINTER(ctypes.c_int) ]
|
|
library.opus_encoder_create.restype = ctypes.c_void_p
|
|
|
|
library.opus_encode_float.argtypes = [ ctypes.c_void_p, ctypes.POINTER(ctypes.c_float), ctypes.c_int, ctypes.c_char_p, ctypes.c_int ]
|
|
library.opus_encode_float.restype = ctypes.c_int
|
|
|
|
library.opus_encoder_destroy.argtypes = [ ctypes.c_void_p ]
|
|
library.opus_encoder_destroy.restype = None
|
|
|
|
return library
|